Eclipse SUMO - Simulation of Urban MObility
GNEHierarchicalChildElements.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 /****************************************************************************/
14 // A abstract class for representation of Hierarchical Elements
15 /****************************************************************************/
16 #ifndef GNEHierarchicalChildElements_h
17 #define GNEHierarchicalChildElements_h
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 
23 #include <config.h>
24 
26 
27 #include "GNEAttributeCarrier.h"
28 
29 // ===========================================================================
30 // class declarations
31 // ===========================================================================
32 
33 class GNEAdditional;
34 class GNEDemandElement;
35 class GNEShape;
36 
37 // ===========================================================================
38 // class definitions
39 // ===========================================================================
40 
46 
47 public:
48 
50  friend class GNEChange_Children;
51 
60  const std::vector<GNEEdge*>& childEdges,
61  const std::vector<GNELane*>& childLanes,
62  const std::vector<GNEShape*>& childShapes,
63  const std::vector<GNEAdditional*>& childAdditionals,
64  const std::vector<GNEDemandElement*>& childDemandElements);
65 
68 
70  const Position& getChildPosition(const GNELane* lane);
71 
73  double getChildRotation(const GNELane* lane);
74 
77 
78  // Draw connections between parent and children
79  void drawChildConnections(const GUIVisualizationSettings& s, const GUIGlObjectType GLTypeParent) const;
80 
82  virtual std::string generateChildID(SumoXMLTag childTag) = 0;
83 
87  virtual void updateGeometry() = 0;
88 
90  virtual Position getPositionInView() const = 0;
92 
96  void addChildEdge(GNEEdge* edge);
97 
99  void removeChildEdge(GNEEdge* edge);
100 
102  const std::vector<GNEEdge*>& getChildEdges() const;
103 
105 
109  void addChildLane(GNELane* lane);
110 
112  void removeChildLane(GNELane* lane);
113 
115  const std::vector<GNELane*>& getChildLanes() const;
116 
118 
122  void addChildShape(GNEShape* shape);
123 
125  void removeChildShape(GNEShape* shape);
126 
128  const std::vector<GNEShape*>& getChildShapes() const;
129 
131 
135  void addChildAdditional(GNEAdditional* additional);
136 
138  void removeChildAdditional(GNEAdditional* additional);
139 
141  const std::vector<GNEAdditional*>& getChildAdditionals() const;
142 
144  void sortChildAdditionals();
145 
148 
150 
154  void addChildDemandElement(GNEDemandElement* demandElement);
155 
157  void removeChildDemandElement(GNEDemandElement* demandElement);
158 
160  const std::vector<GNEDemandElement*>& getChildDemandElements() const;
161 
163  const std::set<GNEDemandElement*>& getChildDemandElementsSortedByType(SumoXMLTag tag) const;
164 
167 
170 
173 
175  GNEDemandElement* getNextChildDemandElement(const GNEDemandElement* demandElement) const;
176 
178 
180  virtual void updateParentAdditional();
181 
183  virtual void updateParentDemandElement();
184 
185 protected:
186 
189 
190  private:
195 
197  ConnectionGeometry(GNELane* _lane, Position _pos, double _rot);
198 
201 
204 
206  double rot;
207  };
208 
209  public:
211  ChildConnections(GNEHierarchicalChildElements* hierarchicalElement);
212 
214  void update();
215 
217  void draw(const GUIVisualizationSettings& s, const GUIGlObjectType parentType) const;
218 
220  std::vector<ConnectionGeometry> symbolsPositionAndRotation;
221 
223  std::vector<PositionVector> connectionPositions;
224 
225  private:
228  };
229 
231  void changeChildEdges(GNEAdditional* elementChild, const std::string& newEdgeIDs);
232 
234  void changeChildLanes(GNEAdditional* elementChild, const std::string& newEdgeIDs);
235 
238 
239 private:
241  std::vector<GNEEdge*> myChildEdges;
242 
244  std::vector<GNELane*> myChildLanes;
245 
247  std::vector<GNEShape*> myChildShapes;
248 
250  std::vector<GNEAdditional*> myChildAdditionals;
251 
253  std::vector<GNEDemandElement*> myChildDemandElements;
254 
256  std::map<SumoXMLTag, std::set<GNEDemandElement*> > mySortedChildDemandElementsByType;
257 
260 
263 
266 };
267 
268 #endif
GNEHierarchicalChildElements::addChildAdditional
void addChildAdditional(GNEAdditional *additional)
Definition: GNEHierarchicalChildElements.cpp:95
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:55
GUIGlObjectTypes.h
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:48
GNEHierarchicalChildElements::removeChildLane
void removeChildLane(GNELane *lane)
remove child lane
Definition: GNEHierarchicalChildElements.cpp:395
GNEHierarchicalChildElements::removeChildEdge
void removeChildEdge(GNEEdge *edge)
remove child edge
Definition: GNEHierarchicalChildElements.cpp:361
GNEHierarchicalChildElements::getChildDemandElements
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
Definition: GNEHierarchicalChildElements.cpp:296
GNEHierarchicalChildElements::ChildConnections
struct for pack all variables and functions relative to connections between hierarchical element and ...
Definition: GNEHierarchicalChildElements.h:188
GNEHierarchicalChildElements::getChildEdges
const std::vector< GNEEdge * > & getChildEdges() const
get child edges
Definition: GNEHierarchicalChildElements.cpp:376
GNEHierarchicalChildElements::addChildEdge
void addChildEdge(GNEEdge *edge)
Definition: GNEHierarchicalChildElements.cpp:350
GNEHierarchicalChildElements::updateParentDemandElement
virtual void updateParentDemandElement()
update parent after add or remove a child (can be reimplemented, for example used for statistics)
Definition: GNEHierarchicalChildElements.cpp:456
GNEHierarchicalChildElements::drawChildConnections
void drawChildConnections(const GUIVisualizationSettings &s, const GUIGlObjectType GLTypeParent) const
Definition: GNEHierarchicalChildElements.cpp:89
GNEHierarchicalChildElements::addChildDemandElement
void addChildDemandElement(GNEDemandElement *demandElement)
Definition: GNEHierarchicalChildElements.cpp:256
GNEHierarchicalChildElements::myChildAdditionals
std::vector< GNEAdditional * > myChildAdditionals
vector with the child additional
Definition: GNEHierarchicalChildElements.h:250
GNEHierarchicalChildElements::~GNEHierarchicalChildElements
~GNEHierarchicalChildElements()
Destructor.
Definition: GNEHierarchicalChildElements.cpp:57
GNEHierarchicalChildElements::sortChildAdditionals
void sortChildAdditionals()
sort child additionals (used by Rerouters, VSS, TAZs...)
Definition: GNEHierarchicalChildElements.cpp:137
GNEHierarchicalChildElements::ChildConnections::ConnectionGeometry::rot
double rot
rotation
Definition: GNEHierarchicalChildElements.h:206
GNEHierarchicalChildElements::ChildConnections::myHierarchicalElement
GNEHierarchicalChildElements * myHierarchicalElement
pointer to hierarchical element parent
Definition: GNEHierarchicalChildElements.h:227
GNEHierarchicalChildElements::operator=
GNEHierarchicalChildElements & operator=(const GNEHierarchicalChildElements &)=delete
Invalidated assignment operator.
SumoXMLTag
SumoXMLTag
Numbers representing SUMO-XML - element names.
Definition: SUMOXMLDefinitions.h:41
GNEHierarchicalChildElements
An special type of Attribute carrier that owns hierarchical elements.
Definition: GNEHierarchicalChildElements.h:45
GNEHierarchicalChildElements::myChildShapes
std::vector< GNEShape * > myChildShapes
vector with the child lanes of this element
Definition: GNEHierarchicalChildElements.h:247
GNEChange_Children
Definition: GNEChange_Children.h:40
GUIGlObjectType
GUIGlObjectType
Definition: GUIGlObjectTypes.h:39
GNEHierarchicalChildElements::generateChildID
virtual std::string generateChildID(SumoXMLTag childTag)=0
gererate a new ID for an element child
GNEEdge
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:51
GNEHierarchicalChildElements::getChildLanes
const std::vector< GNELane * > & getChildLanes() const
get child lanes
Definition: GNEHierarchicalChildElements.cpp:408
GNEHierarchicalChildElements::getChildRotation
double getChildRotation(const GNELane *lane)
get child rotation calculated in ChildConnections
Definition: GNEHierarchicalChildElements.cpp:72
GNEHierarchicalChildElements::ChildConnections::ConnectionGeometry::pos
Position pos
position
Definition: GNEHierarchicalChildElements.h:203
GNEHierarchicalChildElements::addChildLane
void addChildLane(GNELane *lane)
Definition: GNEHierarchicalChildElements.cpp:382
GNEHierarchicalChildElements::ChildConnections::update
void update()
update Connection's geometry
Definition: GNEHierarchicalChildElements.cpp:517
GNEHierarchicalChildElements::getPreviousChildDemandElement
GNEDemandElement * getPreviousChildDemandElement(const GNEDemandElement *demandElement) const
get previous child demand element to the given demand element
Definition: GNEHierarchicalChildElements.cpp:320
GNEShape
Definition: GNEShape.h:34
GNEHierarchicalChildElements::GNEHierarchicalChildElements
GNEHierarchicalChildElements(GNEAttributeCarrier *AC, const std::vector< GNEEdge * > &childEdges, const std::vector< GNELane * > &childLanes, const std::vector< GNEShape * > &childShapes, const std::vector< GNEAdditional * > &childAdditionals, const std::vector< GNEDemandElement * > &childDemandElements)
Parameter Constructor.
Definition: GNEHierarchicalChildElements.cpp:36
GNEHierarchicalChildElements::sortChildDemandElements
void sortChildDemandElements()
sort child demand elements
Definition: GNEHierarchicalChildElements.cpp:308
GNEHierarchicalChildElements::removeChildShape
void removeChildShape(GNEShape *shape)
remove child shape
Definition: GNEHierarchicalChildElements.cpp:429
GNEHierarchicalChildElements::getChildShapes
const std::vector< GNEShape * > & getChildShapes() const
get child shapes
Definition: GNEHierarchicalChildElements.cpp:444
GNEHierarchicalChildElements::myChildDemandElements
std::vector< GNEDemandElement * > myChildDemandElements
vector with the demand elements children
Definition: GNEHierarchicalChildElements.h:253
GNEHierarchicalChildElements::ChildConnections::draw
void draw(const GUIVisualizationSettings &s, const GUIGlObjectType parentType) const
draw connections between Parent and childrens
Definition: GNEHierarchicalChildElements.cpp:604
GNEHierarchicalChildElements::ChildConnections::ChildConnections
ChildConnections(GNEHierarchicalChildElements *hierarchicalElement)
constructor
Definition: GNEHierarchicalChildElements.cpp:512
GNEHierarchicalChildElements::ChildConnections::ConnectionGeometry
connection geometry
Definition: GNEHierarchicalChildElements.h:192
GNEHierarchicalChildElements::getPositionInView
virtual Position getPositionInView() const =0
Returns position of hierarchical element in view.
GNEHierarchicalChildElements::ChildConnections::ConnectionGeometry::ConnectionGeometry
ConnectionGeometry()
default constructor
Definition: GNEHierarchicalChildElements.cpp:498
GNEHierarchicalChildElements::getNextChildDemandElement
GNEDemandElement * getNextChildDemandElement(const GNEDemandElement *demandElement) const
get next child demand element to the given demand element
Definition: GNEHierarchicalChildElements.cpp:335
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GNEHierarchicalChildElements::myChildEdges
std::vector< GNEEdge * > myChildEdges
vector with the child edges of this element
Definition: GNEHierarchicalChildElements.h:241
GNEHierarchicalChildElements::updateChildConnections
void updateChildConnections()
update child connections
Definition: GNEHierarchicalChildElements.cpp:83
GNEHierarchicalChildElements::removeChildAdditional
void removeChildAdditional(GNEAdditional *additional)
remove child additional
Definition: GNEHierarchicalChildElements.cpp:113
GNEHierarchicalChildElements::changeChildEdges
void changeChildEdges(GNEAdditional *elementChild, const std::string &newEdgeIDs)
change child edges of an additional
Definition: GNEHierarchicalChildElements.cpp:462
GNEHierarchicalChildElements::changeChildLanes
void changeChildLanes(GNEAdditional *elementChild, const std::string &newEdgeIDs)
change child edges of an additional
Definition: GNEHierarchicalChildElements.cpp:479
GNEHierarchicalChildElements::removeChildDemandElement
void removeChildDemandElement(GNEDemandElement *demandElement)
remove child demand element
Definition: GNEHierarchicalChildElements.cpp:274
GNEHierarchicalChildElements::myAC
GNEAttributeCarrier * myAC
pointer to AC (needed to avoid diamond problem)
Definition: GNEHierarchicalChildElements.h:259
GNEHierarchicalChildElements::updateGeometry
virtual void updateGeometry()=0
GNEHierarchicalChildElements::checkChildDemandElementsOverlapping
bool checkChildDemandElementsOverlapping() const
check if childs demand elements are overlapped
Definition: GNEHierarchicalChildElements.cpp:314
GNEHierarchicalChildElements::getChildPosition
const Position & getChildPosition(const GNELane *lane)
get child position calculated in ChildConnections
Definition: GNEHierarchicalChildElements.cpp:61
GNEHierarchicalChildElements::getChildDemandElementsSortedByType
const std::set< GNEDemandElement * > & getChildDemandElementsSortedByType(SumoXMLTag tag) const
return child demand elements sorted by type
Definition: GNEHierarchicalChildElements.cpp:302
GNEHierarchicalChildElements::ChildConnections::ConnectionGeometry::lane
GNELane * lane
lane
Definition: GNEHierarchicalChildElements.h:200
GNEHierarchicalChildElements::checkChildAdditionalsOverlapping
bool checkChildAdditionalsOverlapping() const
check if children are overlapped (Used by Rerouters)
Definition: GNEHierarchicalChildElements.cpp:215
GNEHierarchicalChildElements::myChildConnections
ChildConnections myChildConnections
variable ChildConnections
Definition: GNEHierarchicalChildElements.h:237
GNEHierarchicalChildElements::ChildConnections::symbolsPositionAndRotation
std::vector< ConnectionGeometry > symbolsPositionAndRotation
position and rotation of every symbol over lane
Definition: GNEHierarchicalChildElements.h:220
GNEAttributeCarrier.h
config.h
GNEHierarchicalChildElements::myChildLanes
std::vector< GNELane * > myChildLanes
vector with the child lanes of this element
Definition: GNEHierarchicalChildElements.h:244
GNEHierarchicalChildElements::addChildShape
void addChildShape(GNEShape *shape)
Definition: GNEHierarchicalChildElements.cpp:414
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
GNEHierarchicalChildElements::updateParentAdditional
virtual void updateParentAdditional()
update parent after add or remove a child (can be reimplemented, for example used for statistics)
Definition: GNEHierarchicalChildElements.cpp:450
GNELane
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:45
GNEHierarchicalChildElements::mySortedChildDemandElementsByType
std::map< SumoXMLTag, std::set< GNEDemandElement * > > mySortedChildDemandElementsByType
vector with the demand elements children sorted by type and filtered (to avoid duplicated
Definition: GNEHierarchicalChildElements.h:256
GNEAttributeCarrier
Definition: GNEAttributeCarrier.h:54
GNEHierarchicalChildElements::getChildAdditionals
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
Definition: GNEHierarchicalChildElements.cpp:131
GNEHierarchicalChildElements::ChildConnections::connectionPositions
std::vector< PositionVector > connectionPositions
Matrix with the Vertex's positions of connections between parents an their children.
Definition: GNEHierarchicalChildElements.h:223