Eclipse SUMO - Simulation of Urban MObility
GNEStopFrame.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 /****************************************************************************/
18 // The Widget for add Stops elements
19 /****************************************************************************/
20 #include <config.h>
21 
22 #include <netedit/GNENet.h>
23 #include <netedit/GNEViewNet.h>
25 
26 #include "GNEStopFrame.h"
27 
28 // ===========================================================================
29 // method definitions
30 // ===========================================================================
31 
32 // ---------------------------------------------------------------------------
33 // GNEStopFrame::HelpCreation - methods
34 // ---------------------------------------------------------------------------
35 
37  MFXGroupBoxModule(StopFrameParent, TL("Help")),
38  myStopFrameParent(StopFrameParent) {
40 }
41 
42 
44 
45 
46 void
48  // first update help creation
49  updateHelpCreation();
50  // show module
51  show();
52 }
53 
54 
55 void
57  hide();
58 }
59 
60 
61 void
63  // create information label
64  std::ostringstream information;
65  // set text depending of selected Stop type
66  if (myStopFrameParent->myStopTagSelector->getCurrentTemplateAC()) {
67  switch (myStopFrameParent->myStopTagSelector->getCurrentTemplateAC()->getTagProperty().getTag()) {
70  information
71  << "- " << TL("Shift+Click to select parent") << "\n"
72  << "- " << TL("Click over a bus stop to create a stop.");
73  break;
76  information
77  << "- " << TL("Shift+Click to select parent") << "\n"
78  << "- " << TL("Click over a train stop to create a stop.");
79  break;
82  information
83  << "- " << TL("Shift+Click to select parent") << "\n"
84  << "- " << TL("Click over a container stop to create a stop.");
85  break;
88  information
89  << "- " << TL("Shift+Click to select parent") << "\n"
90  << "- " << TL("Click over a charging station to create a stop.");
91  break;
94  information
95  << "- " << TL("Shift+Click to select parent") << "\n"
96  << "- " << TL("Click over a parking area to create a stop.");
97  break;
98  case GNE_TAG_STOP_LANE:
100  information
101  << "- " << TL("Shift+Click to select parent") << "\n"
102  << "- " << TL("Click over a lane to create a stop.");
103  break;
104  default:
105  information
106  << "- " << TL("No stop parents in current network.");
107  break;
108  }
109  }
110  // set information label
111  myInformationLabel->setText(information.str().c_str());
112 }
113 
114 // ---------------------------------------------------------------------------
115 // GNEStopFrame - methods
116 // ---------------------------------------------------------------------------
117 
119  GNEFrame(viewParent, viewNet, TL("Stops")),
120  myRouteHandler("", viewNet->getNet(), true, false),
121  myStopParentBaseObject(new CommonXMLStructure::SumoBaseObject(nullptr)) {
122 
123  // Create Stop parent selector
124  myStopParentSelector = new GNEDemandElementSelector(this, {GNETagProperties::TagType::VEHICLE, GNETagProperties::TagType::ROUTE});
125 
126  // Create item Selector module for Stops
127  myStopTagSelector = new GNETagSelector(this, GNETagProperties::TagType::VEHICLESTOP, GNE_TAG_STOP_LANE);
128 
129  // Create Stop parameters
131 
132  // Create Netedit parameter
134 
135  // Create Help Creation Module
136  myHelpCreation = new HelpCreation(this);
137 
138  // refresh myStopParentMatchBox
140 }
141 
142 
144  delete myStopParentBaseObject;
145 }
146 
147 
148 void
150  // first check if stop frame modules can be shown
151  bool validStopParent = false;
152  // check if at least there an item that supports an stop
153  for (auto i = myStopParentSelector->getAllowedTags().begin(); (i != myStopParentSelector->getAllowedTags().end()) && (validStopParent == false); i++) {
154  if (myViewNet->getNet()->getAttributeCarriers()->getDemandElements().at(*i).size() > 0) {
155  validStopParent = true;
156  }
157  }
158  // show or hide modules depending of validStopParent
159  if (validStopParent) {
160  // refresh tag selector
162  // refresh vType selector
164  // refresh tag selector
166  // show
169  } else {
170  // hide modules (except help creation)
175  // show help creation module
177  }
178  // reset last position
180  // show frame
181  GNEFrame::show();
182 }
183 
184 
185 bool
187  // first check stop type
188  if (myStopTagSelector->getCurrentTemplateAC() == nullptr) {
189  WRITE_WARNING(TL("Selected Stop type isn't valid."));
190  return false;
191  }
192  // check if we're selecting a new stop parent
193  if (mouseButtonKeyPressed.shiftKeyPressed()) {
194  if (viewObjects.getDemandElementFront() &&
197  WRITE_WARNINGF(TL("Selected % '%' as stop parent."), viewObjects.getDemandElementFront()->getTagStr(), viewObjects.getDemandElementFront()->getID());
198  return true;
199  } else {
200  WRITE_WARNING(TL("Selected Stop parent isn't valid."));
201  return false;
202  }
203  } else {
204  // now check if stop parent selector is valid
205  if (myStopParentSelector->getCurrentDemandElement() == nullptr) {
206  WRITE_WARNING(TL("Current selected Stop parent isn't valid."));
207  return false;
208  }
209  // create stop base object
211  viewObjects.getLaneFront(), viewObjects.getAdditionalFront());
214  myStopParentBaseObject->getSumoBaseObjectChildren().front()->getStopParameter());
215  // show all trips
218  } else {
220  }
221  // stop successfully created, then return true
222  return true;
223  } else {
224  return false;
225  }
226  }
227 }
228 
229 bool
230 GNEStopFrame::getStopParameter(const SumoXMLTag stopTag, const GNELane* lane, const GNEAdditional* stoppingPlace) {
231  // first clear containers
234  // declare stop parameters
236  // first check that current selected Stop is valid
237  if (stopTag == SUMO_TAG_NOTHING) {
238  WRITE_WARNING(TL("Current selected Stop type isn't valid."));
239  return false;
240  } else if ((stopTag == GNE_TAG_STOP_LANE) || (stopTag == GNE_TAG_WAYPOINT_LANE)) {
241  if (lane) {
242  stop.lane = lane->getID();
243  if ((stopTag == GNE_TAG_WAYPOINT_LANE) && (stop.speed == 0)) {
244  stop.speed = lane->getSpeed();
245  }
246  } else {
247  WRITE_WARNING("Click over a " + toString(SUMO_TAG_LANE) + " to create a stop placed in a " + toString(SUMO_TAG_LANE));
248  return false;
249  }
250  } else if ((stopTag == GNE_TAG_STOPPERSON_EDGE) || (stopTag == GNE_TAG_STOPCONTAINER_EDGE)) {
251  if (lane) {
252  stop.edge = lane->getParentEdge()->getID();
254  } else {
255  WRITE_WARNING("Click over a " + toString(SUMO_TAG_EDGE) + " to create a stop placed in a " + toString(SUMO_TAG_EDGE));
256  return false;
257  }
258  } else if (stoppingPlace) {
259  if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_BUS_STOP) {
260  if ((stopTag != GNE_TAG_STOP_BUSSTOP) && (stopTag != GNE_TAG_WAYPOINT_BUSSTOP) && (stopTag != GNE_TAG_STOPPERSON_BUSSTOP)) {
261  WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
262  return false;
263  } else {
264  stop.busstop = stoppingPlace->getID();
266  if ((stopTag == GNE_TAG_WAYPOINT_BUSSTOP) && (stop.speed == 0)) {
267  stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
268  }
269  stop.startPos = 0;
270  stop.endPos = 0;
271  }
272  } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_TRAIN_STOP) {
273  if ((stopTag != GNE_TAG_STOP_TRAINSTOP) && (stopTag != GNE_TAG_WAYPOINT_TRAINSTOP)) {
274  WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
275  return false;
276  } else {
277  stop.busstop = stoppingPlace->getID();
279  if ((stopTag == GNE_TAG_WAYPOINT_TRAINSTOP) && (stop.speed == 0)) {
280  stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
281  }
282  stop.startPos = 0;
283  stop.endPos = 0;
284  }
285  } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_CONTAINER_STOP) {
286  if ((stopTag != GNE_TAG_STOP_CONTAINERSTOP) && (stopTag != GNE_TAG_WAYPOINT_CONTAINERSTOP)) {
287  WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
288  return false;
289  } else {
290  stop.containerstop = stoppingPlace->getID();
292  if ((stopTag == GNE_TAG_WAYPOINT_CONTAINERSTOP) && (stop.speed == 0)) {
293  stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
294  }
295  stop.startPos = 0;
296  stop.endPos = 0;
297  }
298  } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_CHARGING_STATION) {
299  if ((stopTag != GNE_TAG_STOP_CHARGINGSTATION) && (stopTag != GNE_TAG_WAYPOINT_CHARGINGSTATION)) {
300  WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
301  return false;
302  } else {
303  stop.chargingStation = stoppingPlace->getID();
305  if ((stopTag == GNE_TAG_WAYPOINT_CHARGINGSTATION) && (stop.speed == 0)) {
306  stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
307  }
308  stop.startPos = 0;
309  stop.endPos = 0;
310  }
311  } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_PARKING_AREA) {
312  if ((stopTag != GNE_TAG_STOP_PARKINGAREA) && (stopTag != GNE_TAG_WAYPOINT_PARKINGAREA)) {
313  WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
314  return false;
315  } else {
316  stop.parkingarea = stoppingPlace->getID();
318  if ((stopTag == GNE_TAG_WAYPOINT_PARKINGAREA) && (stop.speed == 0)) {
319  stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
320  }
321  stop.startPos = 0;
322  stop.endPos = 0;
323  }
324  }
325  } else {
326  if ((stopTag == GNE_TAG_STOP_BUSSTOP) || (stopTag == GNE_TAG_WAYPOINT_BUSSTOP)) {
327  WRITE_WARNING("Click over a " + toString(GNE_TAG_STOP_BUSSTOP) + " to create a stop placed in a " + toString(GNE_TAG_STOP_BUSSTOP));
328  } else if ((stopTag == GNE_TAG_STOP_TRAINSTOP) || (stopTag == GNE_TAG_WAYPOINT_TRAINSTOP)) {
329  WRITE_WARNING("Click over a " + toString(GNE_TAG_STOP_TRAINSTOP) + " to create a stop placed in a " + toString(GNE_TAG_STOP_TRAINSTOP));
330  } else if ((stopTag == GNE_TAG_STOP_CONTAINERSTOP) || (stopTag == GNE_TAG_WAYPOINT_CONTAINERSTOP)) {
331  WRITE_WARNING("Click over a " + toString(SUMO_TAG_CONTAINER_STOP) + " to create a stop placed in a " + toString(SUMO_TAG_CONTAINER_STOP));
332  } else if ((stopTag == GNE_TAG_STOP_CHARGINGSTATION) || (stopTag == GNE_TAG_WAYPOINT_CHARGINGSTATION)) {
333  WRITE_WARNING("Click over a " + toString(SUMO_TAG_CHARGING_STATION) + " to create a stop placed in a " + toString(SUMO_TAG_CHARGING_STATION));
334  } else if ((stopTag == GNE_TAG_STOP_PARKINGAREA) || (stopTag == GNE_TAG_WAYPOINT_PARKINGAREA)) {
335  WRITE_WARNING("Click over a " + toString(SUMO_TAG_PARKING_AREA) + " to create a stop placed in a " + toString(SUMO_TAG_PARKING_AREA));
336  } else if (stopTag == GNE_TAG_STOPPERSON_BUSSTOP) {
337  WRITE_WARNING("Click over a " + toString(GNE_TAG_STOP_BUSSTOP) + " to create a person stop placed in a " + toString(GNE_TAG_STOP_BUSSTOP));
338  } else if (stopTag == GNE_TAG_STOPPERSON_TRAINSTOP) {
339  WRITE_WARNING("Click over a " + toString(GNE_TAG_STOP_TRAINSTOP) + " to create a person stop placed in a " + toString(GNE_TAG_STOP_TRAINSTOP));
340  }
341  return false;
342  }
343  // check if stop attributes are valid
346  return false;
347  }
348  // get stop parent
350  // if stopParent is a route, check that stop is placed over a route's edge
351  if (stopParent->isRoute() && lane) {
352  bool found = false;
353  for (const auto& edge : stopParent->getParentEdges()) {
354  if (edge == lane->getParentEdge()) {
355  found = true;
356  }
357  }
358  if (!found) {
359  WRITE_WARNING(TL("Stop must be placed over a route's edge"));
360  return false;
361  }
362  }
363  // same if stoParent is a vehicle/flow with embedded route
364  if (stopParent->getChildDemandElements().size() > 0 && stopParent->getChildDemandElements().front()->getTagProperty().isRoute() && lane) {
365  bool found = false;
366  for (const auto& edge : stopParent->getChildDemandElements().front()->getParentEdges()) {
367  if (edge == lane->getParentEdge()) {
368  found = true;
369  }
370  }
371  if (!found) {
372  WRITE_WARNING(TL("Stop must be placed over an embedded route's edge"));
373  return false;
374  }
375  }
376  // set parent tag and id
379  // add route, from and to attributes
380  if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_ROUTE)) {
382  }
383  if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_FROM)) {
385  }
386  if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_TO)) {
388  }
389  // create stop object
391  // get stop attributes
392  myStopAttributes->getAttributesAndValues(stopBaseObject, true);
393  // add netedit values
394  if (!stop.edge.empty() || !stop.lane.empty()) {
395  myNeteditAttributes->getNeteditAttributesAndValues(stopBaseObject, lane);
396  // check if start position can be parsed
397  if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_STARTPOS)) {
398  stop.startPos = stopBaseObject->getDoubleAttribute(SUMO_ATTR_STARTPOS);
400  } else {
401  stop.startPos = INVALID_DOUBLE;
402  }
403  // check if end position can be parsed
404  if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_ENDPOS)) {
405  stop.endPos = stopBaseObject->getDoubleAttribute(SUMO_ATTR_ENDPOS);
406  stop.parametersSet |= STOP_END_SET;
407  } else {
408  stop.endPos = INVALID_DOUBLE;
409  }
410  }
411  // obtain friendly position
412  if (stopBaseObject->hasBoolAttribute(SUMO_ATTR_FRIENDLY_POS)) {
413  stop.friendlyPos = stopBaseObject->getBoolAttribute(SUMO_ATTR_FRIENDLY_POS);
414  }
415  // obtain posLat
416  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_POSITION_LAT)) {
417  if (GNEAttributeCarrier::canParse<double>(stopBaseObject->getStringAttribute(SUMO_ATTR_POSITION_LAT))) {
418  stop.posLat = GNEAttributeCarrier::parse<double>(stopBaseObject->getStringAttribute(SUMO_ATTR_POSITION_LAT));
420  } else {
421  stop.posLat = INVALID_DOUBLE;
422  }
423  }
424  // obtain actType
425  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_ACTTYPE)) {
426  stop.actType = stopBaseObject->getStringAttribute(SUMO_ATTR_ACTTYPE);
427  }
428  // fill rest of parameters depending if it was edited
429  if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_DURATION)) {
430  stop.duration = stopBaseObject->getTimeAttribute(SUMO_ATTR_DURATION);
431  if (stop.duration >= 0) {
433  }
434  }
435  if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_UNTIL)) {
436  stop.until = stopBaseObject->getTimeAttribute(SUMO_ATTR_UNTIL);
437  if (stop.until >= 0) {
439  }
440  }
441  if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_EXTENSION)) {
442  stop.extension = stopBaseObject->getTimeAttribute(SUMO_ATTR_EXTENSION);
443  if (stop.extension >= 0) {
445  }
446  }
447  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_TRIGGERED)) {
448  if ((stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "person") || (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "true")) {
450  stop.triggered = true;
451  } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "container") {
453  stop.containerTriggered = true;
454  } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "join") {
456  stop.joinTriggered = true;
457  }
458  }
459  if (stopBaseObject->hasStringListAttribute(SUMO_ATTR_EXPECTED)) {
460  const auto expected = stopBaseObject->getStringListAttribute(SUMO_ATTR_EXPECTED);
461  if (expected.size() > 0) {
462  if (stop.triggered) {
463  for (const auto& id : expected) {
464  stop.awaitedPersons.insert(id);
465  }
467  } else if (stop.containerTriggered) {
468  for (const auto& id : expected) {
469  stop.awaitedContainers.insert(id);
470  }
472  }
473  }
474  }
475  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_JOIN)) {
476  stop.join = stopBaseObject->getStringAttribute(SUMO_ATTR_JOIN);
477  if (stop.join.size() > 0) {
479  }
480  }
481  if (stopBaseObject->hasStringListAttribute(SUMO_ATTR_PERMITTED)) {
482  const auto permitted = stopBaseObject->getStringListAttribute(SUMO_ATTR_PERMITTED);
483  if (permitted.size() > 0) {
485  for (const auto& permit : permitted) {
486  stop.permitted.insert(permit);
487  }
488  }
489  }
490  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_PARKING)) {
491  if (stopBaseObject->getStringAttribute(SUMO_ATTR_PARKING) == "true") {
494  } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_PARKING) == "opportunistic") {
497  } else {
499  }
500  }
501  if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_JUMP)) {
502  stop.jump = stopBaseObject->getTimeAttribute(SUMO_ATTR_JUMP);
503  if (stop.jump >= 0) {
505  }
506  }
507  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_SPLIT)) {
508  stop.split = stopBaseObject->getStringAttribute(SUMO_ATTR_SPLIT);
509  if (stop.split.size() > 0) {
511  }
512  }
513  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_TRIP_ID)) {
514  stop.tripId = stopBaseObject->getStringAttribute(SUMO_ATTR_TRIP_ID);
515  if (stop.tripId.size() > 0) {
517  }
518  }
519  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_LINE)) {
520  stop.line = stopBaseObject->getStringAttribute(SUMO_ATTR_LINE);
521  if (stop.line.size() > 0) {
523  }
524  }
525  if (stopBaseObject->hasBoolAttribute(SUMO_ATTR_ONDEMAND)) {
526  stop.onDemand = stopBaseObject->getBoolAttribute(SUMO_ATTR_ONDEMAND);
527  if (stop.onDemand) {
529  }
530  }
531  if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_SPEED) && (stopBaseObject->getDoubleAttribute(SUMO_ATTR_SPEED) > 0)) {
532  stop.speed = stopBaseObject->getDoubleAttribute(SUMO_ATTR_SPEED);
533  if (stop.speed > 0) {
535  }
536  }
537  if (stopBaseObject->hasStringAttribute(SUMO_ATTR_INDEX)) {
538  if (stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX) == "fit") {
539  stop.index = STOP_INDEX_FIT;
540  } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX) == "end") {
541  stop.index = STOP_INDEX_END;
542  } else if (GNEAttributeCarrier::canParse<int>(stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX))) {
543  stop.index = GNEAttributeCarrier::parse<int>(stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX));
544  } else {
545  stop.index = STOP_INDEX_END;
546  }
547  } else {
548  stop.index = STOP_INDEX_END;
549  }
550  // refresh stop attributes
552  // set tag
553  stopBaseObject->setTag(stopTag);
554  stopBaseObject->setStopParameter(stop);
555  return true;
556 }
557 
558 
561  return myStopParentSelector;
562 }
563 
564 // ===========================================================================
565 // protected
566 // ===========================================================================
567 
568 void
571  // show Stop type selector module
575  // reset last position
577  } else {
578  // hide all modules if stop parent isn't valid
582  }
583 }
584 
585 
586 void
588  // show or hide modules depending if current selected stop parent is valid
592  // show modules
596  } else {
600  }
601  } else {
602  // hide modules
607  }
608 }
609 
610 
611 /****************************************************************************/
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
Definition: GUIDesigns.h:285
#define WRITE_WARNINGF(...)
Definition: MsgHandler.h:296
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:295
#define TL(string)
Definition: MsgHandler.h:315
const int STOP_DURATION_SET
const int STOP_INDEX_END
const int STOP_POSLAT_SET
const int STOP_EXPECTED_SET
const int STOP_SPEED_SET
const int STOP_UNTIL_SET
const int STOP_LINE_SET
const int STOP_PARKING_SET
const int STOP_TRIP_ID_SET
const int STOP_PERMITTED_SET
const int STOP_SPLIT_SET
const int STOP_START_SET
const int STOP_JOIN_SET
const int STOP_CONTAINER_TRIGGER_SET
const int STOP_EXTENSION_SET
const int STOP_INDEX_FIT
const int STOP_TRIGGER_SET
const int STOP_JUMP_SET
const int STOP_ONDEMAND_SET
const int STOP_END_SET
const int STOP_EXPECTED_CONTAINERS_SET
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_WAYPOINT_PARKINGAREA
@ GNE_TAG_STOP_PARKINGAREA
stop placed over a parking area
@ SUMO_TAG_CHARGING_STATION
A Charging Station.
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ GNE_TAG_STOP_BUSSTOP
stop placed over a busStop
@ GNE_TAG_WAYPOINT_TRAINSTOP
@ GNE_TAG_WAYPOINT_CONTAINERSTOP
@ GNE_TAG_STOPCONTAINER_EDGE
@ GNE_TAG_WAYPOINT_BUSSTOP
@ SUMO_TAG_BUS_STOP
A bus stop.
@ GNE_TAG_WAYPOINT_CHARGINGSTATION
@ GNE_TAG_STOPPERSON_BUSSTOP
@ GNE_TAG_STOP_CONTAINERSTOP
stop placed over a containerStop
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_TRAIN_STOP
A train stop (alias for bus stop)
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ GNE_TAG_WAYPOINT_LANE
@ GNE_TAG_STOP_LANE
stop placed over a lane
@ GNE_TAG_STOPPERSON_TRAINSTOP
@ GNE_TAG_STOP_TRAINSTOP
stop placed over a trainStop
@ GNE_TAG_STOP_CHARGINGSTATION
stop placed over a charging station
@ GNE_TAG_STOPPERSON_EDGE
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_STARTPOS
@ SUMO_ATTR_PARKING
@ SUMO_ATTR_EXTENSION
@ SUMO_ATTR_SPEED
@ SUMO_ATTR_ENDPOS
@ SUMO_ATTR_SPLIT
@ SUMO_ATTR_ACTTYPE
@ SUMO_ATTR_POSITION_LAT
@ SUMO_ATTR_EXPECTED
@ SUMO_ATTR_LINE
@ SUMO_ATTR_ONDEMAND
@ SUMO_ATTR_INDEX
@ SUMO_ATTR_TRIP_ID
@ SUMO_ATTR_TO
@ SUMO_ATTR_FROM
@ SUMO_ATTR_PERMITTED
@ SUMO_ATTR_JOIN
@ SUMO_ATTR_JUMP
@ SUMO_ATTR_FRIENDLY_POS
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_ID
@ SUMO_ATTR_UNTIL
@ SUMO_ATTR_TRIGGERED
@ SUMO_ATTR_DURATION
const double INVALID_DOUBLE
invalid double
Definition: StdDefs.h:64
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
std::string toTrainStop
to trainStop
std::string toParkingArea
to parkingArea
std::string toChargingStation
to chargingStation
std::string toContainerStop
to containerStop
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
bool hasTimeAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given time attribute
SumoXMLTag getTag() const
get XML myTag
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
add string attribute into current SumoBaseObject node
void setStopParameter(const SUMOVehicleParameter::Stop &stopParameter)
add stop parameters
double getDoubleAttribute(const SumoXMLAttr attr) const
get double attribute
const std::vector< std::string > & getStringListAttribute(const SumoXMLAttr attr) const
get string list attribute
bool hasStringListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given string list attribute
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEAdditional.h:49
const std::string getID() const
get ID (all Attribute Carriers have one)
const std::string & getTagStr() const
get tag assigned to this object in string format
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
void getAttributesAndValues(CommonXMLStructure::SumoBaseObject *baseObject, bool includeAll) const
get attributes and their values
bool areValuesValid() const
check if parameters of attributes are valid
void showAttributesCreatorModule(GNEAttributeCarrier *templateAC, const std::vector< SumoXMLAttr > &hiddenAttributes)
show GNEAttributesCreator modul
void hideAttributesCreatorModule()
hide group box
void showWarningMessage(std::string extra="") const
show warning message with information about non-valid attributes
void refreshAttributesCreator()
refresh attribute creator
virtual std::string getAttribute(SumoXMLAttr key) const =0
void showDemandElementSelector()
show demand element selector
void setDemandElement(GNEDemandElement *demandElement)
set current demand element
void refreshDemandElementSelector()
refresh demand element selector
GNEDemandElement * getCurrentDemandElement() const
get current demand element
const std::vector< SumoXMLTag > & getAllowedTags() const
void hideDemandElementSelector()
hide demand element selector
GNEViewNet * myViewNet
FOX need this.
Definition: GNEFrame.h:117
virtual void show()
show Frame
Definition: GNEFrame.cpp:115
virtual void hide()
hide Frame
Definition: GNEFrame.cpp:124
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:46
double getSpeed() const
returns the current speed of lane
Definition: GNELane.cpp:628
GNEEdge * getParentEdge() const
get parent edge
Definition: GNELane.cpp:196
const std::map< SumoXMLTag, std::map< const GUIGlObject *, GNEDemandElement * > > & getDemandElements() const
get demand elements
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:123
void showNeteditAttributesModule(GNEAttributeCarrier *templateAC)
show Netedit attributes modul
void hideNeteditAttributesModule()
hide Netedit attributes modul
bool getNeteditAttributesAndValues(CommonXMLStructure::SumoBaseObject *baseObject, const GNELane *lane) const
fill valuesMap with netedit attributes
bool isRoute() const
check if pathElement is a route
void buildStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const SUMOVehicleParameter::Stop &stopParameters)
build stop
void updateHelpCreation()
update HelpCreation
void showHelpCreation()
show HelpCreation
void hideHelpCreation()
hide HelpCreation
HelpCreation(GNEStopFrame *StopFrameParent)
constructor
MFXDynamicLabel * myInformationLabel
Label with creation information.
Definition: GNEStopFrame.h:70
CommonXMLStructure::SumoBaseObject * myStopParentBaseObject
stop parent base object
Definition: GNEStopFrame.h:110
void show()
show Frame
GNERouteHandler myRouteHandler
route handler
Definition: GNEStopFrame.h:107
bool getStopParameter(const SumoXMLTag stopTag, const GNELane *lane, const GNEAdditional *stoppingPlace)
get stop parameters
~GNEStopFrame()
Destructor.
CommonXMLStructure::PlanParameters myPlanParameters
plan parameters
Definition: GNEStopFrame.h:113
GNEStopFrame(GNEViewParent *viewParent, GNEViewNet *viewNet)
Constructor.
GNEDemandElementSelector * myStopParentSelector
Stop parent selectors.
Definition: GNEStopFrame.h:116
void demandElementSelected()
selected demand element in DemandElementSelector
GNETagSelector * myStopTagSelector
stop tag selector selector (used to select diffent kind of Stops)
Definition: GNEStopFrame.h:119
HelpCreation * myHelpCreation
Help creation.
Definition: GNEStopFrame.h:128
void tagSelected()
Tag selected in GNETagSelector.
GNEAttributesCreator * myStopAttributes
internal Stop attributes
Definition: GNEStopFrame.h:122
GNEDemandElementSelector * getStopParentSelector() const
get stop parent selector
bool addStop(const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add Stop element
GNENeteditAttributes * myNeteditAttributes
Netedit parameter.
Definition: GNEStopFrame.h:125
const std::string & getTagStr() const
get Tag vinculated with this attribute Property in String Format (used to avoid multiple calls to toS...
bool isVehicle() const
return true if tag correspond to a vehicle element
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
bool isVehicleStop() const
return true if tag correspond to a vehicle stop element
void refreshTagSelector()
refresh tagSelector (used when frameParent is show)
void showTagSelector()
show item selector
GNEAttributeCarrier * getCurrentTemplateAC() const
get current templateAC
void hideTagSelector()
hide item selector
class used to group all variables related with objects under cursor after a click over view
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
GNEAdditional * getAdditionalFront() const
get front additional element or a pointer to nullptr
GNEDemandElement * getDemandElementFront() const
get front demand element or a pointer to nullptr
GNENet * getNet() const
get the net object
void resetLastClickedPosition()
reset last clicked position
Definition: GNEViewNet.cpp:833
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
Definition: GNEViewNet.cpp:741
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:88
void setChecked(bool val, const bool inform=false)
check or uncheck this MFXCheckableButton
A list item which allows for custom coloring.
MFXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
Definition of vehicle stop (position and duration)
std::string edge
The edge to stop at.
ParkingType parking
whether the vehicle is removed from the net while stopping
std::string lane
The lane to stop at.
SUMOTime extension
The maximum time extension for boarding / loading.
bool friendlyPos
enable or disable friendly position (used by netedit)
double speed
the speed at which this stop counts as reached (waypoint mode)
std::string parkingarea
(Optional) parking area if one is assigned to the stop
std::string split
the id of the vehicle (train portion) that splits of upon reaching this stop
double startPos
The stopping position start.
std::string line
the new line id of the trip within a cyclical public transport route
double posLat
the lateral offset when stopping
bool onDemand
whether the stop may be skipped
std::string chargingStation
(Optional) charging station if one is assigned to the stop
std::set< std::string > permitted
IDs of persons or containers that may board/load at this stop.
int parametersSet
Information for the output which parameter were set.
int index
at which position in the stops list
SUMOTime jump
transfer time if there shall be a jump from this stop to the next route edge
std::string join
the id of the vehicle (train portion) to which this vehicle shall be joined
SUMOTime until
The time at which the vehicle may continue its journey.
std::string actType
act Type (only used by Persons) (used by netedit)
bool triggered
whether an arriving person lets the vehicle continue
double endPos
The stopping position end.
std::set< std::string > awaitedPersons
IDs of persons the vehicle has to wait for until departing.
std::set< std::string > awaitedContainers
IDs of containers the vehicle has to wait for until departing.
std::string busstop
(Optional) bus stop if one is assigned to the stop
bool joinTriggered
whether an joined vehicle lets this vehicle continue
std::string tripId
id of the trip within a cyclical public transport route
std::string containerstop
(Optional) container stop if one is assigned to the stop
bool containerTriggered
whether an arriving container lets the vehicle continue
SUMOTime duration
The stopping duration.
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
class used to group all variables related with mouse buttons and key pressed after certain events
bool shiftKeyPressed() const
check if SHIFT is pressed during current event