Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/elements/additional/GNEParkingAreaReroute.cpp
193767 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2026 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 GNEParkingAreaReroute.cpp
15
/// @author Jakob Erdmann
16
/// @date May 2018
17
///
18
//
19
/****************************************************************************/
20
21
#include <netedit/GNENet.h>
22
#include <netedit/changes/GNEChange_Attribute.h>
23
24
#include "GNEParkingAreaReroute.h"
25
26
// ===========================================================================
27
// member method definitions
28
// ===========================================================================
29
30
GNEParkingAreaReroute::GNEParkingAreaReroute(GNENet* net):
31
GNEAdditional(net, SUMO_TAG_PARKING_AREA_REROUTE),
32
GNEAdditionalListed(this) {
33
}
34
35
36
GNEParkingAreaReroute::GNEParkingAreaReroute(GNEAdditional* rerouterIntervalParent, GNEAdditional* newParkingArea,
37
const double probability, const bool visible):
38
GNEAdditional(rerouterIntervalParent, SUMO_TAG_PARKING_AREA_REROUTE, ""),
39
GNEAdditionalListed(this),
40
myProbability(probability),
41
myVisible(visible) {
42
// set parents
43
setParents<GNEAdditional*>({rerouterIntervalParent, newParkingArea});
44
// update boundary of rerouter parent
45
rerouterIntervalParent->getParentAdditionals().front()->updateCenteringBoundary(true);
46
}
47
48
49
GNEParkingAreaReroute::~GNEParkingAreaReroute() {}
50
51
52
GNEMoveElement*
53
GNEParkingAreaReroute::getMoveElement() const {
54
return nullptr;
55
}
56
57
58
Parameterised*
59
GNEParkingAreaReroute::getParameters() {
60
return nullptr;
61
}
62
63
64
const Parameterised*
65
GNEParkingAreaReroute::getParameters() const {
66
return nullptr;
67
}
68
69
70
void
71
GNEParkingAreaReroute::writeAdditional(OutputDevice& device) const {
72
device.openTag(SUMO_TAG_PARKING_AREA_REROUTE);
73
// write common additional attributes
74
writeAdditionalAttributes(device);
75
// write specific attributes
76
device.writeAttr(SUMO_ATTR_ID, getAttribute(SUMO_ATTR_PARKING));
77
if (myProbability != 1.0) {
78
device.writeAttr(SUMO_ATTR_PROB, myProbability);
79
}
80
if (myVisible) {
81
device.writeAttr(SUMO_ATTR_VISIBLE, true);
82
}
83
device.closeTag();
84
}
85
86
87
bool
88
GNEParkingAreaReroute::isAdditionalValid() const {
89
return true;
90
}
91
92
93
std::string
94
GNEParkingAreaReroute::getAdditionalProblem() const {
95
return "";
96
}
97
98
99
void
100
GNEParkingAreaReroute::fixAdditionalProblem() {
101
// nothing to fix
102
}
103
104
105
bool
106
GNEParkingAreaReroute::checkDrawMoveContour() const {
107
return false;
108
}
109
110
111
void
112
GNEParkingAreaReroute::updateGeometry() {
113
updateGeometryListedAdditional();
114
}
115
116
117
Position
118
GNEParkingAreaReroute::getPositionInView() const {
119
return getListedPositionInView();
120
}
121
122
123
void
124
GNEParkingAreaReroute::updateCenteringBoundary(const bool /*updateGrid*/) {
125
// nothing to update
126
}
127
128
129
void
130
GNEParkingAreaReroute::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
131
// geometry of this element cannot be splitted
132
}
133
134
135
std::string
136
GNEParkingAreaReroute::getParentName() const {
137
return getParentAdditionals().at(0)->getID();
138
}
139
140
141
void
142
GNEParkingAreaReroute::drawGL(const GUIVisualizationSettings& s) const {
143
// draw dest prob reroute as listed attribute
144
drawListedAdditional(s, RGBColor::RED, RGBColor::YELLOW, GUITexture::REROUTER_PARKINGAREAREROUTE,
145
getAttribute(SUMO_ATTR_PARKING) + ": " + getAttribute(SUMO_ATTR_PROB));
146
}
147
148
149
std::string
150
GNEParkingAreaReroute::getAttribute(SumoXMLAttr key) const {
151
switch (key) {
152
case SUMO_ATTR_ID:
153
return getMicrosimID();
154
case SUMO_ATTR_PARKING:
155
return getParentAdditionals().at(1)->getID();
156
case SUMO_ATTR_PROB:
157
return toString(myProbability);
158
case SUMO_ATTR_VISIBLE:
159
return toString(myVisible);
160
case GNE_ATTR_PARENT:
161
return toString(getParentAdditionals().at(0)->getID());
162
default:
163
return getCommonAttribute(key);
164
}
165
}
166
167
168
double
169
GNEParkingAreaReroute::getAttributeDouble(SumoXMLAttr key) const {
170
return getCommonAttributeDouble(key);
171
}
172
173
174
Position
175
GNEParkingAreaReroute::getAttributePosition(SumoXMLAttr key) const {
176
return getCommonAttributePosition(key);
177
}
178
179
180
PositionVector
181
GNEParkingAreaReroute::getAttributePositionVector(SumoXMLAttr key) const {
182
return getCommonAttributePositionVector(key);
183
}
184
185
186
void
187
GNEParkingAreaReroute::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
188
if (value == getAttribute(key)) {
189
return; //avoid needless changes, later logic relies on the fact that attributes have changed
190
}
191
switch (key) {
192
case SUMO_ATTR_ID:
193
case SUMO_ATTR_PARKING:
194
case SUMO_ATTR_PROB:
195
case SUMO_ATTR_VISIBLE:
196
GNEChange_Attribute::changeAttribute(this, key, value, undoList);
197
break;
198
default:
199
setCommonAttribute(key, value, undoList);
200
break;
201
}
202
}
203
204
205
bool
206
GNEParkingAreaReroute::isValid(SumoXMLAttr key, const std::string& value) {
207
switch (key) {
208
case SUMO_ATTR_ID:
209
return isValidAdditionalID(value);
210
case SUMO_ATTR_PARKING:
211
return (myNet->getAttributeCarriers()->retrieveAdditional(SUMO_TAG_PARKING_AREA, value, false) != nullptr);
212
case SUMO_ATTR_PROB:
213
return canParse<double>(value) && parse<double>(value) >= 0 && parse<double>(value) <= 1;
214
case SUMO_ATTR_VISIBLE:
215
return canParse<bool>(value);
216
default:
217
return isCommonAttributeValid(key, value);
218
}
219
}
220
221
222
std::string
223
GNEParkingAreaReroute::getPopUpID() const {
224
return getTagStr();
225
}
226
227
228
std::string
229
GNEParkingAreaReroute::getHierarchyName() const {
230
return getTagStr() + ": " + getParentAdditionals().at(1)->getID();
231
}
232
233
// ===========================================================================
234
// private
235
// ===========================================================================
236
237
void
238
GNEParkingAreaReroute::setAttribute(SumoXMLAttr key, const std::string& value) {
239
switch (key) {
240
case SUMO_ATTR_ID:
241
// update microsimID
242
setAdditionalID(value);
243
break;
244
case SUMO_ATTR_PARKING:
245
replaceAdditionalParent(SUMO_TAG_PARKING_AREA, value, 1);
246
break;
247
case SUMO_ATTR_PROB:
248
myProbability = parse<double>(value);
249
break;
250
case SUMO_ATTR_VISIBLE:
251
myVisible = parse<bool>(value);
252
break;
253
default:
254
setCommonAttribute(key, value);
255
break;
256
}
257
}
258
259
/****************************************************************************/
260
261