Eclipse SUMO - Simulation of Urban MObility
GNEHierarchicalElement.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-2022 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // A abstract class for representation of hierarchical elements
19 /****************************************************************************/
20 #pragma once
21 #include <config.h>
22 
25 
27 
28 
29 // ===========================================================================
30 // class definitions
31 // ===========================================================================
32 
38 
39 public:
41  friend class GNEChange_Children;
42  friend class GNEDemandElement;
43 
57  const std::vector<GNEJunction*>& parentJunctions,
58  const std::vector<GNEEdge*>& parentEdges,
59  const std::vector<GNELane*>& parentLanes,
60  const std::vector<GNEAdditional*>& parentAdditionals,
61  const std::vector<GNEShape*>& parentShapes,
62  const std::vector<GNETAZElement*>& parentTAZElements,
63  const std::vector<GNEDemandElement*>& parentDemandElements,
64  const std::vector<GNEGenericData*>& parentGenericDatas);
65 
68 
71  return this;
72  }
73 
77  virtual void updateGeometry() = 0;
78 
80  virtual Position getPositionInView() const = 0;
82 
85 
88 
91 
93  std::vector<GNEHierarchicalElement*> getAllHierarchicalElements() const;
94 
96  const std::vector<GNEJunction*>& getParentJunctions() const;
97 
99  const std::vector<GNEEdge*>& getParentEdges() const;
100 
102  const std::vector<GNELane*>& getParentLanes() const;
103 
105  const std::vector<GNEAdditional*>& getParentAdditionals() const;
106 
108  const std::vector<GNEShape*>& getParentShapes() const;
109 
111  const std::vector<GNETAZElement*>& getParentTAZElements() const;
112 
114  const std::vector<GNEDemandElement*>& getParentDemandElements() const;
115 
117  const std::vector<GNEGenericData*>& getParentGenericDatas() const;
118 
120  const std::vector<GNEJunction*>& getChildJunctions() const;
121 
123  const std::vector<GNEEdge*>& getChildEdges() const;
124 
126  const std::vector<GNELane*>& getChildLanes() const;
127 
129  const std::vector<GNEAdditional*>& getChildAdditionals() const;
130 
132  const std::vector<GNEShape*>& getChildShapes() const;
133 
135  const std::vector<GNETAZElement*>& getChildTAZElements() const;
136 
138  const std::vector<GNEDemandElement*>& getChildDemandElements() const;
139 
141  const std::vector<GNEGenericData*>& getChildGenericDatas() const;
143 
146 
148  template<typename T>
149  void addParentElement(T* element);
150 
152  template<typename T>
153  void removeParentElement(T* element);
154 
156  template<typename T>
157  void addChildElement(T* element);
158 
160  template<typename T>
161  void removeChildElement(T* element);
163 
166 
168  std::string getNewListOfParents(const GNENetworkElement* currentElement, const GNENetworkElement* newNextElement) const;
169 
171 
174 
177 
178 protected:
180  template<typename T, typename U>
181  void replaceParentElements(T* elementChild, const U& newParents) {
182  // remove elementChild from parents
183  for (const auto& parent : myHierarchicalContainer.getParents<U>()) {
184  parent->removeChildElement(elementChild);
185  }
186  // set new parents junctions
188  // add elementChild into new parents
189  for (const auto& parent : myHierarchicalContainer.getParents<U>()) {
190  parent->addChildElement(elementChild);
191  }
192  }
193 
195  template<typename T, typename U>
196  void replaceChildElements(T* elementChild, const U& newChildren) {
197  // remove elementChild from childs
198  for (const auto& child : myHierarchicalContainer.getChildren<U>()) {
199  child->removeChildElement(elementChild);
200  }
201  // set new childs junctions
203  // add elementChild into new childs
204  for (const auto& child : myHierarchicalContainer.getChildren<U>()) {
205  child->addChildElement(elementChild);
206  }
207  }
208 
209 private:
212 
215 
218 };
219 
SumoXMLTag
Numbers representing SUMO-XML - element names.
An Element which don't belongs to GNENet but has influency in the simulation.
Hierarchical container (used for keep myParent and myChildren.
const T & getParents() const
get parents
const T & getChildren() const
get children
void setChildren(const T &newChildren)
set children
void setParents(const T &newParents)
set parents
const std::vector< GNEJunction * > & getParentJunctions() const
get parent junctions
void addChildElement(T *element)
add child element
const std::vector< GNETAZElement * > & getChildTAZElements() const
get child TAZElements
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEGenericData * > & getParentGenericDatas() const
get parent demand elements
bool checkChildAdditionalsOverlapping() const
check if children are overlapped (Used by Rerouters)
const std::vector< GNELane * > & getChildLanes() const
get child lanes
const GNEHierarchicalContainer & getHierarchicalContainer() const
get hierarchicalcontainer with parents and children
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
GNEHierarchicalContainer myHierarchicalContainer
hierarchical container with parents and children
bool checkChildDemandElementsOverlapping() const
check if childs demand elements are overlapped
const std::vector< GNEAdditional * > & getParentAdditionals() const
get parent additionals
void addParentElement(T *element)
add parent element
virtual Position getPositionInView() const =0
Returns position of hierarchical element in view.
const std::vector< GNEShape * > & getParentShapes() const
get parent shapes
const std::vector< GNEEdge * > & getChildEdges() const
get child edges
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
std::vector< GNEHierarchicalElement * > getAllHierarchicalElements() const
get all parents and children
void removeChildElement(T *element)
remove child element
std::string getNewListOfParents(const GNENetworkElement *currentElement, const GNENetworkElement *newNextElement) const
if use edge/parent lanes as a list of consecutive elements, obtain a list of IDs of elements after in...
virtual void updateGeometry()=0
update pre-computed geometry information
GNEHierarchicalElement(const GNEHierarchicalElement &)=delete
Invalidated copy constructor.
const std::vector< GNEJunction * > & getChildJunctions() const
get child junctions
GNEHierarchicalElement(GNENet *net, SumoXMLTag tag, const std::vector< GNEJunction * > &parentJunctions, const std::vector< GNEEdge * > &parentEdges, const std::vector< GNELane * > &parentLanes, const std::vector< GNEAdditional * > &parentAdditionals, const std::vector< GNEShape * > &parentShapes, const std::vector< GNETAZElement * > &parentTAZElements, const std::vector< GNEDemandElement * > &parentDemandElements, const std::vector< GNEGenericData * > &parentGenericDatas)
Constructor.
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
GNEHierarchicalElement * getHierarchicalElement()
get GNEHierarchicalElement associated with this AttributeCarrier
const std::vector< GNEShape * > & getChildShapes() const
get child shapes
const std::vector< GNETAZElement * > & getParentTAZElements() const
get parent TAZElements
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
void replaceParentElements(T *elementChild, const U &newParents)
replace parent elements
GNEHierarchicalElement & operator=(const GNEHierarchicalElement &)=delete
Invalidated assignment operator.
void replaceChildElements(T *elementChild, const U &newChildren)
replace child elements
const std::vector< GNEGenericData * > & getChildGenericDatas() const
return child generic data elements
void removeParentElement(T *element)
remove parent element
void restoreHierarchicalContainer(const GNEHierarchicalContainer &container)
restore hierarchical container
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:42
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37