Eclipse SUMO - Simulation of Urban MObility
GNEHierarchicalElementChildren.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // A abstract class for representation of Hierarchical Elements
16 /****************************************************************************/
17 #ifndef GNEHierarchicalElementChildren_h
18 #define GNEHierarchicalElementChildren_h
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 
24 #include <config.h>
25 
27 
28 #include "GNEAttributeCarrier.h"
29 
30 // ===========================================================================
31 // class declarations
32 // ===========================================================================
33 
34 class GNEAdditional;
35 class GNEDemandElement;
36 class GNEShape;
37 
38 // ===========================================================================
39 // class definitions
40 // ===========================================================================
41 
47 
48 public:
49 
51  friend class GNEChange_Children;
52 
61  const std::vector<GNEEdge*>& edgeChildren,
62  const std::vector<GNELane*>& laneChildren,
63  const std::vector<GNEShape*>& shapeChildren,
64  const std::vector<GNEAdditional*>& additionalChildren,
65  const std::vector<GNEDemandElement*>& demandElementChildren);
66 
69 
71  const Position& getChildPosition(const GNELane* lane);
72 
74  double getChildRotation(const GNELane* lane);
75 
78 
79  // Draw connections between parent and children
80  void drawChildConnections(const GUIVisualizationSettings& s, const GUIGlObjectType GLTypeParent) const;
81 
83  virtual std::string generateChildID(SumoXMLTag childTag) = 0;
84 
88  virtual void updateGeometry() = 0;
89 
91  virtual Position getPositionInView() const = 0;
93 
97  void addEdgeChild(GNEEdge* edge);
98 
100  void removeEdgeChild(GNEEdge* edge);
101 
103  const std::vector<GNEEdge*>& getEdgeChildren() const;
104 
106 
110  void addLaneChild(GNELane* lane);
111 
113  void removeLaneChild(GNELane* lane);
114 
116  const std::vector<GNELane*>& getLaneChildren() const;
117 
119 
123  void addShapeChild(GNEShape* shape);
124 
126  void removeShapeChild(GNEShape* shape);
127 
129  const std::vector<GNEShape*>& getShapeChildren() const;
130 
132 
136  void addAdditionalChild(GNEAdditional* additional);
137 
139  void removeAdditionalChild(GNEAdditional* additional);
140 
142  const std::vector<GNEAdditional*>& getAdditionalChildren() const;
143 
145  void sortAdditionalChildren();
146 
149 
151 
155  void addDemandElementChild(GNEDemandElement* demandElement);
156 
158  void removeDemandElementChild(GNEDemandElement* demandElement);
159 
161  const std::vector<GNEDemandElement*>& getDemandElementChildren() const;
162 
164  const std::set<GNEDemandElement*>& getSortedDemandElementChildrenByType(SumoXMLTag tag) const;
165 
168 
171 
173  GNEDemandElement* getPreviousemandElement(const GNEDemandElement* demandElement) const;
174 
176  GNEDemandElement* getNextDemandElement(const GNEDemandElement* demandElement) const;
177 
179 
181  virtual void updateAdditionalParent();
182 
184  virtual void updateDemandElementParent();
185 
186 protected:
187 
190 
191  private:
196 
198  ConnectionGeometry(GNELane* _lane, Position _pos, double _rot);
199 
202 
205 
207  double rot;
208  };
209 
210  public:
212  ChildConnections(GNEHierarchicalElementChildren* hierarchicalElement);
213 
215  void update();
216 
218  void draw(const GUIVisualizationSettings& s, const GUIGlObjectType parentType) const;
219 
221  std::vector<ConnectionGeometry> symbolsPositionAndRotation;
222 
224  std::vector<PositionVector> connectionPositions;
225 
226  private:
229  };
230 
232  void changeEdgeChildren(GNEAdditional* elementChild, const std::string& newEdgeIDs);
233 
235  void changeLaneChildren(GNEAdditional* elementChild, const std::string& newEdgeIDs);
236 
239 
240 private:
242  std::vector<GNEEdge*> myEdgeChildren;
243 
245  std::vector<GNELane*> myLaneChildren;
246 
248  std::vector<GNEShape*> myShapeChildren;
249 
251  std::vector<GNEAdditional*> myAdditionalChildren;
252 
254  std::vector<GNEDemandElement*> myDemandElementChildren;
255 
257  std::map<SumoXMLTag, std::set<GNEDemandElement*> > mySortedDemandElementChildrenByType;
258 
261 
264 
267 };
268 
269 #endif
GNEHierarchicalElementChildren::removeAdditionalChild
void removeAdditionalChild(GNEAdditional *additional)
remove additional child from this additional
Definition: GNEHierarchicalElementChildren.cpp:114
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:54
GUIGlObjectTypes.h
GNEHierarchicalElementChildren::changeEdgeChildren
void changeEdgeChildren(GNEAdditional *elementChild, const std::string &newEdgeIDs)
change edge children of an additional
Definition: GNEHierarchicalElementChildren.cpp:463
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:47
GNEHierarchicalElementChildren::removeEdgeChild
void removeEdgeChild(GNEEdge *edge)
remove edge child
Definition: GNEHierarchicalElementChildren.cpp:362
GNEHierarchicalElementChildren::~GNEHierarchicalElementChildren
~GNEHierarchicalElementChildren()
Destructor.
Definition: GNEHierarchicalElementChildren.cpp:58
GNEHierarchicalElementChildren::addEdgeChild
void addEdgeChild(GNEEdge *edge)
Definition: GNEHierarchicalElementChildren.cpp:351
GNEHierarchicalElementChildren::generateChildID
virtual std::string generateChildID(SumoXMLTag childTag)=0
gererate a new ID for an element child
GNEHierarchicalElementChildren::getPositionInView
virtual Position getPositionInView() const =0
Returns position of hierarchical element in view.
GNEHierarchicalElementChildren::myChildConnections
ChildConnections myChildConnections
variable ChildConnections
Definition: GNEHierarchicalElementChildren.h:238
GNEHierarchicalElementChildren::updateDemandElementParent
virtual void updateDemandElementParent()
update parent after add or remove a child (can be reimplemented, for example used for statistics)
Definition: GNEHierarchicalElementChildren.cpp:457
GNEHierarchicalElementChildren::ChildConnections
struct for pack all variables and functions relative to connections between hierarchical element and ...
Definition: GNEHierarchicalElementChildren.h:189
GNEHierarchicalElementChildren::addShapeChild
void addShapeChild(GNEShape *shape)
Definition: GNEHierarchicalElementChildren.cpp:415
GNEHierarchicalElementChildren::removeShapeChild
void removeShapeChild(GNEShape *shape)
remove shape child
Definition: GNEHierarchicalElementChildren.cpp:430
GNEHierarchicalElementChildren::removeDemandElementChild
void removeDemandElementChild(GNEDemandElement *demandElement)
remove demand element child from this demand element
Definition: GNEHierarchicalElementChildren.cpp:275
GNEHierarchicalElementChildren::removeLaneChild
void removeLaneChild(GNELane *lane)
remove lane child
Definition: GNEHierarchicalElementChildren.cpp:396
SumoXMLTag
SumoXMLTag
Numbers representing SUMO-XML - element names.
Definition: SUMOXMLDefinitions.h:42
GNEHierarchicalElementChildren::GNEHierarchicalElementChildren
GNEHierarchicalElementChildren(GNEAttributeCarrier *AC, const std::vector< GNEEdge * > &edgeChildren, const std::vector< GNELane * > &laneChildren, const std::vector< GNEShape * > &shapeChildren, const std::vector< GNEAdditional * > &additionalChildren, const std::vector< GNEDemandElement * > &demandElementChildren)
Parameter Constructor.
Definition: GNEHierarchicalElementChildren.cpp:37
GNEHierarchicalElementChildren::getNextDemandElement
GNEDemandElement * getNextDemandElement(const GNEDemandElement *demandElement) const
get next demand element to the given demand element
Definition: GNEHierarchicalElementChildren.cpp:336
GNEHierarchicalElementChildren::checkDemandElementChildrenOverlapping
bool checkDemandElementChildrenOverlapping() const
check if children are overlapped (Used by Rerouters)
Definition: GNEHierarchicalElementChildren.cpp:315
GNEChange_Children
Definition: GNEChange_Children.h:41
GUIGlObjectType
GUIGlObjectType
Definition: GUIGlObjectTypes.h:40
GNEEdge
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:50
GNEHierarchicalElementChildren::ChildConnections::symbolsPositionAndRotation
std::vector< ConnectionGeometry > symbolsPositionAndRotation
position and rotation of every symbol over lane
Definition: GNEHierarchicalElementChildren.h:221
GNEHierarchicalElementChildren::checkAdditionalChildrenOverlapping
bool checkAdditionalChildrenOverlapping() const
check if children are overlapped (Used by Rerouters)
Definition: GNEHierarchicalElementChildren.cpp:216
GNEHierarchicalElementChildren::getLaneChildren
const std::vector< GNELane * > & getLaneChildren() const
get lanes of VSS
Definition: GNEHierarchicalElementChildren.cpp:409
GNEHierarchicalElementChildren::ChildConnections::ChildConnections
ChildConnections(GNEHierarchicalElementChildren *hierarchicalElement)
constructor
Definition: GNEHierarchicalElementChildren.cpp:513
GNEHierarchicalElementChildren::ChildConnections::ConnectionGeometry
connection geometry
Definition: GNEHierarchicalElementChildren.h:193
GNEHierarchicalElementChildren::getEdgeChildren
const std::vector< GNEEdge * > & getEdgeChildren() const
get edge chidls
Definition: GNEHierarchicalElementChildren.cpp:377
GNEHierarchicalElementChildren::addDemandElementChild
void addDemandElementChild(GNEDemandElement *demandElement)
Definition: GNEHierarchicalElementChildren.cpp:257
GNEShape
Definition: GNEShape.h:35
GNEHierarchicalElementChildren::ChildConnections::ConnectionGeometry::ConnectionGeometry
ConnectionGeometry()
default constructor
Definition: GNEHierarchicalElementChildren.cpp:499
GNEHierarchicalElementChildren::drawChildConnections
void drawChildConnections(const GUIVisualizationSettings &s, const GUIGlObjectType GLTypeParent) const
Definition: GNEHierarchicalElementChildren.cpp:90
GNEHierarchicalElementChildren::getPreviousemandElement
GNEDemandElement * getPreviousemandElement(const GNEDemandElement *demandElement) const
get previous demand element to the given demand element
Definition: GNEHierarchicalElementChildren.cpp:321
GNEHierarchicalElementChildren::getChildRotation
double getChildRotation(const GNELane *lane)
get child rotation calculated in ChildConnections
Definition: GNEHierarchicalElementChildren.cpp:73
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
GNEHierarchicalElementChildren::changeLaneChildren
void changeLaneChildren(GNEAdditional *elementChild, const std::string &newEdgeIDs)
change edge children of an additional
Definition: GNEHierarchicalElementChildren.cpp:480
GNEHierarchicalElementChildren::getShapeChildren
const std::vector< GNEShape * > & getShapeChildren() const
get shapes of VSS
Definition: GNEHierarchicalElementChildren.cpp:445
GNEHierarchicalElementChildren::mySortedDemandElementChildrenByType
std::map< SumoXMLTag, std::set< GNEDemandElement * > > mySortedDemandElementChildrenByType
vector with the demand elements children sorted by type and filtered (to avoid duplicated
Definition: GNEHierarchicalElementChildren.h:257
GNEHierarchicalElementChildren::myEdgeChildren
std::vector< GNEEdge * > myEdgeChildren
vector with the edge children of this element
Definition: GNEHierarchicalElementChildren.h:242
GNEHierarchicalElementChildren::ChildConnections::ConnectionGeometry::rot
double rot
rotation
Definition: GNEHierarchicalElementChildren.h:207
GNEHierarchicalElementChildren::ChildConnections::ConnectionGeometry::lane
GNELane * lane
lane
Definition: GNEHierarchicalElementChildren.h:201
GNEHierarchicalElementChildren::ChildConnections::connectionPositions
std::vector< PositionVector > connectionPositions
Matrix with the Vertex's positions of connections between parents an their children.
Definition: GNEHierarchicalElementChildren.h:224
GNEHierarchicalElementChildren::ChildConnections::draw
void draw(const GUIVisualizationSettings &s, const GUIGlObjectType parentType) const
draw connections between Parent and childrens
Definition: GNEHierarchicalElementChildren.cpp:605
GNEHierarchicalElementChildren::myShapeChildren
std::vector< GNEShape * > myShapeChildren
vector with the lane children of this element
Definition: GNEHierarchicalElementChildren.h:248
GNEHierarchicalElementChildren::myDemandElementChildren
std::vector< GNEDemandElement * > myDemandElementChildren
vector with the demand elements children
Definition: GNEHierarchicalElementChildren.h:254
GNEHierarchicalElementChildren::ChildConnections::myHierarchicalElement
GNEHierarchicalElementChildren * myHierarchicalElement
pointer to hierarchical element parent
Definition: GNEHierarchicalElementChildren.h:228
GNEHierarchicalElementChildren::addLaneChild
void addLaneChild(GNELane *lane)
Definition: GNEHierarchicalElementChildren.cpp:383
GNEHierarchicalElementChildren::getAdditionalChildren
const std::vector< GNEAdditional * > & getAdditionalChildren() const
return vector of additionals that have as Parent this edge (For example, Calibrators)
Definition: GNEHierarchicalElementChildren.cpp:132
GNEHierarchicalElementChildren::updateGeometry
virtual void updateGeometry()=0
GNEHierarchicalElementChildren::updateChildConnections
void updateChildConnections()
update child connections
Definition: GNEHierarchicalElementChildren.cpp:84
GNEHierarchicalElementChildren::addAdditionalChild
void addAdditionalChild(GNEAdditional *additional)
Definition: GNEHierarchicalElementChildren.cpp:96
GNEHierarchicalElementChildren::updateAdditionalParent
virtual void updateAdditionalParent()
update parent after add or remove a child (can be reimplemented, for example used for statistics)
Definition: GNEHierarchicalElementChildren.cpp:451
GNEHierarchicalElementChildren::myAC
GNEAttributeCarrier * myAC
pointer to AC (needed to avoid diamond problem)
Definition: GNEHierarchicalElementChildren.h:260
GNEHierarchicalElementChildren::getChildPosition
const Position & getChildPosition(const GNELane *lane)
get child position calculated in ChildConnections
Definition: GNEHierarchicalElementChildren.cpp:62
GNEAttributeCarrier.h
config.h
GNEHierarchicalElementChildren::sortDemandElementChildren
void sortDemandElementChildren()
sort children (used by Rerouters, VSS, TAZs...)
Definition: GNEHierarchicalElementChildren.cpp:309
GNEHierarchicalElementChildren::ChildConnections::update
void update()
update Connection's geometry
Definition: GNEHierarchicalElementChildren.cpp:518
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:346
GNEHierarchicalElementChildren::ChildConnections::ConnectionGeometry::pos
Position pos
position
Definition: GNEHierarchicalElementChildren.h:204
GNEHierarchicalElementChildren::getSortedDemandElementChildrenByType
const std::set< GNEDemandElement * > & getSortedDemandElementChildrenByType(SumoXMLTag tag) const
return vector of demand elements that have as Parent this edge (For example, Calibrators)
Definition: GNEHierarchicalElementChildren.cpp:303
GNEHierarchicalElementChildren::sortAdditionalChildren
void sortAdditionalChildren()
sort children (used by Rerouters, VSS, TAZs...)
Definition: GNEHierarchicalElementChildren.cpp:138
GNEHierarchicalElementChildren::getDemandElementChildren
const std::vector< GNEDemandElement * > & getDemandElementChildren() const
return vector of demand elements that have as Parent this edge (For example, Calibrators)
Definition: GNEHierarchicalElementChildren.cpp:297
GNEHierarchicalElementChildren::operator=
GNEHierarchicalElementChildren & operator=(const GNEHierarchicalElementChildren &)=delete
Invalidated assignment operator.
GNEHierarchicalElementChildren::myLaneChildren
std::vector< GNELane * > myLaneChildren
vector with the lane children of this element
Definition: GNEHierarchicalElementChildren.h:245
GNELane
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:46
GNEAttributeCarrier
Definition: GNEAttributeCarrier.h:54
GNEHierarchicalElementChildren
An special type of Attribute carrier that owns hierarchical elements.
Definition: GNEHierarchicalElementChildren.h:46
GNEHierarchicalElementChildren::myAdditionalChildren
std::vector< GNEAdditional * > myAdditionalChildren
vector with the additional children
Definition: GNEHierarchicalElementChildren.h:251