Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEClosingLaneReroute.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2023 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//
19/****************************************************************************/
20#include <config.h>
21
24
25#include <netedit/GNEUndoList.h>
26#include <netedit/GNENet.h>
27
28
29// ===========================================================================
30// member method definitions
31// ===========================================================================
32
35 GUIIconSubSys::getIcon(GUIIcon::CLOSINGLANEREROUTE), "", {}, {}, {}, {}, {}, {}),
36 myClosedLane(nullptr),
37myPermissions(0) {
38 // reset default values
39 resetDefaultValues();
40}
41
42
43GNEClosingLaneReroute::GNEClosingLaneReroute(GNEAdditional* rerouterIntervalParent, GNELane* closedLane, SVCPermissions permissions) :
45 GUIIconSubSys::getIcon(GUIIcon::CLOSINGLANEREROUTE), "", {}, {}, {}, {rerouterIntervalParent}, {}, {}),
46myClosedLane(closedLane),
47myPermissions(permissions) {
48 // update boundary of rerouter parent
49 rerouterIntervalParent->getParentAdditionals().front()->updateCenteringBoundary(true);
50}
51
52
54
55
56void
69
70
71bool
73 return true;
74}
75
76
77std::string
81
82
83void
87
88
91 // GNEClosingLaneReroute cannot be moved
92 return nullptr;
93}
94
95
96void
98 // update centering boundary (needed for centering)
100}
101
102
105 // get rerouter parent position
106 Position signPosition = getParentAdditionals().front()->getParentAdditionals().front()->getPositionInView();
107 // set position depending of indexes
108 signPosition.add(4.5 + 6.25, (getDrawPositionIndex() * -1) - getParentAdditionals().front()->getDrawPositionIndex() + 1, 0);
109 // return signPosition
110 return signPosition;
111}
112
113
114void
120
121
122void
123GNEClosingLaneReroute::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
124 // geometry of this element cannot be splitted
125}
126
127
128std::string
130 return getParentAdditionals().at(0)->getID();
131}
132
133
134void
142
143
144std::string
146 switch (key) {
147 case SUMO_ATTR_ID:
148 return getMicrosimID();
149 case SUMO_ATTR_LANE:
150 return myClosedLane->getID();
151 case SUMO_ATTR_ALLOW:
155 case GNE_ATTR_PARENT:
156 return getParentAdditionals().at(0)->getID();
160 return "";
161 default:
162 throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
163 }
164}
165
166
167double
169 throw InvalidArgument(getTagStr() + " doesn't have a double attribute of type '" + toString(key) + "'");
170}
171
172
177
178
179void
180GNEClosingLaneReroute::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
181 switch (key) {
182 case SUMO_ATTR_ID:
183 case SUMO_ATTR_LANE:
184 case SUMO_ATTR_ALLOW:
188 undoList->changeAttribute(new GNEChange_Attribute(this, key, value));
189 break;
190 default:
191 throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
192 }
193}
194
195
196bool
197GNEClosingLaneReroute::isValid(SumoXMLAttr key, const std::string& value) {
198 switch (key) {
199 case SUMO_ATTR_ID:
200 return isValidAdditionalID(value);
201 case SUMO_ATTR_LANE:
202 return (myNet->getAttributeCarriers()->retrieveLane(value, false) != nullptr);
203 case SUMO_ATTR_ALLOW:
205 return canParseVehicleClasses(value);
207 return canParse<double>(value);
208 default:
209 throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
210 }
211}
212
213
214std::string
216 return getTagStr();
217}
218
219
220std::string
224
225// ===========================================================================
226// private
227// ===========================================================================
228
229void
230GNEClosingLaneReroute::setAttribute(SumoXMLAttr key, const std::string& value) {
231 switch (key) {
232 case SUMO_ATTR_ID:
233 // update microsimID
234 setMicrosimID(value);
235 break;
236 case SUMO_ATTR_LANE:
238 break;
239 case SUMO_ATTR_ALLOW:
241 break;
244 break;
246 if (parse<bool>(value)) {
248 } else {
250 }
251 break;
254 break;
255 default:
256 throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
257 }
258}
259
260
261void
263 // nothing to do
264}
265
266
267void
269 // nothing to do
270}
271
272/****************************************************************************/
@ GLO_REROUTER_CLOSINGLANEREROUTE
a closing lane reroute
GUIIcon
An enumeration of icons used by the gui applications.
Definition GUIIcons.h:33
@ CLOSINGLANEREROUTE
@ REROUTER_CLOSINGLANEREROUTE
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
@ SUMO_TAG_CLOSING_LANE_REROUTE
lane of a reroute of type closing
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_DISALLOW
@ SUMO_ATTR_ALLOW
@ SUMO_ATTR_LANE
@ GNE_ATTR_PARENT
parent of an additional element
@ GNE_ATTR_SELECTED
element is selected
@ SUMO_ATTR_ID
@ GNE_ATTR_SHIFTLANEINDEX
shift lane index (only used by elements over lanes)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition Boundary.cpp:78
void reset()
Resets the boundary.
Definition Boundary.cpp:66
Boundary & grow(double by)
extends the boundary by the given amount
Definition Boundary.cpp:300
An Element which don't belong to GNENet but has influence in the simulation.
void shiftLaneIndex()
shift lane index
void drawListedAddtional(const GUIVisualizationSettings &s, const Position &parentPosition, const double offsetX, const double extraOffsetY, const RGBColor baseCol, const RGBColor textCol, GUITexture texture, const std::string text) const
draw listed additional
int getDrawPositionIndex() const
get draw position index (used in rerouters and VSS)
Boundary myAdditionalBoundary
Additional Boundary.
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
const std::string getID() const
get ID (all Attribute Carriers have one)
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
friend class GNEChange_Attribute
declare friend class
const std::string & getTagStr() const
get tag assigned to this object in string format
void unselectAttributeCarrier(const bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
static const Parameterised::Map PARAMETERS_EMPTY
empty parameter maps (used by ACs without parameters)
GNENet * myNet
pointer to net
void selectAttributeCarrier(const bool changeFlag=true)
select attribute carrier using GUIGlobalSelection
const Parameterised::Map & getACParametersMap() const
get parameters map
Position getPositionInView() const
Returns position of additional in view.
void fixAdditionalProblem()
fix additional problem (must be reimplemented in all detector children)
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
void setMoveShape(const GNEMoveResult &moveResult)
set move shape
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
double getAttributeDouble(SumoXMLAttr key) const
std::string getParentName() const
Returns the name of the parent object.
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
method for setting the attribute and letting the object perform additional changes
void updateGeometry()
update pre-computed geometry information
void writeAdditional(OutputDevice &device) const
write additional element into a xml file
GNELane * myClosedLane
closed lane
void splitEdgeGeometry(const double splitPosition, const GNENetworkElement *originalElement, const GNENetworkElement *newElement, GNEUndoList *undoList)
split geometry
GNEClosingLaneReroute(GNENet *net)
parameter constructor
std::string getAttribute(SumoXMLAttr key) const
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void updateCenteringBoundary(const bool updateGrid)
update centering boundary (implies change in RTREE)
GNEMoveOperation * getMoveOperation()
get move operation
std::string getAdditionalProblem() const
return a string with the current additional problem (must be reimplemented in all detector children)
void commitMoveShape(const GNEMoveResult &moveResult, GNEUndoList *undoList)
commit move shape
bool isAdditionalValid() const
check if current additional is valid to be writed into XML (must be reimplemented in all detector chi...
bool isValid(SumoXMLAttr key, const std::string &value)
method for checking if the key and their correspondent attribute are valids
const std::vector< GNEAdditional * > & getParentAdditionals() const
get parent additionals
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition GNELane.h:46
move operation
move result
GNELane * retrieveLane(const std::string &id, bool hardFail=true, bool checkVolatileChange=false) const
get lane by id
A NBNetBuilder extended by visualisation and editing capabilities.
Definition GNENet.h:42
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:120
void changeAttribute(GNEChange_Attribute *change)
special method for change attributes, avoid empty changes, always execute
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
Stores the information about how to visualize structures.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
std::map< std::string, std::string > Map
parameters map
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
void add(const Position &pos)
Adds the given position to this one.
Definition Position.h:125
static const RGBColor YELLOW
Definition RGBColor.h:188
static const RGBColor RED
named colors
Definition RGBColor.h:185