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) {
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
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.
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:1364
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition MSNet.cpp:185
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