Eclipse SUMO - Simulation of Urban MObility
GNEHierarchicalParentElements.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 GNEHierarchicalParentElements_h
17 #define GNEHierarchicalParentElements_h
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 
23 #include <config.h>
24 
26 #include <utils/geom/Position.h>
27 
28 #include "GNEAttributeCarrier.h"
29 #include "GNEGeometry.h"
30 
31 // ===========================================================================
32 // class declarations
33 // ===========================================================================
34 
35 class GNEAdditional;
36 class GNENetElement;
37 class GNEDemandElement;
38 class GNEShape;
39 class GNEConnection;
40 
41 // ===========================================================================
42 // class definitions
43 // ===========================================================================
44 
50 
51 public:
52 
54  friend class GNEChange_Children;
55 
65  const std::vector<GNEEdge*>& parentEdges,
66  const std::vector<GNELane*>& parentLanes,
67  const std::vector<GNEShape*>& parentShapes,
68  const std::vector<GNEAdditional*>& parentAdditionals,
69  const std::vector<GNEDemandElement*>& parentDemandElements);
70 
73 
77  virtual void updateGeometry() = 0;
78 
80  virtual Position getPositionInView() const = 0;
82 
86  void addParentEdge(GNEEdge* edge);
87 
89  void removeParentEdge(GNEEdge* edge);
90 
92  const std::vector<GNEEdge*>& getParentEdges() const;
93 
95  std::vector<GNEEdge*> getMiddleParentEdges() const;
96 
98  const std::vector<GNEEdge*>& getPathEdges() const;
99 
101 
105  void addParentLane(GNELane* lane);
106 
108  void removeParentLane(GNELane* lane);
109 
111  const std::vector<GNELane*>& getParentLanes() const;
112 
114 
118  void addParentShape(GNEShape* shape);
119 
121  void removeParentShape(GNEShape* shape);
122 
124  const std::vector<GNEShape*>& getParentShapes() const;
125 
127 
131  void addParentAdditional(GNEAdditional* additional);
132 
134  void removeParentAdditional(GNEAdditional* additional);
135 
137  const std::vector<GNEAdditional*>& getParentAdditionals() const;
138 
140 
144  void addParentDemandElement(GNEDemandElement* demandElement);
145 
147  void removeParentDemandElement(GNEDemandElement* demandElement);
148 
150  const std::vector<GNEDemandElement*>& getParentDemandElements() const;
151 
153 
155  std::string getNewListOfParents(const GNENetElement* currentElement, const GNENetElement* newNextElement) const;
156 
157 protected:
160 
162  void replaceParentEdges(GNEShape* elementChild, const std::string& newEdgeIDs);
163 
165  void replaceParentEdges(GNEAdditional* elementChild, const std::string& newEdgeIDs);
166 
168  void replaceParentEdges(GNEDemandElement* elementChild, const std::string& newEdgeIDs);
169 
171  void replaceParentEdges(GNEDemandElement* elementChild, const std::vector<GNEEdge*>& newEdges);
172 
174  void replaceFirstParentEdge(GNEDemandElement* elementChild, GNEEdge* newFirstEdge);
175 
177  void replaceMiddleParentEdges(GNEDemandElement* elementChild, const std::vector<GNEEdge*>& newMiddleEdges, const bool updateChildReferences);
178 
180  void replaceLastParentEdge(GNEDemandElement* elementChild, GNEEdge* newLastEdge);
181 
183  void replacePathEdges(GNEDemandElement* elementChild, const std::vector<GNEEdge*>& routeEdges);
184 
186  void replaceParentLanes(GNEShape* elementChild, const std::string& newLaneIDs);
187 
189  void replaceParentLanes(GNEAdditional* elementChild, const std::string& newLaneIDs);
190 
192  void replaceParentLanes(GNEDemandElement* elementChild, const std::string& newLaneIDs);
193 
198  void replaceParentAdditional(GNEShape* shapeTobeChanged, const std::string& newParentAdditionalID, int additionalParentIndex);
199 
204  void replaceParentAdditional(GNEAdditional* additionalTobeChanged, const std::string& newParentAdditionalID, int additionalParentIndex);
205 
210  void replaceParentAdditional(GNEDemandElement* demandElementTobeChanged, const std::string& newParentAdditionalID, int additionalParentIndex);
211 
216  void replaceParentDemandElement(GNEShape* shapeTobeChanged, const std::string& newParentDemandElementID, int demandElementParentIndex);
217 
222  void replaceParentDemandElement(GNEAdditional* additionalTobeChanged, const std::string& newParentDemandElementID, int demandElementParentIndex);
223 
228  void replaceParentDemandElement(GNEDemandElement* demandElementTobeChanged, const std::string& newParentDemandElementID, int demandElementParentIndex);
229 
231 
234 
235 private:
237  std::vector<GNEEdge*> myParentEdges;
238 
240  std::vector<GNEEdge*> myRouteEdges;
241 
243  std::vector<GNELane*> myParentLanes;
244 
246  std::vector<GNEShape*> myParentShapes;
247 
249  std::vector<GNEAdditional*> myParentAdditionals;
250 
252  std::vector<GNEDemandElement*> myParentDemandElements;
253 
256 
259 
262 };
263 
264 #endif
GNEHierarchicalParentElements::myRouteEdges
std::vector< GNEEdge * > myRouteEdges
list of edges used in Flow/Trips/PersonTrips
Definition: GNEHierarchicalParentElements.h:240
GNEHierarchicalParentElements::replaceMiddleParentEdges
void replaceMiddleParentEdges(GNEDemandElement *elementChild, const std::vector< GNEEdge * > &newMiddleEdges, const bool updateChildReferences)
replace middle (via) parent edges
Definition: GNEHierarchicalParentElements.cpp:372
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:55
GUIGlObjectTypes.h
GNEHierarchicalParentElements::myParentAdditionals
std::vector< GNEAdditional * > myParentAdditionals
list of parent additionals of this element
Definition: GNEHierarchicalParentElements.h:249
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:48
GNEHierarchicalParentElements::replaceParentEdges
void replaceParentEdges(GNEShape *elementChild, const std::string &newEdgeIDs)
replace the parent edges of a shape
Definition: GNEHierarchicalParentElements.cpp:276
GNEHierarchicalParentElements::getPathEdges
const std::vector< GNEEdge * > & getPathEdges() const
get path edges
Definition: GNEHierarchicalParentElements.cpp:203
GNEHierarchicalParentElements::replaceLastParentEdge
void replaceLastParentEdge(GNEDemandElement *elementChild, GNEEdge *newLastEdge)
replace the last parent edge (used by demand elements)
Definition: GNEHierarchicalParentElements.cpp:397
GNEHierarchicalParentElements::replacePathEdges
void replacePathEdges(GNEDemandElement *elementChild, const std::vector< GNEEdge * > &routeEdges)
replace edge route Parents
Definition: GNEHierarchicalParentElements.cpp:414
GNEHierarchicalParentElements::replaceFirstParentEdge
void replaceFirstParentEdge(GNEDemandElement *elementChild, GNEEdge *newFirstEdge)
replace the first parent edge (used by demand elements)
Definition: GNEHierarchicalParentElements.cpp:356
GNEGeometry::ParentConnections
struct for pack all variables and functions relative to connections between hierarchical element and ...
Definition: GNEGeometry.h:275
GNEHierarchicalParentElements::~GNEHierarchicalParentElements
~GNEHierarchicalParentElements()
Destructor.
Definition: GNEHierarchicalParentElements.cpp:58
GNEHierarchicalParentElements::getParentEdges
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
Definition: GNEHierarchicalParentElements.cpp:181
GNEHierarchicalParentElements::myParentConnections
GNEGeometry::ParentConnections myParentConnections
variable ParentConnections
Definition: GNEHierarchicalParentElements.h:233
GNEHierarchicalParentElements::myParentLanes
std::vector< GNELane * > myParentLanes
list of parent lanes of this element
Definition: GNEHierarchicalParentElements.h:243
GNEHierarchicalParentElements::myParentDemandElements
std::vector< GNEDemandElement * > myParentDemandElements
list of demand elements parents of this element
Definition: GNEHierarchicalParentElements.h:252
GNEHierarchicalParentElements::getParentLanes
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
Definition: GNEHierarchicalParentElements.cpp:235
GNEHierarchicalParentElements::removeParentEdge
void removeParentEdge(GNEEdge *edge)
remove parent edge
Definition: GNEHierarchicalParentElements.cpp:165
GNEHierarchicalParentElements::myParentEdges
std::vector< GNEEdge * > myParentEdges
list of parent edges of this element
Definition: GNEHierarchicalParentElements.h:237
GNEChange_Children
Definition: GNEChange_Children.h:40
GNEEdge
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:51
GNEHierarchicalParentElements::getParentAdditionals
const std::vector< GNEAdditional * > & getParentAdditionals() const
get parent additionals
Definition: GNEHierarchicalParentElements.cpp:85
GNEHierarchicalParentElements::GNEHierarchicalParentElements
GNEHierarchicalParentElements(const GNEHierarchicalParentElements &)=delete
Invalidated copy constructor.
GNEHierarchicalParentElements::getParentDemandElements
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
Definition: GNEHierarchicalParentElements.cpp:114
GNEShape
Definition: GNEShape.h:34
GNEHierarchicalParentElements::myParentShapes
std::vector< GNEShape * > myParentShapes
list of parent shapes of this element
Definition: GNEHierarchicalParentElements.h:246
GNEHierarchicalParentElements::replaceParentLanes
void replaceParentLanes(GNEShape *elementChild, const std::string &newLaneIDs)
replace the parent edges of a shape
Definition: GNEHierarchicalParentElements.cpp:469
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GNEHierarchicalParentElements::getMiddleParentEdges
std::vector< GNEEdge * > getMiddleParentEdges() const
get middle (via) parent edges
Definition: GNEHierarchicalParentElements.cpp:187
GNEHierarchicalParentElements::addParentLane
void addParentLane(GNELane *lane)
Definition: GNEHierarchicalParentElements.cpp:209
GNENetElement
Definition: GNENetElement.h:43
GNEHierarchicalParentElements::addParentDemandElement
void addParentDemandElement(GNEDemandElement *demandElement)
Definition: GNEHierarchicalParentElements.cpp:91
GNEHierarchicalParentElements::replaceParentAdditional
void replaceParentAdditional(GNEShape *shapeTobeChanged, const std::string &newParentAdditionalID, int additionalParentIndex)
replace the parent additional of a shape
Definition: GNEHierarchicalParentElements.cpp:489
GNEHierarchicalParentElements::GNEHierarchicalParentElements
GNEHierarchicalParentElements(GNEAttributeCarrier *AC, const std::vector< GNEEdge * > &parentEdges, const std::vector< GNELane * > &parentLanes, const std::vector< GNEShape * > &parentShapes, const std::vector< GNEAdditional * > &parentAdditionals, const std::vector< GNEDemandElement * > &parentDemandElements)
Constructor used by elements that have another additionals as parent.
Definition: GNEHierarchicalParentElements.cpp:42
GNEHierarchicalParentElements::myAC
GNEAttributeCarrier * myAC
pointer to AC (needed to avoid diamond problem)
Definition: GNEHierarchicalParentElements.h:255
GNEHierarchicalParentElements::getNewListOfParents
std::string getNewListOfParents(const GNENetElement *currentElement, const GNENetElement *newNextElement) const
if use edge/parent lanes as a list of consecutive elements, obtain a list of IDs of elements after in...
Definition: GNEHierarchicalParentElements.cpp:120
Position.h
GNEGeometry.h
GNEHierarchicalParentElements::addParentAdditional
void addParentAdditional(GNEAdditional *additional)
Definition: GNEHierarchicalParentElements.cpp:62
GNEHierarchicalParentElements::removeParentDemandElement
void removeParentDemandElement(GNEDemandElement *demandElement)
remove parent demand element
Definition: GNEHierarchicalParentElements.cpp:102
GNEHierarchicalParentElements::operator=
GNEHierarchicalParentElements & operator=(const GNEHierarchicalParentElements &)=delete
Invalidated assignment operator.
GNEHierarchicalParentElements::getParentShapes
const std::vector< GNEShape * > & getParentShapes() const
get parent shapes
Definition: GNEHierarchicalParentElements.cpp:267
GNEHierarchicalParentElements
An special type of Attribute carrier that owns hierarchical elements.
Definition: GNEHierarchicalParentElements.h:49
GNEHierarchicalParentElements::addParentShape
void addParentShape(GNEShape *shape)
Definition: GNEHierarchicalParentElements.cpp:241
GNEConnection
Definition: GNEConnection.h:38
GNEAttributeCarrier.h
GNEHierarchicalParentElements::replaceParentDemandElement
void replaceParentDemandElement(GNEShape *shapeTobeChanged, const std::string &newParentDemandElementID, int demandElementParentIndex)
replace the parent demand element of a shape
Definition: GNEHierarchicalParentElements.cpp:540
config.h
GNEHierarchicalParentElements::updateGeometry
virtual void updateGeometry()=0
GNEHierarchicalParentElements::removeParentLane
void removeParentLane(GNELane *lane)
remove parent lane
Definition: GNEHierarchicalParentElements.cpp:222
GNEHierarchicalParentElements::getPositionInView
virtual Position getPositionInView() const =0
Returns position of hierarchical element in view.
GNEHierarchicalParentElements::removeParentAdditional
void removeParentAdditional(GNEAdditional *additional)
remove parent additional
Definition: GNEHierarchicalParentElements.cpp:73
GNEHierarchicalParentElements::addParentEdge
void addParentEdge(GNEEdge *edge)
Definition: GNEHierarchicalParentElements.cpp:152
GNELane
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:45
GNEAttributeCarrier
Definition: GNEAttributeCarrier.h:54
GNEHierarchicalParentElements::removeParentShape
void removeParentShape(GNEShape *shape)
remove parent shape
Definition: GNEHierarchicalParentElements.cpp:254