Eclipse SUMO - Simulation of Urban MObility
GUITriggerBuilder.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 /****************************************************************************/
21 // Builds trigger objects for guisim
22 /****************************************************************************/
23 #include <config.h>
24 
25 #include <string>
26 #include <fstream>
27 #include <utils/common/RGBColor.h>
29 #include <guisim/GUINet.h>
31 #include <guisim/GUIBusStop.h>
32 #include <guisim/GUIParkingArea.h>
33 #include <guisim/GUICalibrator.h>
35 #include <guisim/GUIOverheadWire.h>
36 #include "GUITriggerBuilder.h"
37 
38 
39 
40 // ===========================================================================
41 // method definitions
42 // ===========================================================================
44 
45 
47 
48 
51  const std::string& id, const std::vector<MSLane*>& destLanes,
52  const std::string& file) {
53  GUILaneSpeedTrigger* lst = new GUILaneSpeedTrigger(id, destLanes, file);
54  static_cast<GUINet&>(net).registerRenderedObject(lst);
55  return lst;
56 }
57 
58 
60 GUITriggerBuilder::buildRerouter(MSNet& net, const std::string& id,
61  MSEdgeVector& edges, double prob, bool off, bool optional,
62  SUMOTime timeThreshold, const std::string& vTypes, const Position& pos) {
63  GUITriggeredRerouter* rr = new GUITriggeredRerouter(id, edges, prob, off, optional, timeThreshold, vTypes, pos,
64  dynamic_cast<GUINet&>(net).getVisualisationSpeedUp());
65  return rr;
66 }
67 
68 
69 void
70 GUITriggerBuilder::buildStoppingPlace(MSNet& net, std::string id, std::vector<std::string> lines, MSLane* lane,
71  double frompos, double topos, const SumoXMLTag element, std::string name,
72  int personCapacity, double parkingLength, RGBColor& color) {
73  myCurrentStop = new GUIBusStop(id, element, lines, *lane, frompos, topos, name, personCapacity, parkingLength, color);
74  if (!net.addStoppingPlace(element, myCurrentStop)) {
75  delete myCurrentStop;
76  myCurrentStop = nullptr;
77  throw InvalidArgument("Could not build " + toString(element) + " '" + id + "'; probably declared twice.");
78  }
79 }
80 
81 
82 void
83 GUITriggerBuilder::beginParkingArea(MSNet& net, const std::string& id,
84  const std::vector<std::string>& lines,
85  const std::vector<std::string>& badges,
86  MSLane* lane,
87  double frompos, double topos,
88  unsigned int capacity,
89  double width, double length, double angle, const std::string& name,
90  bool onRoad,
91  const std::string& departPos,
92  bool lefthand) {
93  assert(myParkingArea == 0);
94  GUIParkingArea* stop = new GUIParkingArea(id, lines, badges, *lane, frompos, topos, capacity, width, length, angle, name, onRoad, departPos, lefthand);
95  if (!net.addStoppingPlace(SUMO_TAG_PARKING_AREA, stop)) {
96  delete stop;
97  throw InvalidArgument("Could not build parking area '" + id + "'; probably declared twice.");
98  } else {
99  myParkingArea = stop;
100  }
101 }
102 
103 
104 void
105 GUITriggerBuilder::buildChargingStation(MSNet& net, const std::string& id, MSLane* lane, double frompos, double topos,
106  const std::string& name, double chargingPower, double efficiency, bool chargeInTransit,
107  SUMOTime chargeDelay, std::string chargeType, SUMOTime waitingTime, MSParkingArea* parkingArea) {
108  GUIChargingStation* chargingStation = (parkingArea == nullptr) ? new GUIChargingStation(id, *lane, frompos, topos, name, chargingPower, efficiency,
109  chargeInTransit, chargeDelay, chargeType, waitingTime) : new GUIChargingStation(id, parkingArea, name, chargingPower, efficiency,
110  chargeInTransit, chargeDelay, chargeType, waitingTime);
111  if (!net.addStoppingPlace(SUMO_TAG_CHARGING_STATION, chargingStation)) {
112  delete chargingStation;
113  throw InvalidArgument("Could not build charging station '" + id + "'; probably declared twice.");
114  }
115  myCurrentStop = chargingStation;
116  static_cast<GUINet&>(net).registerRenderedObject(chargingStation);
117 }
118 
119 
120 void
121 GUITriggerBuilder::buildOverheadWireSegment(MSNet& net, const std::string& id, MSLane* lane, double frompos, double topos,
122  bool voltageSource) {
123  GUIOverheadWire* overheadWire = new GUIOverheadWire(id, *lane, frompos, topos, voltageSource);
124  if (!net.addStoppingPlace(SUMO_TAG_OVERHEAD_WIRE_SEGMENT, overheadWire)) {
125  delete overheadWire;
126  throw InvalidArgument("Could not build overheadWireSegment '" + id + "'; probably declared twice.");
127  }
128  static_cast<GUINet&>(net).registerRenderedObject(overheadWire);
129 }
130 
131 void
132 GUITriggerBuilder::buildOverheadWireClamp(MSNet& net, const std::string& id, MSLane* lane_start, MSLane* lane_end) {
133  GUIOverheadWireClamp* overheadWireClamp = new GUIOverheadWireClamp(id, *lane_start, *lane_end);
134  static_cast<GUINet&>(net).registerRenderedObject(overheadWireClamp);
135 }
136 
137 
138 void
140  if (myParkingArea != nullptr) {
141  static_cast<GUINet*>(MSNet::getInstance())->registerRenderedObject(static_cast<GUIParkingArea*>(myParkingArea));
142  myParkingArea = nullptr;
143  } else {
144  throw InvalidArgument("Could not end a parking area that is not opened.");
145  }
146 }
147 
148 
149 void
151  if (myCurrentStop != nullptr) {
152  static_cast<GUINet*>(MSNet::getInstance())->registerRenderedObject(dynamic_cast<GUIGlObject*>(myCurrentStop));
153  myCurrentStop = nullptr;
154  } else {
155  throw InvalidArgument("Could not end a stopping place that is not opened.");
156  }
157 }
158 
159 
160 /****************************************************************************/
long long int SUMOTime
Definition: GUI.h:35
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:73
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_CHARGING_STATION
A Charging Station.
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_OVERHEAD_WIRE_SEGMENT
An overhead wire segment.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
A lane area vehicles can halt at (gui-version)
Definition: GUIBusStop.h:63
A lane area vehicles can halt at (gui-version)
Changes the speed allowed on a set of lanes (gui version)
A MSNet extended by some values for usage within the gui.
Definition: GUINet.h:82
GUI for the overhead wire system.
A lane area vehicles can halt at (gui-version)
void buildOverheadWireClamp(MSNet &net, const std::string &id, MSLane *lane_start, MSLane *lane_end) override
Builds an overhead wire clamp.
void buildChargingStation(MSNet &net, const std::string &id, MSLane *lane, double frompos, double topos, const std::string &name, double chargingPower, double efficiency, bool chargeInTransit, SUMOTime chargeDelay, std::string chargeType, SUMOTime waitingTime, MSParkingArea *parkingArea) override
Builds a charging station.
MSTriggeredRerouter * buildRerouter(MSNet &net, const std::string &id, MSEdgeVector &edges, double prob, bool off, bool optional, SUMOTime timeThreshold, const std::string &vTypes, const Position &pos) override
builds an rerouter
void endParkingArea() override
End a parking area (it must be added to the SUMORTree after all parking spaces are loaded.
MSLaneSpeedTrigger * buildLaneSpeedTrigger(MSNet &net, const std::string &id, const std::vector< MSLane * > &destLanes, const std::string &file) override
Builds a lane speed trigger.
void beginParkingArea(MSNet &net, const std::string &id, const std::vector< std::string > &lines, const std::vector< std::string > &badges, MSLane *lane, double frompos, double topos, unsigned int capacity, double width, double length, double angle, const std::string &name, bool onRoad, const std::string &departPos, bool lefthand) override
Builds a parking area.
void buildStoppingPlace(MSNet &net, std::string id, std::vector< std::string > lines, MSLane *lane, double frompos, double topos, const SumoXMLTag element, std::string string, int personCapacity, double parkingLength, RGBColor &color) override
Builds a bus stop.
void endStoppingPlace() override
End a stopping place.
GUITriggerBuilder()
Constructor.
~GUITriggerBuilder()
Destructor.
void buildOverheadWireSegment(MSNet &net, const std::string &id, MSLane *lane, double frompos, double topos, bool voltageSource) override
Builds an overhead wire segment.
Reroutes vehicles passing an edge One rerouter can be active on multiple edges. To reduce drawing loa...
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
Changes the speed allowed on a set of lanes.
The simulated network and simulation perfomer.
Definition: MSNet.h:89
bool addStoppingPlace(const SumoXMLTag category, MSStoppingPlace *stop)
Adds a stopping place.
Definition: MSNet.cpp:1348
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:182
A lane area vehicles can halt at.
Definition: MSParkingArea.h:60
Reroutes traffic objects passing an edge.
MSParkingArea * myParkingArea
definition of the currently parsed parking area
MSStoppingPlace * myCurrentStop
The currently parsed stop to add access points to.
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37