Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
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>
29#include <guisim/GUINet.h>
31#include <guisim/GUIBusStop.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
60GUITriggerBuilder::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, const double radius) {
63 GUITriggeredRerouter* rr = new GUITriggeredRerouter(id, edges, prob, off, optional, timeThreshold, vTypes, pos, radius,
64 dynamic_cast<GUINet&>(net).getVisualisationSpeedUp());
65 return rr;
66}
67
68
69void
70GUITriggerBuilder::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
82void
83GUITriggerBuilder::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);
96 delete stop;
97 throw InvalidArgument("Could not build parking area '" + id + "'; probably declared twice.");
98 } else {
99 myParkingArea = stop;
100 }
101}
102
103
104void
105GUITriggerBuilder::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
120void
121GUITriggerBuilder::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
131void
132GUITriggerBuilder::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
138void
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
149void
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:36
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.
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.
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, const double radius) override
builds an rerouter
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:1365
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition MSNet.cpp:186
A lane area vehicles can halt at.
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