Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEHierarchicalElement.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2024 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
39public:
41 friend class GNEChange_Children;
42 friend class GNEDemandElement;
43
55 const std::vector<GNEJunction*>& parentJunctions,
56 const std::vector<GNEEdge*>& parentEdges,
57 const std::vector<GNELane*>& parentLanes,
58 const std::vector<GNEAdditional*>& parentAdditionals,
59 const std::vector<GNEDemandElement*>& parentDemandElements,
60 const std::vector<GNEGenericData*>& parentGenericDatas);
61
64
69
73 virtual void updateGeometry() = 0;
74
76 virtual Position getPositionInView() const = 0;
78
81
84
87
89 std::vector<GNEHierarchicalElement*> getAllHierarchicalElements() const;
90
92 const std::vector<GNEJunction*>& getParentJunctions() const;
93
95 const std::vector<GNEEdge*>& getParentEdges() const;
96
98 const std::vector<GNELane*>& getParentLanes() const;
99
101 const std::vector<GNEAdditional*>& getParentAdditionals() const;
102
104 const std::vector<GNEAdditional*> getParentStoppingPlaces() const;
105
107 const std::vector<GNEAdditional*> getParentTAZs() const;
108
110 const std::vector<GNEDemandElement*>& getParentDemandElements() const;
111
113 const std::vector<GNEGenericData*>& getParentGenericDatas() const;
114
116 const std::vector<GNEJunction*>& getChildJunctions() const;
117
119 const std::vector<GNEEdge*>& getChildEdges() const;
120
122 const std::vector<GNELane*>& getChildLanes() const;
123
125 const std::vector<GNEAdditional*>& getChildAdditionals() const;
126
128 const std::vector<GNEDemandElement*>& getChildDemandElements() const;
129
131 const std::vector<GNEGenericData*>& getChildGenericDatas() const;
133
136
138 template<typename T>
139 void addParentElement(T* element);
140
142 template<typename T>
143 void removeParentElement(T* element);
144
146 template<typename T>
147 void addChildElement(T* element);
148
150 template<typename T>
151 void removeChildElement(T* element);
153
156
158 std::string getNewListOfParents(const GNENetworkElement* currentElement, const GNENetworkElement* newNextElement) const;
159
161
164
167
168protected:
170 template<typename T, typename U>
171 void replaceParentElements(T* elementChild, const U& newParents) {
172 // remove elementChild from parents
173 for (const auto& parent : myHierarchicalContainer.getParents<U>()) {
174 parent->removeChildElement(elementChild);
175 }
176 // set new parents junctions
178 // add elementChild into new parents
179 for (const auto& parent : myHierarchicalContainer.getParents<U>()) {
180 parent->addChildElement(elementChild);
181 }
182 }
183
185 template<typename T, typename U>
186 void replaceChildElements(T* elementChild, const U& newChildren) {
187 // remove elementChild from childs
188 for (const auto& child : myHierarchicalContainer.getChildren<U>()) {
189 child->removeChildElement(elementChild);
190 }
191 // set new childs junctions
193 // add elementChild into new childs
194 for (const auto& child : myHierarchicalContainer.getChildren<U>()) {
195 child->addChildElement(elementChild);
196 }
197 }
198
199private:
202
205
208};
SumoXMLTag
Numbers representing SUMO-XML - element names.
Hierarchical container (used for keep myParent and myChildren.
const T & getChildren() const
get children
void setChildren(const T &newChildren)
set children
void setParents(const T &newParents)
set parents
const T & getParents() const
get parents
const std::vector< GNEJunction * > & getParentJunctions() const
get parent junctions
void addChildElement(T *element)
add child element
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< GNEAdditional * > getParentStoppingPlaces() const
get parent stoppingPlaces (used by plans)
const std::vector< GNEAdditional * > getParentTAZs() const
get parent TAZs (used by plans)
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< GNEEdge * > & getChildEdges() const
get child edges
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
GNEHierarchicalElement * getHierarchicalElement()
get GNEHierarchicalElement associated with this AttributeCarrier
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 & operator=(const GNEHierarchicalElement &)=delete
Invalidated assignment operator.
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
void replaceParentElements(T *elementChild, const U &newParents)
replace parent elements
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