Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/guinetload/GUITriggerBuilder.cpp
169666 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 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
/****************************************************************************/
14
/// @file GUITriggerBuilder.cpp
15
/// @author Daniel Krajzewicz
16
/// @author Jakob Erdmann
17
/// @author Michael Behrisch
18
/// @author Johannes Rummel
19
/// @date Mon, 26.04.2004
20
///
21
// Builds trigger objects for guisim
22
/****************************************************************************/
23
#include <config.h>
24
25
#include <string>
26
#include <fstream>
27
#include <utils/common/RGBColor.h>
28
#include <guisim/GUILaneSpeedTrigger.h>
29
#include <guisim/GUINet.h>
30
#include <guisim/GUITriggeredRerouter.h>
31
#include <guisim/GUIBusStop.h>
32
#include <guisim/GUIParkingArea.h>
33
#include <guisim/GUICalibrator.h>
34
#include <guisim/GUIChargingStation.h>
35
#include <guisim/GUIOverheadWire.h>
36
#include "GUITriggerBuilder.h"
37
38
39
40
// ===========================================================================
41
// method definitions
42
// ===========================================================================
43
GUITriggerBuilder::GUITriggerBuilder() {}
44
45
46
GUITriggerBuilder::~GUITriggerBuilder() {}
47
48
49
MSLaneSpeedTrigger*
50
GUITriggerBuilder::buildLaneSpeedTrigger(MSNet& net,
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
59
MSTriggeredRerouter*
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, 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
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, double angle) {
73
myCurrentStop = new GUIBusStop(id, element, lines, *lane, frompos, topos, name, personCapacity, parkingLength, color, angle);
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
139
GUITriggerBuilder::endParkingArea() {
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
150
GUITriggerBuilder::endStoppingPlace() {
151
if (myCurrentStop != nullptr) {
152
static_cast<GUINet*>(MSNet::getInstance())->registerRenderedObject(dynamic_cast<GUIGlObject*>(myCurrentStop));
153
myCurrentStop->finishedLoading();
154
myCurrentStop = nullptr;
155
} else {
156
throw InvalidArgument("Could not end a stopping place that is not opened.");
157
}
158
}
159
160
161
/****************************************************************************/
162
163