Eclipse SUMO - Simulation of Urban MObility
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-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 //
19 /****************************************************************************/
20 #include <config.h>
21 
22 #include "GNEClosingLaneReroute.h"
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),
37 myPermissions(0) {
38  // reset default values
39  resetDefaultValues();
40 }
41 
42 
43 GNEClosingLaneReroute::GNEClosingLaneReroute(GNEAdditional* rerouterIntervalParent, GNELane* closedLane, SVCPermissions permissions) :
45  GUIIconSubSys::getIcon(GUIIcon::CLOSINGLANEREROUTE), "", {}, {}, {}, {rerouterIntervalParent}, {}, {}),
46 myClosedLane(closedLane),
47 myPermissions(permissions) {
48  // update boundary of rerouter parent
49  rerouterIntervalParent->getParentAdditionals().front()->updateCenteringBoundary(true);
50 }
51 
52 
54 
55 
56 void
61  if (!getAttribute(SUMO_ATTR_ALLOW).empty()) {
63  } else {
65  }
66  }
67  device.closeTag();
68 }
69 
70 
71 bool
73  return true;
74 }
75 
76 
77 std::string
79  return "";
80 }
81 
82 
83 void
85  // nothing to fix
86 }
87 
88 
89 bool
91  return false;
92 }
93 
94 
97  // GNEClosingLaneReroute cannot be moved
98  return nullptr;
99 }
100 
101 
102 void
104  // update centering boundary (needed for centering)
106 }
107 
108 
109 Position
111  // get rerouter parent position
112  Position signPosition = getParentAdditionals().front()->getParentAdditionals().front()->getPositionInView();
113  // set position depending of indexes
114  signPosition.add(4.5 + 6.25, (getDrawPositionIndex() * -1) - getParentAdditionals().front()->getDrawPositionIndex() + 1, 0);
115  // return signPosition
116  return signPosition;
117 }
118 
119 
120 void
122  // nothing to update
123 }
124 
125 
126 void
127 GNEClosingLaneReroute::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
128  // geometry of this element cannot be splitted
129 }
130 
131 
132 std::string
134  return getParentAdditionals().at(0)->getID();
135 }
136 
137 
138 void
140  // draw closing lane reroute as listed attribute
145 }
146 
147 
148 std::string
150  switch (key) {
151  case SUMO_ATTR_ID:
152  return getMicrosimID();
153  case SUMO_ATTR_LANE:
154  return myClosedLane->getID();
155  case SUMO_ATTR_ALLOW:
157  case SUMO_ATTR_DISALLOW:
159  case GNE_ATTR_PARENT:
160  return getParentAdditionals().at(0)->getID();
161  case GNE_ATTR_SELECTED:
164  return "";
165  default:
166  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
167  }
168 }
169 
170 
171 double
173  throw InvalidArgument(getTagStr() + " doesn't have a double attribute of type '" + toString(key) + "'");
174 }
175 
176 
177 const Parameterised::Map&
179  return PARAMETERS_EMPTY;
180 }
181 
182 
183 void
184 GNEClosingLaneReroute::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
185  switch (key) {
186  case SUMO_ATTR_ID:
187  case SUMO_ATTR_LANE:
188  case SUMO_ATTR_ALLOW:
189  case SUMO_ATTR_DISALLOW:
190  case GNE_ATTR_SELECTED:
192  GNEChange_Attribute::changeAttribute(this, key, value, undoList);
193  break;
194  default:
195  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
196  }
197 }
198 
199 
200 bool
201 GNEClosingLaneReroute::isValid(SumoXMLAttr key, const std::string& value) {
202  switch (key) {
203  case SUMO_ATTR_ID:
204  return isValidAdditionalID(value);
205  case SUMO_ATTR_LANE:
206  return (myNet->getAttributeCarriers()->retrieveLane(value, false) != nullptr);
207  case SUMO_ATTR_ALLOW:
208  case SUMO_ATTR_DISALLOW:
209  return canParseVehicleClasses(value);
210  case GNE_ATTR_SELECTED:
211  return canParse<double>(value);
212  default:
213  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
214  }
215 }
216 
217 
218 std::string
220  return getTagStr();
221 }
222 
223 
224 std::string
226  return getTagStr() + ": " + myClosedLane->getID();
227 }
228 
229 // ===========================================================================
230 // private
231 // ===========================================================================
232 
233 void
234 GNEClosingLaneReroute::setAttribute(SumoXMLAttr key, const std::string& value) {
235  switch (key) {
236  case SUMO_ATTR_ID:
237  // update microsimID
238  setAdditionalID(value);
239  break;
240  case SUMO_ATTR_LANE:
242  break;
243  case SUMO_ATTR_ALLOW:
245  break;
246  case SUMO_ATTR_DISALLOW:
248  break;
249  case GNE_ATTR_SELECTED:
250  if (parse<bool>(value)) {
252  } else {
254  }
255  break;
257  shiftLaneIndex();
258  break;
259  default:
260  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
261  }
262 }
263 
264 
265 void
267  // nothing to do
268 }
269 
270 
271 void
272 GNEClosingLaneReroute::commitMoveShape(const GNEMoveResult& /*moveResult*/, GNEUndoList* /*undoList*/) {
273  // nothing to do
274 }
275 
276 /****************************************************************************/
@ GLO_REROUTER_CLOSINGLANEREROUTE
a closing lane reroute
GUIIcon
An enumeration of icons used by the gui applications.
Definition: GUIIcons.h:33
@ CLOSINGLANEREROUTE
@ REROUTER_CLOSINGLANEREROUTE
const SVCPermissions SVCAll
all VClasses are allowed
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.
long long 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
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEAdditional.h:49
bool isValidAdditionalID(const std::string &value) const
check if a new additional ID is valid
void drawListedAdditional(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
void setAdditionalID(const std::string &newID)
set additional ID
void shiftLaneIndex()
shift lane index
int getDrawPositionIndex() const
get draw position index (used in rerouters and VSS)
const std::string getID() const
get ID (all Attribute Carriers have one)
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
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
static void changeAttribute(GNEAttributeCarrier *AC, SumoXMLAttr key, const std::string &value, GNEUndoList *undoList, const bool force=false)
change attribute
bool checkDrawMoveContour() const
check if draw move contour (red)
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 written into XML (must be reimplemented in all detector ch...
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:121
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
Definition: GUIGlObject.h:143
Stores the information about how to visualize structures.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:254
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
Definition: Parameterised.h:45
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:132
static const RGBColor YELLOW
Definition: RGBColor.h:188
static const RGBColor RED
named colors
Definition: RGBColor.h:185