Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/frames/GNEPlanSelector.cpp
169678 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 GNEPlanSelector.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date Sep 2023
17
///
18
// Frame for select person/container plans
19
/****************************************************************************/
20
21
#include <netedit/elements/additional/GNEAccess.h>
22
#include <netedit/elements/additional/GNEBusStop.h>
23
#include <netedit/elements/additional/GNECalibrator.h>
24
#include <netedit/elements/additional/GNECalibratorFlow.h>
25
#include <netedit/elements/additional/GNEChargingStation.h>
26
#include <netedit/elements/additional/GNEClosingLaneReroute.h>
27
#include <netedit/elements/additional/GNEClosingReroute.h>
28
#include <netedit/elements/additional/GNEContainerStop.h>
29
#include <netedit/elements/additional/GNEDestProbReroute.h>
30
#include <netedit/elements/additional/GNEEntryExitDetector.h>
31
#include <netedit/elements/additional/GNEInductionLoopDetector.h>
32
#include <netedit/elements/additional/GNEInstantInductionLoopDetector.h>
33
#include <netedit/elements/additional/GNELaneAreaDetector.h>
34
#include <netedit/elements/additional/GNEMultiEntryExitDetector.h>
35
#include <netedit/elements/additional/GNEOverheadWire.h>
36
#include <netedit/elements/additional/GNEParkingArea.h>
37
#include <netedit/elements/additional/GNEParkingAreaReroute.h>
38
#include <netedit/elements/additional/GNEParkingSpace.h>
39
#include <netedit/elements/additional/GNEPOI.h>
40
#include <netedit/elements/additional/GNEPoly.h>
41
#include <netedit/elements/additional/GNERerouter.h>
42
#include <netedit/elements/additional/GNERerouterInterval.h>
43
#include <netedit/elements/additional/GNERouteProbe.h>
44
#include <netedit/elements/additional/GNERouteProbReroute.h>
45
#include <netedit/elements/additional/GNETAZ.h>
46
#include <netedit/elements/additional/GNETAZSourceSink.h>
47
#include <netedit/elements/additional/GNETractionSubstation.h>
48
#include <netedit/elements/additional/GNEVaporizer.h>
49
#include <netedit/elements/additional/GNEVariableSpeedSign.h>
50
#include <netedit/elements/additional/GNEVariableSpeedSignStep.h>
51
#include <netedit/elements/demand/GNEContainer.h>
52
#include <netedit/elements/demand/GNEPerson.h>
53
#include <netedit/elements/demand/GNEPersonTrip.h>
54
#include <netedit/elements/demand/GNERide.h>
55
#include <netedit/elements/demand/GNERoute.h>
56
#include <netedit/elements/demand/GNEStop.h>
57
#include <netedit/elements/demand/GNEStopPlan.h>
58
#include <netedit/elements/demand/GNETranship.h>
59
#include <netedit/elements/demand/GNETransport.h>
60
#include <netedit/elements/demand/GNEVehicle.h>
61
#include <netedit/elements/demand/GNEVType.h>
62
#include <netedit/elements/demand/GNEVTypeDistribution.h>
63
#include <netedit/elements/demand/GNEWalk.h>
64
#include <netedit/frames/common/GNEInspectorFrame.h>
65
#include <netedit/GNEApplicationWindow.h>
66
#include <netedit/GNENet.h>
67
#include <netedit/GNEViewNet.h>
68
#include <netedit/GNEViewParent.h>
69
#include <utils/gui/div/GUIDesigns.h>
70
#include <utils/gui/windows/GUIAppEnum.h>
71
72
#include "GNEPlanSelector.h"
73
74
// ===========================================================================
75
// FOX callback mapping
76
// ===========================================================================
77
78
FXDEFMAP(GNEPlanSelector) TagSelectorMap[] = {
79
FXMAPFUNC(SEL_COMMAND, MID_GNE_TAG_SELECTED, GNEPlanSelector::onCmdSelectPlan)
80
};
81
82
// Object implementation
83
FXIMPLEMENT(GNEPlanSelector, MFXGroupBoxModule, TagSelectorMap, ARRAYNUMBER(TagSelectorMap))
84
85
// ===========================================================================
86
// method definitions
87
// ===========================================================================
88
89
GNEPlanSelector::GNEPlanSelector(GNEFrame* frameParent, SumoXMLTag planType) :
90
MFXGroupBoxModule(frameParent, TL("Plan type")),
91
myFrameParent(frameParent) {
92
// Create MFXComboBoxIcon
93
myPlansComboBox = new MFXComboBoxIcon(getCollapsableFrame(), frameParent->getViewNet()->getViewParent()->getGNEAppWindows()->getStaticTooltipMenu(),
94
false, GUIDesignComboBoxVisibleItems, this, MID_GNE_TAG_SELECTED, GUIDesignComboBox);
95
// get net
96
const auto net = myFrameParent->getViewNet()->getNet();
97
// continue depending of plan type
98
if (planType == SUMO_TAG_PERSON) {
99
fillPersonPlanTemplates(net);
100
} else if (planType == SUMO_TAG_CONTAINER) {
101
fillContainerPlanTemplates(net);
102
} else {
103
throw ProcessError("Invalid plan");
104
}
105
// add person plan elements
106
for (const auto& planTemplate : myPlanTemplates) {
107
planTemplate.second->resetDefaultValues(false);
108
myPlansComboBox->appendIconItem(planTemplate.first->getTooltipText().c_str(),
109
GUIIconSubSys::getIcon(planTemplate.second->getTagProperty()->getGUIIcon()),
110
planTemplate.second->getTagProperty()->getBackGroundColor());
111
}
112
// set myCurrentPlanTemplate
113
myCurrentPlanTemplate = myPlanTemplates.front();
114
// set color of myTypeMatchBox to black (valid)
115
myPlansComboBox->setTextColor(GUIDesignTextColorBlack);
116
myPlansComboBox->killFocus();
117
// GNEPlanSelector is always shown
118
show();
119
}
120
121
122
GNEPlanSelector::~GNEPlanSelector() {
123
for (auto& planTemplate : myPlanTemplates) {
124
delete planTemplate.first;
125
delete planTemplate.second;
126
}
127
myPlanTemplates.clear();
128
}
129
130
131
void
132
GNEPlanSelector::showPlanSelector() {
133
show();
134
updateEdgeColors();
135
updateJunctionColors();
136
}
137
138
139
void
140
GNEPlanSelector::hidePlanSelector() {
141
hide();
142
clearEdgeColors();
143
clearJunctionColors();
144
}
145
146
147
const GNETagProperties*
148
GNEPlanSelector::getCurrentPlanTagProperties() const {
149
return myCurrentPlanTemplate.first;
150
}
151
152
153
GNEDemandElement*
154
GNEPlanSelector::getCurrentPlanTemplate() const {
155
return myCurrentPlanTemplate.second;
156
}
157
158
159
void
160
GNEPlanSelector::refreshPlanSelector() {
161
if (isPlanValid()) {
162
// call tag selected function
163
myFrameParent->tagSelected();
164
} else {
165
// set first item
166
myPlansComboBox->setCurrentItem(0, TRUE);
167
}
168
}
169
170
171
bool
172
GNEPlanSelector::markRoutes() const {
173
// first check if this modul is shown and selected plan is valid
174
if (isPlanValid()) {
175
return myCurrentPlanTemplate.first->planRoute();
176
} else {
177
return false;
178
}
179
}
180
181
182
bool
183
GNEPlanSelector::markEdges() const {
184
// first check if this modul is shown and selected plan is valid
185
if (isPlanValid()) {
186
return myCurrentPlanTemplate.first->planConsecutiveEdges() ||
187
myCurrentPlanTemplate.first->planEdge() ||
188
myCurrentPlanTemplate.first->planFromEdge() ||
189
myCurrentPlanTemplate.first->planToEdge();
190
} else {
191
return false;
192
}
193
}
194
195
196
bool
197
GNEPlanSelector::markJunctions() const {
198
// first check if this modul is shown and selected plan is valid
199
if (isPlanValid()) {
200
return myCurrentPlanTemplate.first->planFromJunction() ||
201
myCurrentPlanTemplate.first->planToJunction();
202
} else {
203
return false;
204
}
205
}
206
207
208
bool
209
GNEPlanSelector::markStoppingPlaces() const {
210
// first check if this modul is shown and selected plan is valid
211
if (isPlanValid()) {
212
return myCurrentPlanTemplate.first->planStoppingPlace() ||
213
myCurrentPlanTemplate.first->planFromStoppingPlace() ||
214
myCurrentPlanTemplate.first->planToStoppingPlace();
215
} else {
216
return false;
217
}
218
}
219
220
221
bool
222
GNEPlanSelector::markTAZs() const {
223
// first check if this modul is shown and selected plan is valid
224
if (isPlanValid()) {
225
return myCurrentPlanTemplate.first->planFromTAZ() ||
226
myCurrentPlanTemplate.first->planToTAZ();
227
} else {
228
return false;
229
}
230
}
231
232
233
void
234
GNEPlanSelector::updateJunctionColors() {
235
// clear junction colors
236
clearJunctionColors();
237
// we assume that all junctions don't support pedestrians
238
for (const auto& junction : myFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getJunctions()) {
239
junction.second->setInvalidCandidate(true);
240
}
241
// mark junctions that supports pedestrian as candidates
242
for (const auto& edge : myFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdges()) {
243
for (int i = 0; i < (int)edge.second->getChildLanes().size(); i++) {
244
if (edge.second->getNBEdge()->getLanes().at(i).permissions & SVC_PEDESTRIAN) {
245
edge.second->getFromJunction()->setPossibleCandidate(true);
246
edge.second->getToJunction()->setPossibleCandidate(true);
247
}
248
}
249
}
250
// update view net
251
myFrameParent->getViewNet()->updateViewNet();
252
}
253
254
255
void
256
GNEPlanSelector::updateEdgeColors() {
257
// clear edge colors
258
clearEdgeColors();
259
// mark edges that supports pedestrian as candidates
260
for (const auto& edge : myFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdges()) {
261
bool allowPedestrian = false;
262
for (int i = 0; i < (int)edge.second->getChildLanes().size(); i++) {
263
if (edge.second->getNBEdge()->getLanes().at(i).permissions & SVC_PEDESTRIAN) {
264
allowPedestrian = true;
265
}
266
}
267
if (allowPedestrian) {
268
edge.second->setPossibleCandidate(true);
269
} else {
270
edge.second->setInvalidCandidate(true);
271
}
272
}
273
// update view net
274
myFrameParent->getViewNet()->updateViewNet();
275
}
276
277
278
void
279
GNEPlanSelector::clearJunctionColors() {
280
// reset all junction flags
281
for (const auto& junction : myFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getJunctions()) {
282
junction.second->resetCandidateFlags();
283
}
284
}
285
286
287
void
288
GNEPlanSelector::clearEdgeColors() {
289
// reset all junction flags
290
for (const auto& edge : myFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdges()) {
291
edge.second->resetCandidateFlags();
292
}
293
}
294
295
296
long
297
GNEPlanSelector::onCmdSelectPlan(FXObject*, FXSelector, void*) {
298
// check if selected plan of comboBox exists in plans
299
for (const auto& planTemplate : myPlanTemplates) {
300
if (planTemplate.first->getTooltipText().c_str() == myPlansComboBox->getText()) {
301
// update myCurrentPlanTemplate
302
myCurrentPlanTemplate = planTemplate;
303
// set color of myTypeMatchBox to black (valid)
304
myPlansComboBox->setTextColor(GUIDesignTextColorBlack);
305
myPlansComboBox->killFocus();
306
// call tag selected function
307
myFrameParent->tagSelected();
308
return 1;
309
}
310
}
311
// reset myCurrentPlanTemplate
312
myCurrentPlanTemplate = std::make_pair(nullptr, nullptr);
313
// set color of myTypeMatchBox to red (invalid)
314
myPlansComboBox->setTextColor(GUIDesignTextColorRed);
315
// call tag selected function
316
myFrameParent->tagSelected();
317
return 1;
318
}
319
320
321
bool
322
GNEPlanSelector::isPlanValid() const {
323
if (myCurrentPlanTemplate.second) {
324
return myPlansComboBox->getTextColor() == GUIDesignTextColorBlack;
325
} else {
326
return false;
327
}
328
}
329
330
331
void
332
GNEPlanSelector::fillPersonPlanTemplates(GNENet* net) {
333
GNETagProperties* tagProperty = nullptr;
334
// person trip
335
tagProperty = new GNETagProperties(SUMO_TAG_PERSONTRIP, nullptr,
336
GNETagProperties::Type::PERSONPLAN,
337
GNETagProperties::Property::NO_PROPERTY,
338
GNETagProperties::Over::FROM_EDGE | GNETagProperties::Over::TO_EDGE |
339
GNETagProperties::Over::FROM_TAZ | GNETagProperties::Over::TO_TAZ |
340
GNETagProperties::Over::FROM_JUNCTION | GNETagProperties::Over::TO_JUNCTION |
341
GNETagProperties::Over::FROM_BUSSTOP | GNETagProperties::Over::TO_BUSSTOP |
342
GNETagProperties::Over::FROM_TRAINSTOP | GNETagProperties::Over::TO_TRAINSTOP |
343
GNETagProperties::Over::FROM_CONTAINERSTOP | GNETagProperties::Over::TO_CONTAINERSTOP |
344
GNETagProperties::Over::FROM_CHARGINGSTATION | GNETagProperties::Over::TO_CHARGINGSTATION |
345
GNETagProperties::Over::FROM_PARKINGAREA | GNETagProperties::Over::TO_PARKINGAREA,
346
GNETagProperties::Conflicts::NO_CONFLICTS,
347
GUIIcon::EMPTY, GUIGlObjectType::GLO_PERSONTRIP, SUMO_TAG_PERSONTRIP, "PersonTrip");
348
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEPersonTrip(GNE_TAG_PERSONTRIP_EDGE_EDGE, net)));
349
// ride
350
tagProperty = new GNETagProperties(SUMO_TAG_RIDE, nullptr,
351
GNETagProperties::Type::PERSONPLAN,
352
GNETagProperties::Property::NO_PROPERTY,
353
GNETagProperties::Over::FROM_EDGE | GNETagProperties::Over::TO_EDGE |
354
GNETagProperties::Over::FROM_TAZ | GNETagProperties::Over::TO_TAZ |
355
GNETagProperties::Over::FROM_JUNCTION | GNETagProperties::Over::TO_JUNCTION |
356
GNETagProperties::Over::FROM_BUSSTOP | GNETagProperties::Over::TO_BUSSTOP |
357
GNETagProperties::Over::FROM_TRAINSTOP | GNETagProperties::Over::TO_TRAINSTOP |
358
GNETagProperties::Over::FROM_CONTAINERSTOP | GNETagProperties::Over::TO_CONTAINERSTOP |
359
GNETagProperties::Over::FROM_CHARGINGSTATION | GNETagProperties::Over::TO_CHARGINGSTATION |
360
GNETagProperties::Over::FROM_PARKINGAREA | GNETagProperties::Over::TO_PARKINGAREA,
361
GNETagProperties::Conflicts::NO_CONFLICTS,
362
GUIIcon::EMPTY, GUIGlObjectType::GLO_RIDE, SUMO_TAG_RIDE, "Ride");
363
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNERide(GNE_TAG_RIDE_EDGE_EDGE, net)));
364
// walk
365
tagProperty = new GNETagProperties(SUMO_TAG_WALK, nullptr,
366
GNETagProperties::Type::PERSONPLAN,
367
GNETagProperties::Property::NO_PROPERTY,
368
GNETagProperties::Over::FROM_EDGE | GNETagProperties::Over::TO_EDGE |
369
GNETagProperties::Over::FROM_TAZ | GNETagProperties::Over::TO_TAZ |
370
GNETagProperties::Over::FROM_JUNCTION | GNETagProperties::Over::TO_JUNCTION |
371
GNETagProperties::Over::FROM_BUSSTOP | GNETagProperties::Over::TO_BUSSTOP |
372
GNETagProperties::Over::FROM_TRAINSTOP | GNETagProperties::Over::TO_TRAINSTOP |
373
GNETagProperties::Over::FROM_CONTAINERSTOP | GNETagProperties::Over::TO_CONTAINERSTOP |
374
GNETagProperties::Over::FROM_CHARGINGSTATION | GNETagProperties::Over::TO_CHARGINGSTATION |
375
GNETagProperties::Over::FROM_PARKINGAREA | GNETagProperties::Over::TO_PARKINGAREA,
376
GNETagProperties::Conflicts::NO_CONFLICTS,
377
GUIIcon::EMPTY, GUIGlObjectType::GLO_WALK, SUMO_TAG_WALK, "Walk");
378
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEWalk(GNE_TAG_WALK_EDGE_EDGE, net)));
379
// walk (edges)
380
tagProperty = new GNETagProperties(GNE_TAG_WALK_EDGES, nullptr,
381
GNETagProperties::Type::PERSONPLAN,
382
GNETagProperties::Property::NO_PROPERTY,
383
GNETagProperties::Over::CONSECUTIVE_EDGES,
384
GNETagProperties::Conflicts::NO_CONFLICTS,
385
GUIIcon::EMPTY, GUIGlObjectType::GLO_WALK, SUMO_TAG_WALK, "Walk (edges)");
386
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEWalk(GNE_TAG_WALK_EDGES, net)));
387
// walk (route)
388
tagProperty = new GNETagProperties(GNE_TAG_WALK_ROUTE, nullptr,
389
GNETagProperties::Type::PERSONPLAN,
390
GNETagProperties::Property::NO_PROPERTY,
391
GNETagProperties::Over::ROUTE,
392
GNETagProperties::Conflicts::NO_CONFLICTS,
393
GUIIcon::EMPTY, GUIGlObjectType::GLO_WALK, SUMO_TAG_WALK, "Walk (route)");
394
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEWalk(GNE_TAG_WALK_ROUTE, net)));
395
// stop
396
tagProperty = new GNETagProperties(GNE_TAG_PERSONSTOPS, nullptr,
397
GNETagProperties::Type::PERSONPLAN,
398
GNETagProperties::Property::NO_PROPERTY,
399
GNETagProperties::Over::EDGE | GNETagProperties::Over::BUSSTOP |
400
GNETagProperties::Over::TRAINSTOP | GNETagProperties::Over::CONTAINERSTOP |
401
GNETagProperties::Over::CHARGINGSTATION | GNETagProperties::Over::PARKINGAREA,
402
GNETagProperties::Conflicts::NO_CONFLICTS,
403
GUIIcon::EMPTY, GUIGlObjectType::GLO_STOP, SUMO_TAG_STOP, "Person Stop");
404
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEStopPlan(GNE_TAG_STOPPERSON_EDGE, net)));
405
}
406
407
408
void
409
GNEPlanSelector::fillContainerPlanTemplates(GNENet* net) {
410
GNETagProperties* tagProperty = nullptr;
411
// transport
412
tagProperty = new GNETagProperties(SUMO_TAG_TRANSPORT, nullptr,
413
GNETagProperties::Type::CONTAINERPLAN,
414
GNETagProperties::Property::NO_PROPERTY,
415
GNETagProperties::Over::FROM_EDGE | GNETagProperties::Over::TO_EDGE |
416
//GNETagProperties::Over::FROM_TAZ | GNETagProperties::Over::TO_TAZ |
417
//GNETagProperties::Over::FROM_JUNCTION | GNETagProperties::Over::TO_JUNCTION |
418
//GNETagProperties::Over::FROM_BUSSTOP | GNETagProperties::Over::TO_BUSSTOP |
419
//GNETagProperties::Over::FROM_TRAINSTOP | GNETagProperties::Over::TO_TRAINSTOP |
420
GNETagProperties::Over::FROM_CONTAINERSTOP | GNETagProperties::Over::TO_CONTAINERSTOP,
421
//GNETagProperties::Over::FROM_CHARGINGSTATION | GNETagProperties::Over::TO_CHARGINGSTATION |
422
//GNETagProperties::Over::FROM_PARKINGAREA | GNETagProperties::Over::TO_PARKINGAREA,
423
GNETagProperties::Conflicts::NO_CONFLICTS,
424
GUIIcon::EMPTY, GUIGlObjectType::GLO_TRANSPORT, SUMO_TAG_PERSONTRIP, "Transport");
425
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNETransport(GNE_TAG_TRANSPORT_EDGE_EDGE, net)));
426
// tranship
427
tagProperty = new GNETagProperties(SUMO_TAG_TRANSHIP, nullptr,
428
GNETagProperties::Type::CONTAINERPLAN,
429
GNETagProperties::Property::NO_PROPERTY,
430
GNETagProperties::Over::FROM_EDGE | GNETagProperties::Over::TO_EDGE |
431
//GNETagProperties::Over::FROM_TAZ | GNETagProperties::Over::TO_TAZ |
432
//GNETagProperties::Over::FROM_JUNCTION | GNETagProperties::Over::TO_JUNCTION |
433
//GNETagProperties::Over::FROM_BUSSTOP | GNETagProperties::Over::TO_BUSSTOP |
434
//GNETagProperties::Over::FROM_TRAINSTOP | GNETagProperties::Over::TO_TRAINSTOP |
435
GNETagProperties::Over::FROM_CONTAINERSTOP | GNETagProperties::Over::TO_CONTAINERSTOP,
436
//GNETagProperties::Over::FROM_CHARGINGSTATION | GNETagProperties::Over::TO_CHARGINGSTATION |
437
//GNETagProperties::Over::FROM_PARKINGAREA | GNETagProperties::Over::TO_PARKINGAREA,
438
GNETagProperties::Conflicts::NO_CONFLICTS,
439
GUIIcon::EMPTY, GUIGlObjectType::GLO_TRANSHIP, SUMO_TAG_PERSONTRIP, "Tranship");
440
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNETranship(GNE_TAG_TRANSHIP_EDGE_EDGE, net)));
441
// tranship (edges)
442
tagProperty = new GNETagProperties(GNE_TAG_TRANSHIP_EDGES, nullptr,
443
GNETagProperties::Type::CONTAINERPLAN,
444
GNETagProperties::Property::NO_PROPERTY,
445
GNETagProperties::Over::CONSECUTIVE_EDGES,
446
GNETagProperties::Conflicts::NO_CONFLICTS,
447
GUIIcon::EMPTY, GUIGlObjectType::GLO_TRANSPORT, SUMO_TAG_PERSONTRIP, "Tranship (edges)");
448
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNETranship(GNE_TAG_TRANSHIP_EDGES, net)));
449
// stop
450
tagProperty = new GNETagProperties(GNE_TAG_CONTAINERSTOPS, nullptr,
451
GNETagProperties::Type::CONTAINERPLAN,
452
GNETagProperties::Property::NO_PROPERTY,
453
GNETagProperties::Over::EDGE | GNETagProperties::Over::BUSSTOP |
454
GNETagProperties::Over::TRAINSTOP | GNETagProperties::Over::CONTAINERSTOP |
455
GNETagProperties::Over::CHARGINGSTATION | GNETagProperties::Over::PARKINGAREA,
456
GNETagProperties::Conflicts::NO_CONFLICTS,
457
GUIIcon::EMPTY, GUIGlObjectType::GLO_CONTAINER_STOP, SUMO_TAG_STOP, "Container Stop");
458
myPlanTemplates.push_back(std::make_pair(tagProperty, new GNEStopPlan(GNE_TAG_STOPCONTAINER_EDGE, net)));
459
}
460
461
/****************************************************************************/
462
463