Eclipse SUMO - Simulation of Urban MObility
GNEVehicle.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
14 // Representation of vehicles in NETEDIT
15 /****************************************************************************/
16 
17 // ===========================================================================
18 // included modules
19 // ===========================================================================
20 
21 #include <cmath>
23 #include <netbuild/NBNode.h>
24 #include <netedit/GNENet.h>
25 #include <netedit/GNEUndoList.h>
26 #include <netedit/GNEViewNet.h>
27 #include <netedit/GNEViewParent.h>
34 #include <utils/gui/div/GLHelper.h>
39 
40 #include "GNEVehicle.h"
41 #include "GNERouteHandler.h"
42 
43 
44 // ===========================================================================
45 // FOX callback mapping
46 // ===========================================================================
47 FXDEFMAP(GNEVehicle::GNESingleVehiclePopupMenu) GNESingleVehiclePopupMenuMap[] = {
49 };
50 
51 FXDEFMAP(GNEVehicle::GNESelectedVehiclesPopupMenu) GNESelectedVehiclesPopupMenuMap[] = {
53 };
54 
55 // Object implementation
56 FXIMPLEMENT(GNEVehicle::GNESingleVehiclePopupMenu, GUIGLObjectPopupMenu, GNESingleVehiclePopupMenuMap, ARRAYNUMBER(GNESingleVehiclePopupMenuMap))
57 FXIMPLEMENT(GNEVehicle::GNESelectedVehiclesPopupMenu, GUIGLObjectPopupMenu, GNESelectedVehiclesPopupMenuMap, ARRAYNUMBER(GNESelectedVehiclesPopupMenuMap))
58 
59 // ===========================================================================
60 // GNEVehicle::GNESingleVehiclePopupMenu
61 // ===========================================================================
62 
64  GUIGLObjectPopupMenu(app, parent, *vehicle),
65  myVehicle(vehicle),
66  myTransformToVehicle(nullptr),
67  myTransformToVehicleWithEmbeddedRoute(nullptr),
68  myTransformToRouteFlow(nullptr),
69  myTransformToRouteFlowWithEmbeddedRoute(nullptr),
70  myTransformToTrip(nullptr),
71  myTransformToFlow(nullptr) {
72  // build header
73  myVehicle->buildPopupHeader(this, app);
74  // build menu command for center button and copy cursor position to clipboard
75  myVehicle->buildCenterPopupEntry(this);
76  myVehicle->buildPositionCopyEntry(this, false);
77  // buld menu commands for names
78  new FXMenuCommand(this, ("Copy " + myVehicle->getTagStr() + " name to clipboard").c_str(), nullptr, this, MID_COPY_NAME);
79  new FXMenuCommand(this, ("Copy " + myVehicle->getTagStr() + " typed name to clipboard").c_str(), nullptr, this, MID_COPY_TYPED_NAME);
80  new FXMenuSeparator(this);
81  // build selection and show parameters menu
82  myVehicle->getViewNet()->buildSelectionACPopupEntry(this, myVehicle);
83  myVehicle->buildShowParamsPopupEntry(this);
84  // add transform functions only in demand mode
85  if (myVehicle->getViewNet()->getEditModes().currentSupermode == GNE_SUPERMODE_DEMAND) {
86  // Get icons
87  FXIcon* vehicleIcon = GUIIconSubSys::getIcon(ICON_VEHICLE);
88  FXIcon* tripIcon = GUIIconSubSys::getIcon(ICON_TRIP);
89  FXIcon* routeFlowIcon = GUIIconSubSys::getIcon(ICON_ROUTEFLOW);
90  FXIcon* flowIcon = GUIIconSubSys::getIcon(ICON_FLOW);
91  // create menu pane for transform operations
92  FXMenuPane* transformOperation = new FXMenuPane(this);
93  this->insertMenuPaneChild(transformOperation);
94  new FXMenuCascade(this, "transform to", nullptr, transformOperation);
95  // Create menu comands for all transform
96  myTransformToVehicle = new FXMenuCommand(transformOperation, "Vehicle", vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
97  myTransformToVehicleWithEmbeddedRoute = new FXMenuCommand(transformOperation, "Vehicle (embedded route)", vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
98  myTransformToRouteFlow = new FXMenuCommand(transformOperation, "RouteFlow", routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
99  myTransformToRouteFlowWithEmbeddedRoute = new FXMenuCommand(transformOperation, "RouteFlow (embedded route)", routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
100  myTransformToTrip = new FXMenuCommand(transformOperation, "Trip", tripIcon, this, MID_GNE_VEHICLE_TRANSFORM);
101  myTransformToFlow = new FXMenuCommand(transformOperation, "Flow", flowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
102  // check what menu command has to be disabled
103  if (myVehicle->getTagProperty().getTag() == SUMO_TAG_VEHICLE) {
104  if (myVehicle->getParentDemandElements().size() > 1) {
105  myTransformToVehicle->disable();
106  } else {
107  myTransformToVehicleWithEmbeddedRoute->disable();
108  }
109  } else if (myVehicle->getTagProperty().getTag() == SUMO_TAG_ROUTEFLOW) {
110  if (myVehicle->getParentDemandElements().size() > 1) {
111  myTransformToRouteFlow->disable();
112  } else {
113  myTransformToRouteFlowWithEmbeddedRoute->disable();
114  }
115  } else if (myVehicle->getTagProperty().getTag() == SUMO_TAG_TRIP) {
116  myTransformToTrip->disable();
117  } else if (myVehicle->getTagProperty().getTag() == SUMO_TAG_FLOW) {
118  myTransformToFlow->disable();
119  }
120  }
121 }
122 
123 
125 
126 
127 long
128 GNEVehicle::GNESingleVehiclePopupMenu::onCmdTransform(FXObject* obj, FXSelector, void*) {
129  if (obj == myTransformToVehicle) {
130  GNERouteHandler::transformToVehicle(myVehicle, false);
131  } else if (obj == myTransformToVehicleWithEmbeddedRoute) {
132  GNERouteHandler::transformToVehicle(myVehicle, true);
133  } else if (obj == myTransformToRouteFlow) {
134  GNERouteHandler::transformToRouteFlow(myVehicle, false);
135  } else if (obj == myTransformToRouteFlowWithEmbeddedRoute) {
136  GNERouteHandler::transformToRouteFlow(myVehicle, true);
137  } else if (obj == myTransformToTrip) {
139  } else if (obj == myTransformToFlow) {
141  }
142  return 1;
143 }
144 
145 // ===========================================================================
146 // GNEVehicle::GNESelectedVehiclesPopupMenu
147 // ===========================================================================
148 
149 GNEVehicle::GNESelectedVehiclesPopupMenu::GNESelectedVehiclesPopupMenu(GNEVehicle* vehicle, const std::vector<GNEVehicle*>& selectedVehicle, GUIMainWindow& app, GUISUMOAbstractView& parent) :
150  GUIGLObjectPopupMenu(app, parent, *vehicle),
151  mySelectedVehicles(selectedVehicle),
152  myVehicleTag(vehicle->getTagProperty().getTag()),
153  myTransformToVehicle(nullptr),
154  myTransformToVehicleWithEmbeddedRoute(nullptr),
155  myTransformToRouteFlow(nullptr),
156  myTransformToRouteFlowWithEmbeddedRoute(nullptr),
157  myTransformToTrip(nullptr),
158  myTransformToFlow(nullptr),
159  myTransformAllVehiclesToVehicle(nullptr),
160  myTransformAllVehiclesToVehicleWithEmbeddedRoute(nullptr),
161  myTransformAllVehiclesToRouteFlow(nullptr),
162  myTransformAllVehiclesToRouteFlowWithEmbeddedRoute(nullptr),
163  myTransformAllVehiclesToTrip(nullptr),
164  myTransformAllVehiclesToFlow(nullptr) {
165  // build header
166  vehicle->buildPopupHeader(this, app);
167  // build menu command for center button and copy cursor position to clipboard
168  vehicle->buildCenterPopupEntry(this);
169  vehicle->buildPositionCopyEntry(this, false);
170  // buld menu commands for names
171  new FXMenuCommand(this, ("Copy " + vehicle->getTagStr() + " name to clipboard").c_str(), nullptr, this, MID_COPY_NAME);
172  new FXMenuCommand(this, ("Copy " + vehicle->getTagStr() + " typed name to clipboard").c_str(), nullptr, this, MID_COPY_TYPED_NAME);
173  new FXMenuSeparator(this);
174  // build selection and show parameters menu
175  vehicle->getViewNet()->buildSelectionACPopupEntry(this, vehicle);
176  vehicle->buildShowParamsPopupEntry(this);
177  // add transform functions only in demand mode
179  // Get icons
180  FXIcon* vehicleIcon = GUIIconSubSys::getIcon(ICON_VEHICLE);
181  FXIcon* tripIcon = GUIIconSubSys::getIcon(ICON_TRIP);
182  FXIcon* routeFlowIcon = GUIIconSubSys::getIcon(ICON_ROUTEFLOW);
183  FXIcon* flowIcon = GUIIconSubSys::getIcon(ICON_FLOW);
184  // create menu pane for transform operations
185  FXMenuPane* transformOperation = new FXMenuPane(this);
186  this->insertMenuPaneChild(transformOperation);
187  new FXMenuCascade(this, "transform to", nullptr, transformOperation);
188  // Create menu comands for all transform
189  myTransformToVehicle = new FXMenuCommand(transformOperation,
190  ("Vehicles (Only " + vehicle->getTagStr() + ")").c_str(), vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
191  myTransformToVehicleWithEmbeddedRoute = new FXMenuCommand(transformOperation,
192  ("Vehicles (embedded route, only " + vehicle->getTagStr() + ")").c_str(), vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
193  myTransformToRouteFlow = new FXMenuCommand(transformOperation,
194  ("RouteFlows (Only " + vehicle->getTagStr() + ")").c_str(), routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
195  myTransformToRouteFlowWithEmbeddedRoute = new FXMenuCommand(transformOperation,
196  ("RouteFlows (embedded route, only " + vehicle->getTagStr() + ")").c_str(), routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
197  myTransformToTrip = new FXMenuCommand(transformOperation,
198  ("Trips (Only " + vehicle->getTagStr() + ")").c_str(), tripIcon, this, MID_GNE_VEHICLE_TRANSFORM);
199  myTransformToFlow = new FXMenuCommand(transformOperation,
200  ("Flows (Only " + vehicle->getTagStr() + ")").c_str(), flowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
201  // create separator
202  new FXMenuSeparator(transformOperation);
203  // Create menu comands for all transform all vehicles
204  myTransformAllVehiclesToVehicle = new FXMenuCommand(transformOperation, "Vehicles", vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
205  myTransformAllVehiclesToVehicleWithEmbeddedRoute = new FXMenuCommand(transformOperation, "Vehicles (embedded route)", vehicleIcon, this, MID_GNE_VEHICLE_TRANSFORM);
206  myTransformAllVehiclesToRouteFlow = new FXMenuCommand(transformOperation, "RouteFlows", routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
207  myTransformAllVehiclesToRouteFlowWithEmbeddedRoute = new FXMenuCommand(transformOperation, "RouteFlows (embedded route)", routeFlowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
208  myTransformAllVehiclesToTrip = new FXMenuCommand(transformOperation, "Trips", tripIcon, this, MID_GNE_VEHICLE_TRANSFORM);
209  myTransformAllVehiclesToFlow = new FXMenuCommand(transformOperation, "Flows", flowIcon, this, MID_GNE_VEHICLE_TRANSFORM);
210  }
211 }
212 
213 
215 
216 
217 long
219  // iterate over all selected vehicles
220  for (const auto& i : mySelectedVehicles) {
221  if ((obj == myTransformToVehicle) &&
222  (i->getTagProperty().getTag() == myVehicleTag)) {
224  } else if ((obj == myTransformToVehicleWithEmbeddedRoute) &&
225  (i->getTagProperty().getTag() == myVehicleTag)) {
227  } else if ((obj == myTransformToRouteFlow) &&
228  (i->getTagProperty().getTag() == myVehicleTag)) {
230  } else if ((obj == myTransformToRouteFlowWithEmbeddedRoute) &&
231  (i->getTagProperty().getTag() == myVehicleTag)) {
233  } else if ((obj == myTransformToTrip) &&
234  (i->getTagProperty().getTag() == myVehicleTag)) {
236  } else if ((obj == myTransformToFlow) &&
237  (i->getTagProperty().getTag() == myVehicleTag)) {
239  } else if (obj == myTransformAllVehiclesToVehicle) {
241  } else if (obj == myTransformAllVehiclesToVehicleWithEmbeddedRoute) {
243  } else if (obj == myTransformAllVehiclesToRouteFlow) {
245  } else if (obj == myTransformAllVehiclesToRouteFlowWithEmbeddedRoute) {
247  } else if (obj == myTransformAllVehiclesToTrip) {
249  } else if (obj == myTransformAllVehiclesToFlow) {
251  }
252  }
253  return 1;
254 }
255 
256 // ===========================================================================
257 // member method definitions
258 // ===========================================================================
259 
260 GNEVehicle::GNEVehicle(SumoXMLTag tag, GNEViewNet* viewNet, const std::string& vehicleID, GNEDemandElement* vehicleType, GNEDemandElement* route) :
261  GNEDemandElement(vehicleID, viewNet, (tag == SUMO_TAG_ROUTEFLOW) ? GLO_ROUTEFLOW : GLO_VEHICLE, tag,
262 {}, {}, {}, {}, {vehicleType, route}, {}, {}, {}, {}, {}),
264  // SUMOVehicleParameter ID has to be set manually
265  id = vehicleID;
266  // set manually vtypeID (needed for saving)
267  vtypeid = vehicleType->getID();
268 }
269 
270 
271 GNEVehicle::GNEVehicle(GNEViewNet* viewNet, GNEDemandElement* vehicleType, GNEDemandElement* route, const SUMOVehicleParameter& vehicleParameters) :
272  GNEDemandElement(vehicleParameters.id, viewNet, (vehicleParameters.tag == SUMO_TAG_ROUTEFLOW) ? GLO_ROUTEFLOW : GLO_VEHICLE, vehicleParameters.tag,
273 {}, {}, {}, {}, {vehicleType, route}, {}, {}, {}, {}, {}),
274 SUMOVehicleParameter(vehicleParameters) {
275  // SUMOVehicleParameter ID has to be set manually
276  id = vehicleParameters.id;
277  // set manually vtypeID (needed for saving)
278  vtypeid = vehicleType->getID();
279 }
280 
281 
282 GNEVehicle::GNEVehicle(GNEViewNet* viewNet, GNEDemandElement* vehicleType, const SUMOVehicleParameter& vehicleParameters) :
283  GNEDemandElement(vehicleParameters.id, viewNet, (vehicleParameters.tag == SUMO_TAG_ROUTEFLOW) ? GLO_ROUTEFLOW : GLO_VEHICLE, vehicleParameters.tag,
284 {}, {}, {}, {}, {vehicleType}, {}, {}, {}, {}, {}),
285 SUMOVehicleParameter(vehicleParameters) {
286  // SUMOVehicleParameter ID has to be set manually
287  id = vehicleParameters.id;
288  // reset routeid
289  routeid.clear();
290  // set manually vtypeID (needed for saving)
291  vtypeid = vehicleType->getID();
292 }
293 
294 
295 GNEVehicle::GNEVehicle(SumoXMLTag tag, GNEViewNet* viewNet, const std::string& vehicleID, GNEDemandElement* vehicleType, GNEEdge* fromEdge, GNEEdge* toEdge,
296  const std::vector<GNEEdge*>& via) :
297  GNEDemandElement(vehicleID, viewNet, (tag == SUMO_TAG_FLOW) ? GLO_FLOW : GLO_TRIP, tag, {
298  fromEdge, toEdge
299 }, {}, {}, {}, {vehicleType}, {}, {}, {}, {}, {}),
301  // set via parameter without updating references
302  replaceMiddleParentEdges(this, via, false);
303  // compute vehicle
304  computePath();
305 }
306 
307 
308 GNEVehicle::GNEVehicle(GNEViewNet* viewNet, GNEDemandElement* vehicleType, GNEEdge* fromEdge, GNEEdge* toEdge, const std::vector<GNEEdge*>& via,
309  const SUMOVehicleParameter& vehicleParameters) :
310  GNEDemandElement(vehicleParameters.id, viewNet, (vehicleParameters.tag == SUMO_TAG_FLOW) ? GLO_FLOW : GLO_TRIP, vehicleParameters.tag, {
311  fromEdge, toEdge
312 }, {}, {}, {}, {vehicleType}, {}, {}, {}, {}, {}),
313 SUMOVehicleParameter(vehicleParameters) {
314  // set via parameter without updating references
315  replaceMiddleParentEdges(this, via, false);
316  // compute vehicle
317  computePath();
318 }
319 
320 
322 
323 
324 std::string
326  // obtain depart depending if is a Vehicle, trip or routeFlow
327  std::string departStr;
329  departStr = toString(depart);
330  } else {
331  departStr = getDepart();
332  }
333  // we need to handle depart as a tuple of 20 numbers (format: 000000...00<departTime>)
334  departStr.reserve(20 - departStr.size());
335  // add 0s at the beginning of departStr until we have 20 numbers
336  for (int i = (int)departStr.size(); i < 20; i++) {
337  departStr.insert(departStr.begin(), '0');
338  }
339  return departStr;
340 }
341 
342 
343 void
345  // obtain tag depending if tagProperty has a synonym
347  // attribute VType musn't be written if is DEFAULT_VTYPE_ID
348  if (getParentDemandElements().at(0)->getID() == DEFAULT_VTYPE_ID) {
349  // unset VType parameter
351  // write vehicle attributes (VType will not be written)
352  write(device, OptionsCont::getOptions(), synonymTag);
353  // set VType parameter again
355  } else {
356  // write vehicle attributes, including VType
357  write(device, OptionsCont::getOptions(), synonymTag, getParentDemandElements().at(0)->getID());
358  }
359  // write specific attribute depeding of tag property
361  // write manually route
363  }
364  // write from, to and edge vias
366  // write manually from/to edges (it correspond to fron and back parent edges)
367  device.writeAttr(SUMO_ATTR_FROM, getParentEdges().front()->getID());
368  device.writeAttr(SUMO_ATTR_TO, getParentEdges().back()->getID());
369  // only write via if there isn't empty
370  if (via.size() > 0) {
371  device.writeAttr(SUMO_ATTR_VIA, via);
372  }
373  }
374  // write specific routeFlow/flow attributes
376  // write routeFlow values depending if it was set
379  }
382  }
385  }
388  }
391  }
392  }
393  // write parameters
394  writeParams(device);
395  // write child demand elements associated to this vehicle
396  for (const auto& i : getChildDemandElements()) {
397  i->writeDemandElement(device);
398  }
399  // close vehicle tag
400  device.closeTag();
401 }
402 
403 
404 bool
406  // only trips or flows can have problems
408  // check if from and to are the same edges
409  if ((getParentEdges().size() == 2) && (getParentEdges().at(0) == getParentEdges().at(1))) {
410  return true;
411  }
412  // check if exist at least a connection between every edge
413  for (int i = 1; i < (int)getParentEdges().size(); i++) {
415  return false;
416  }
417  }
418  // there is connections bewteen all edges, then return true
419  return true;
420  } else {
421  return true;
422  }
423 }
424 
425 
426 std::string
428  // only trips or flows can have problems
430  // check if exist at least a connection between every edge
431  for (int i = 1; i < (int)getParentEdges().size(); i++) {
433  return ("Edge '" + getParentEdges().at((int)i - 1)->getID() + "' and edge '" + getParentEdges().at(i)->getID() + "' aren't consecutives");
434  }
435  }
436  // there is connections bewteen all edges, then all ok
437  return "";
438  } else {
439  return "";
440  }
441 }
442 
443 
444 void
446 
447 }
448 
449 
450 GNEEdge*
452  if (getParentDemandElements().size() == 2) {
453  // oobtain edge of route
454  return getParentDemandElements().at(1)->getFromEdge();
455  } else if (getParentEdges().size() > 0) {
456  return getParentEdges().front();
457  } else if (getChildDemandElements().size() > 0) {
458  // obtain edge of embedded route
459  return getChildDemandElements().at(0)->getFromEdge();
460  } else {
461  throw ProcessError("Undefined from edge");
462  }
463 }
464 
465 
466 GNEEdge*
468  if (getParentDemandElements().size() == 2) {
469  // oobtain edge of route
470  return getParentDemandElements().at(1)->getToEdge();
471  } else if (getParentEdges().size() > 0) {
472  return getParentEdges().back();
473  } else if (getChildDemandElements().size() > 0) {
474  // obtain edge of embedded route
475  return getChildDemandElements().at(0)->getToEdge();
476  } else {
477  throw ProcessError("Undefined to edge");
478  }
479 }
480 
481 
484  return getParentDemandElements().front()->getVClass();
485 }
486 
487 
488 const RGBColor&
490  return color;
491 }
492 
493 
494 void
496  // Vehicles cannot be moved
497 }
498 
499 
500 void
502  // Vehicles cannot be moved
503 }
504 
505 
506 void
508  // Vehicles cannot be moved
509 }
510 
511 
512 void
514  // Vehicles cannot be moved
515 }
516 
517 
518 void
520  // declare two pointers for depart and arrival pos lanes
521  double departPosLane = -1;
522  double arrivalPosLane = -1;
523  // check if depart and arrival pos lanes are defiend
525  departPosLane = departPos;
526  }
528  arrivalPosLane = arrivalPos;
529  }
530  // calculate geometry path
531  if (getPathEdges().size() > 0) {
533  getFirstAllowedVehicleLane(), getLastAllowedVehicleLane(), departPosLane, arrivalPosLane);
534  } else {
536  getFirstAllowedVehicleLane(), getLastAllowedVehicleLane(), departPosLane, arrivalPosLane);
537  }
538  // update child demand elementss
539  for (const auto& i : getChildDemandElements()) {
540  i->updateGeometry();
541  }
542 }
543 
544 
545 void
547  // declare two pointers for depart and arrival pos lanes
548  double departPosLane = -1;
549  double arrivalPosLane = -1;
550  // check if depart and arrival pos lanes are defiend
552  departPosLane = departPos;
553  }
555  arrivalPosLane = arrivalPos;
556  }
557  // update geometry path for the given edge
558  GNEGeometry::updateGeometricPath(myDemandElementSegmentGeometry, edge, departPosLane, arrivalPosLane);
559  // update child demand elementss
560  for (const auto& i : getChildDemandElements()) {
561  i->updatePartialGeometry(edge);
562  }
563 }
564 
565 
566 void
568  // calculate route and update routeEdges (only for flows and trips)
570  replacePathEdges(this, getRouteCalculatorInstance()->calculateDijkstraRoute(getParentDemandElements().at(0)->getVClass(), getParentEdges()));
571  }
572  // update geometry
573  updateGeometry();
574 }
575 
576 
577 void
579  // calculate route and update routeEdges (only for flows and trips)
582  }
583  // update geometry
584  updateGeometry();
585 }
586 
587 
588 Position
590  // obtain lane
591  GNELane* lane = getFromEdge()->getLanes().front();
592  // get position depending of lane's length
593  if (lane->getLaneShape().length() < 2.5) {
594  return lane->getLaneShape().front();
595  } else {
596  Position A = lane->getLaneShape().positionAtOffset(2.5);
597  Position B = lane->getLaneShape().positionAtOffset(2.5);
598  // return Middle point
599  return Position((A.x() + B.x()) / 2, (A.y() + B.y()) / 2);
600  }
601 }
602 
603 
607  // obtain all selected vehicles
608  std::vector<GNEDemandElement*> selectedDemandElements = myViewNet->getNet()->retrieveDemandElements(true);
609  std::vector<GNEVehicle*> selectedVehicles;
610  selectedVehicles.reserve(selectedDemandElements.size());
611  for (const auto& i : selectedDemandElements) {
612  if (i->getTagProperty().isVehicle()) {
613  selectedVehicles.push_back(dynamic_cast<GNEVehicle*>(i));
614  }
615  }
616  // return a GNESelectedVehiclesPopupMenu
617  return new GNESelectedVehiclesPopupMenu(this, selectedVehicles, app, parent);
618  } else {
619  // return a GNESingleVehiclePopupMenu
620  return new GNESingleVehiclePopupMenu(this, app, parent);
621  }
622 }
623 
624 
625 std::string
628  return getParentDemandElements().at(1)->getID();
629  } else if ((myTagProperty.getTag() == SUMO_TAG_TRIP) || (myTagProperty.getTag() == SUMO_TAG_FLOW)) {
630  return getParentEdges().front()->getID();
631  } else {
632  throw ProcessError("Invalid vehicle tag");
633  }
634 }
635 
636 
637 Boundary
639  Boundary vehicleBoundary;
640  vehicleBoundary.add(getFromEdge()->getLanes().front()->getLaneShape().front());
641  vehicleBoundary.grow(20);
642  return vehicleBoundary;
643 }
644 
645 
646 void
647 GNEVehicle::splitEdgeGeometry(const double /*splitPosition*/, const GNENetElement* /*originalElement*/, const GNENetElement* /*newElement*/, GNEUndoList* /*undoList*/) {
648  // geometry of this element cannot be splitted
649 }
650 
651 
652 void
654  // only drawn in super mode demand
656  // declare common attributes
657  const double exaggeration = s.vehicleSize.getExaggeration(s, this);
658  const double width = getParentDemandElements().at(0)->getAttributeDouble(SUMO_ATTR_WIDTH);
659  const double length = getParentDemandElements().at(0)->getAttributeDouble(SUMO_ATTR_LENGTH);
660  double vehicleSizeSquared = width * length * exaggeration * width * length * exaggeration;
661  // declare a flag to check if glPushName() / glPopName() has to be added (needed due GNEEdge::drawGL(...))
662  const bool pushName = (myTagProperty.getTag() != SUMO_TAG_FLOW) && (myTagProperty.getTag() != SUMO_TAG_TRIP);
663  // obtain Position an rotation (it depend of their parents)
664  Position vehiclePosition;
665  double vehicleRotation = 0;
666  if ((getParentDemandElements().size() == 2) && (getParentDemandElements().at(1)->getDemandElementSegmentGeometry().size() > 0)) {
667  // obtain position and rotation of first edge route
668  vehiclePosition = getParentDemandElements().at(1)->getDemandElementSegmentGeometry().getFirstPosition();
669  vehicleRotation = getParentDemandElements().at(1)->getDemandElementSegmentGeometry().getFirstRotation();
670  } else if ((getParentEdges().size() > 0) && (myDemandElementSegmentGeometry.size() > 0)) {
671  // obtain position and rotation of segments geometry
674  } else if ((getChildDemandElements().size() > 0) && (getChildDemandElements().at(0)->getDemandElementSegmentGeometry().size() > 0)) {
675  // obtain position and rotation of embedded route
676  vehiclePosition = getChildDemandElements().at(0)->getDemandElementSegmentGeometry().getFirstPosition();
677  vehicleRotation = getChildDemandElements().at(0)->getDemandElementSegmentGeometry().getFirstRotation();
678  }
679  // check that position is valid
680  if (vehiclePosition != Position::INVALID) {
681  // first check if if mouse is enought near to this vehicle to draw it
682  if (s.drawForRectangleSelection && (myViewNet->getPositionInformation().distanceSquaredTo2D(vehiclePosition) >= (vehicleSizeSquared + 2))) {
683  // first push name
684  if (pushName) {
685  glPushName(getGlID());
686  }
687  // push draw matrix
688  glPushMatrix();
689  // translate to drawing position
690  glTranslated(vehiclePosition.x(), vehiclePosition.y(), GLO_ROUTE + getType() + 0.1);
691  glRotated(vehicleRotation, 0, 0, 1);
692  // extra translation needed to draw vehicle over edge (to avoid selecting problems)
693  glTranslated(0, (-1) * length, 0);
694  GLHelper::drawBoxLine(Position(0, 1), 0, 2, 1);
695  // Pop last matrix
696  glPopMatrix();
697  // pop name
698  if (pushName) {
699  glPopName();
700  }
701  } else {
703  // first push name
704  if (pushName) {
705  glPushName(getGlID());
706  }
707  // push draw matrix
708  glPushMatrix();
709  // translate to drawing position
710  glTranslated(vehiclePosition.x(), vehiclePosition.y(), GLO_ROUTE + getType() + 0.1);
711  glRotated(vehicleRotation, 0, 0, 1);
712  // extra translation needed to draw vehicle over edge (to avoid selecting problems)
713  glTranslated(0, (-1) * length, 0);
714  // set lane color
715  setColor(s);
716  double upscaleLength = exaggeration;
717  if ((exaggeration > 1) && (length > 5)) {
718  // reduce the length/width ratio because this is not usefull at high zoom
719  upscaleLength = MAX2(1.0, upscaleLength * (5 + sqrt(length - 5)) / length);
720  }
721  glScaled(exaggeration, upscaleLength, 1);
722  // check if we're drawing in selecting mode
724  // draw vehicle as a box and don't draw the rest of details
726  } else {
727  // draw the vehicle depending of detail level
728  if (s.drawDetail(s.detailSettings.vehicleShapes, exaggeration)) {
730  } else if (s.drawDetail(s.detailSettings.vehicleBoxes, exaggeration)) {
732  } else if (s.drawDetail(s.detailSettings.vehicleTriangles, exaggeration)) {
734  }
735 
736  /*
737  switch (s.vehicleQuality) {
738  case 0:
739  GUIBaseVehicleHelper::drawAction_drawVehicleAsTrianglePlus(width, length);
740  break;
741  case 1:
742  GUIBaseVehicleHelper::drawAction_drawVehicleAsBoxPlus(width, length);
743  break;
744  default:
745  GUIBaseVehicleHelper::drawAction_drawVehicleAsPoly(s, shape, width, length);
746  break;
747  }
748  */
749  // check if min gap has to be drawn
750  if (s.drawMinGap) {
751  const double minGap = -1 * getParentDemandElements().at(0)->getAttributeDouble(SUMO_ATTR_MINGAP);
752  glColor3d(0., 1., 0.);
753  glBegin(GL_LINES);
754  glVertex2d(0., 0);
755  glVertex2d(0., minGap);
756  glVertex2d(-.5, minGap);
757  glVertex2d(.5, minGap);
758  glEnd();
759  }
760  // drawing name at GLO_MAX fails unless translating z
761  glTranslated(0, MIN2(length / 2, double(5)), -getType());
762  glScaled(1 / exaggeration, 1 / upscaleLength, 1);
763  glRotated(-1 * vehicleRotation, 0, 0, 1);
765  // draw line
766  if (s.vehicleName.show && line != "") {
767  glTranslated(0, 0.6 * s.vehicleName.scaledSize(s.scale), 0);
768  GLHelper::drawTextSettings(s.vehicleName, "line:" + line, Position(0, 0), s.scale, s.angle);
769  }
770  }
771  // pop draw matrix
772  glPopMatrix();
773  // check if dotted contour has to be drawn
774  if (myViewNet->getDottedAC() == this) {
775  GLHelper::drawShapeDottedContourRectangle(s, getType(), vehiclePosition, width, length, vehicleRotation, 0, length / (-2));
776  }
777  // pop name
778  if (pushName) {
779  glPopName();
780  }
781  }
782  }
783  }
784 }
785 
786 
787 void
789  if (!myViewNet) {
790  throw ProcessError("ViewNet cannot be nullptr");
791  } else {
793  // add object of list into selected objects
795  if (changeFlag) {
796  mySelected = true;
797  }
798  }
799 }
800 
801 
802 void
804  if (!myViewNet) {
805  throw ProcessError("ViewNet cannot be nullptr");
806  } else {
808  // remove object of list of selected objects
810  if (changeFlag) {
811  mySelected = false;
812 
813  }
814  }
815 }
816 
817 
818 std::string
820  // declare string error
821  std::string error;
822  switch (key) {
823  case SUMO_ATTR_ID:
824  return getDemandElementID();
825  case SUMO_ATTR_TYPE:
826  return getParentDemandElements().at(0)->getID();
827  case SUMO_ATTR_COLOR:
828  if (wasSet(VEHPARS_COLOR_SET)) {
829  return toString(color);
830  } else {
832  }
835  return getDepartLane();
836  } else {
838  }
839  case SUMO_ATTR_DEPARTPOS:
841  return getDepartPos();
842  } else {
844  }
847  return getDepartSpeed();
848  } else {
850  }
853  return getArrivalLane();
854  } else {
856  }
859  return getArrivalPos();
860  } else {
862  }
865  return getArrivalSpeed();
866  } else {
868  }
869  case SUMO_ATTR_LINE:
870  if (wasSet(VEHPARS_LINE_SET)) {
871  return line;
872  } else {
874  }
877  return toString(personNumber);
878  } else {
880  }
883  return toString(containerNumber);
884  } else {
886  }
887  case SUMO_ATTR_REROUTE:
889  return "true";
890  } else {
891  return "false";
892  }
895  return getDepartPosLat();
896  } else {
898  }
901  return getArrivalPosLat();
902  } else {
904  }
905  // Specific of vehicles
906  case SUMO_ATTR_DEPART:
907  return toString(depart);
908  case SUMO_ATTR_ROUTE:
909  if (getParentDemandElements().size() == 2) {
910  return getParentDemandElements().at(1)->getID();
911  } else {
912  return "";
913  }
914  // Specific of Trips
915  case SUMO_ATTR_FROM:
916  return getParentEdges().front()->getID();
917  case SUMO_ATTR_TO:
918  return getParentEdges().back()->getID();
919  case SUMO_ATTR_VIA:
920  return toString(via);
921  // Specific of routeFlows
922  case SUMO_ATTR_BEGIN:
923  return time2string(depart);
924  case SUMO_ATTR_END:
925  return time2string(repetitionEnd);
927  return toString(3600 / STEPS2TIME(repetitionOffset));
928  case SUMO_ATTR_PERIOD:
930  case SUMO_ATTR_PROB:
932  case SUMO_ATTR_NUMBER:
933  return toString(repetitionNumber);
934  //
935  case GNE_ATTR_SELECTED:
937  case GNE_ATTR_PARAMETERS:
938  return getParametersStr();
939  default:
940  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
941  }
942 }
943 
944 
945 double
947  return 0;
948 }
949 
950 
951 void
952 GNEVehicle::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
953  if (value == getAttribute(key)) {
954  return; //avoid needless changes, later logic relies on the fact that attributes have changed
955  }
956  switch (key) {
957  case SUMO_ATTR_ID:
958  case SUMO_ATTR_TYPE:
959  case SUMO_ATTR_COLOR:
961  case SUMO_ATTR_DEPARTPOS:
966  case SUMO_ATTR_LINE:
969  case SUMO_ATTR_REROUTE:
972  // Specific of vehicles
973  case SUMO_ATTR_DEPART:
974  case SUMO_ATTR_ROUTE:
975  // Specific of Trips
976  case SUMO_ATTR_FROM:
977  case SUMO_ATTR_TO:
978  case SUMO_ATTR_VIA:
979  //
980  // Specific of routeFlows
981  case SUMO_ATTR_BEGIN:
982  case SUMO_ATTR_END:
983  case SUMO_ATTR_NUMBER:
985  case SUMO_ATTR_PERIOD:
986  case SUMO_ATTR_PROB:
987  //
988  case GNE_ATTR_PARAMETERS:
989  case GNE_ATTR_SELECTED:
990  undoList->p_add(new GNEChange_Attribute(this, myViewNet->getNet(), key, value));
991  break;
992  default:
993  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
994  }
995 }
996 
997 
998 bool
999 GNEVehicle::isValid(SumoXMLAttr key, const std::string& value) {
1000  // declare string error
1001  std::string error;
1002  switch (key) {
1003  case SUMO_ATTR_ID:
1004  // Vehicles, Trips and Flows share namespace
1006  (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_VEHICLE, value, false) == nullptr) &&
1007  (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_TRIP, value, false) == nullptr) &&
1008  (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_ROUTEFLOW, value, false) == nullptr) &&
1009  (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_FLOW, value, false) == nullptr)) {
1010  return true;
1011  } else {
1012  return false;
1013  }
1014  case SUMO_ATTR_TYPE:
1015  return SUMOXMLDefinitions::isValidTypeID(value) && (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, value, false) != nullptr);
1016  case SUMO_ATTR_COLOR:
1017  return canParse<RGBColor>(value);
1018  case SUMO_ATTR_DEPARTLANE: {
1019  int dummyDepartLane;
1020  DepartLaneDefinition dummyDepartLaneProcedure;
1021  parseDepartLane(value, toString(SUMO_TAG_VEHICLE), id, dummyDepartLane, dummyDepartLaneProcedure, error);
1022  // if error is empty, check if depart lane is correct
1023  if (error.empty()) {
1024  if (dummyDepartLaneProcedure != DEPART_LANE_GIVEN) {
1025  return true;
1026  } else {
1027  return dummyDepartLane < (int)getFromEdge()->getLanes().size();
1028  }
1029  } else {
1030  return false;
1031  }
1032  }
1033  case SUMO_ATTR_DEPARTPOS: {
1034  double dummyDepartPos;
1035  DepartPosDefinition dummyDepartPosProcedure;
1036  parseDepartPos(value, toString(SUMO_TAG_VEHICLE), id, dummyDepartPos, dummyDepartPosProcedure, error);
1037  // if error is empty, given value is valid
1038  return error.empty();
1039  }
1040  case SUMO_ATTR_DEPARTSPEED: {
1041  double dummyDepartSpeed;
1042  DepartSpeedDefinition dummyDepartSpeedProcedure;
1043  parseDepartSpeed(value, toString(SUMO_TAG_VEHICLE), id, dummyDepartSpeed, dummyDepartSpeedProcedure, error);
1044  // if error is empty, check if depart speed is correct
1045  if (error.empty()) {
1046  if (dummyDepartSpeedProcedure != DEPART_SPEED_GIVEN) {
1047  return true;
1048  } else {
1049  return (dummyDepartSpeed <= getParentDemandElements().at(0)->getAttributeDouble(SUMO_ATTR_MAXSPEED));
1050  }
1051  } else {
1052  return false;
1053  }
1054  }
1055  case SUMO_ATTR_ARRIVALLANE: {
1056  int dummyArrivalLane;
1057  ArrivalLaneDefinition dummyArrivalLaneProcedure;
1058  parseArrivalLane(value, toString(SUMO_TAG_VEHICLE), id, dummyArrivalLane, dummyArrivalLaneProcedure, error);
1059  // if error is empty, given value is valid
1060  return error.empty();
1061  }
1062  case SUMO_ATTR_ARRIVALPOS: {
1063  double dummyArrivalPos;
1064  ArrivalPosDefinition dummyArrivalPosProcedure;
1065  parseArrivalPos(value, toString(SUMO_TAG_VEHICLE), id, dummyArrivalPos, dummyArrivalPosProcedure, error);
1066  // if error is empty, given value is valid
1067  return error.empty();
1068  }
1069  case SUMO_ATTR_ARRIVALSPEED: {
1070  double dummyArrivalSpeed;
1071  ArrivalSpeedDefinition dummyArrivalSpeedProcedure;
1072  parseArrivalSpeed(value, toString(SUMO_TAG_VEHICLE), id, dummyArrivalSpeed, dummyArrivalSpeedProcedure, error);
1073  // if error is empty, given value is valid
1074  return error.empty();
1075  }
1076  case SUMO_ATTR_LINE:
1077  return true;
1079  return canParse<int>(value) && parse<int>(value) >= 0;
1081  return canParse<int>(value) && parse<int>(value) >= 0;
1082  case SUMO_ATTR_REROUTE:
1083  return true; // check
1084  case SUMO_ATTR_DEPARTPOS_LAT: {
1085  double dummyDepartPosLat;
1086  DepartPosLatDefinition dummyDepartPosLatProcedure;
1087  parseDepartPosLat(value, toString(SUMO_TAG_VEHICLE), id, dummyDepartPosLat, dummyDepartPosLatProcedure, error);
1088  // if error is empty, given value is valid
1089  return error.empty();
1090  }
1091  case SUMO_ATTR_ARRIVALPOS_LAT: {
1092  double dummyArrivalPosLat;
1093  ArrivalPosLatDefinition dummyArrivalPosLatProcedure;
1094  parseArrivalPosLat(value, toString(SUMO_TAG_VEHICLE), id, dummyArrivalPosLat, dummyArrivalPosLatProcedure, error);
1095  // if error is empty, given value is valid
1096  return error.empty();
1097  }
1098  // Specific of vehicles
1099  case SUMO_ATTR_DEPART: {
1100  SUMOTime dummyDepart;
1101  DepartDefinition dummyDepartProcedure;
1102  parseDepart(value, toString(SUMO_TAG_VEHICLE), id, dummyDepart, dummyDepartProcedure, error);
1103  // if error is empty, given value is valid
1104  return error.empty();
1105  }
1106  case SUMO_ATTR_ROUTE:
1107  if (getParentDemandElements().size() == 2) {
1108  return SUMOXMLDefinitions::isValidVehicleID(value) && (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_ROUTE, value, false) != nullptr);
1109  } else {
1110  return true;
1111  }
1112  // Specific of Trips
1113  case SUMO_ATTR_FROM:
1114  case SUMO_ATTR_TO:
1115  return SUMOXMLDefinitions::isValidNetID(value) && (myViewNet->getNet()->retrieveEdge(value, false) != nullptr);
1116  case SUMO_ATTR_VIA:
1117  if (value.empty()) {
1118  return true;
1119  } else {
1120  return canParse<std::vector<GNEEdge*> >(myViewNet->getNet(), value, false);
1121  }
1122  // Specific of routeFlows
1123  case SUMO_ATTR_BEGIN:
1124  if (canParse<double>(value)) {
1125  return (parse<double>(value) >= 0);
1126  } else {
1127  return false;
1128  }
1129  case SUMO_ATTR_END:
1130  if (value.empty()) {
1131  return true;
1132  } else if (canParse<double>(value)) {
1133  return (parse<double>(value) >= 0);
1134  } else {
1135  return false;
1136  }
1137  case SUMO_ATTR_VEHSPERHOUR:
1138  if (value.empty()) {
1139  return true;
1140  } else if (canParse<double>(value)) {
1141  return (parse<double>(value) > 0);
1142  } else {
1143  return false;
1144  }
1145  case SUMO_ATTR_PERIOD:
1146  if (value.empty()) {
1147  return true;
1148  } else if (canParse<double>(value)) {
1149  return (parse<double>(value) > 0);
1150  } else {
1151  return false;
1152  }
1153  case SUMO_ATTR_PROB:
1154  if (value.empty()) {
1155  return true;
1156  } else if (canParse<double>(value)) {
1157  return (parse<double>(value) >= 0);
1158  } else {
1159  return false;
1160  }
1161  case SUMO_ATTR_NUMBER:
1162  if (canParse<int>(value)) {
1163  return (parse<int>(value) >= 0);
1164  } else {
1165  return false;
1166  }
1167  //
1168  case GNE_ATTR_SELECTED:
1169  return canParse<bool>(value);
1170  case GNE_ATTR_PARAMETERS:
1171  return Parameterised::areParametersValid(value);
1172  default:
1173  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
1174  }
1175 }
1176 
1177 
1178 void
1180  // obtain a copy of parameter sets
1181  int newParametersSet = parametersSet;
1182  // modify newParametersSet
1183  GNERouteHandler::setFlowParameters(key, newParametersSet);
1184  // add GNEChange_EnableAttribute
1185  undoList->add(new GNEChange_EnableAttribute(this, myViewNet->getNet(), parametersSet, newParametersSet), true);
1186 }
1187 
1188 
1189 void
1191  // nothing to disable
1192 }
1193 
1194 
1195 bool
1197  switch (key) {
1198  case SUMO_ATTR_END:
1199  return (parametersSet & VEHPARS_END_SET) != 0;
1200  case SUMO_ATTR_NUMBER:
1201  return (parametersSet & VEHPARS_NUMBER_SET) != 0;
1202  case SUMO_ATTR_VEHSPERHOUR:
1203  return (parametersSet & VEHPARS_VPH_SET) != 0;
1204  case SUMO_ATTR_PERIOD:
1205  return (parametersSet & VEHPARS_PERIOD_SET) != 0;
1206  case SUMO_ATTR_PROB:
1207  return (parametersSet & VEHPARS_PROB_SET) != 0;
1208  default:
1209  return true;
1210  }
1211 }
1212 
1213 
1214 std::string
1216  return getTagStr();
1217 }
1218 
1219 
1220 std::string
1222  // special case for Trips and flow
1224  // check if we're inspecting a Edge
1225  if (myViewNet->getNet()->getViewNet()->getDottedAC() &&
1227  // check if edge correspond to a "from", "to" or "via" edge
1228  if (getParentEdges().front() == myViewNet->getNet()->getViewNet()->getDottedAC()) {
1229  return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) + " (from)";
1230  } else if (getParentEdges().front() == myViewNet->getNet()->getViewNet()->getDottedAC()) {
1231  return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) + " (to)";
1232  } else {
1233  // iterate over via
1234  for (const auto& i : via) {
1235  if (i == myViewNet->getNet()->getViewNet()->getDottedAC()->getID()) {
1236  return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) + " (via)";
1237  }
1238  }
1239  }
1240  }
1241  }
1242  return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID);
1243 }
1244 
1245 // ===========================================================================
1246 // protected
1247 // ===========================================================================
1248 
1249 void
1251  // change color
1252  if (drawUsingSelectColor()) {
1254  } else {
1255  // obtain vehicle color
1256  const GUIColorer& c = s.vehicleColorer;
1257  // set color depending of vehicle color active
1258  switch (c.getActive()) {
1259  case 0: {
1260  // test for emergency vehicle
1261  if (getParentDemandElements().at(0)->getAttribute(SUMO_ATTR_GUISHAPE) == "emergency") {
1263  break;
1264  }
1265  // test for firebrigade
1266  if (getParentDemandElements().at(0)->getAttribute(SUMO_ATTR_GUISHAPE) == "firebrigade") {
1268  break;
1269  }
1270  // test for police car
1271  if (getParentDemandElements().at(0)->getAttribute(SUMO_ATTR_GUISHAPE) == "police") {
1273  break;
1274  }
1275  // check if color was set
1276  if (wasSet(VEHPARS_COLOR_SET)) {
1278  break;
1279  } else {
1280  // take their parent's color)
1282  break;
1283  }
1284  break;
1285  }
1286  case 2: {
1287  if (wasSet(VEHPARS_COLOR_SET)) {
1289  } else {
1291  }
1292  break;
1293  }
1294  case 3: {
1295  if (getParentDemandElements().at(0)->isAttributeEnabled(SUMO_ATTR_COLOR)) {
1297  } else {
1299  }
1300  break;
1301  }
1302  case 4: {
1303  if (getParentDemandElements().at(1)->getColor() != RGBColor::DEFAULT_COLOR) {
1305  } else {
1307  }
1308  break;
1309  }
1310  case 5: {
1311  Position p = getParentDemandElements().at(1)->getParentEdges().at(0)->getLanes().at(0)->getLaneShape()[0];
1312  const Boundary& b = myViewNet->getNet()->getBoundary();
1313  Position center = b.getCenter();
1314  double hue = 180. + atan2(center.x() - p.x(), center.y() - p.y()) * 180. / M_PI;
1315  double sat = p.distanceTo(center) / center.distanceTo(Position(b.xmin(), b.ymin()));
1316  GLHelper::setColor(RGBColor::fromHSV(hue, sat, 1.));
1317  break;
1318  }
1319  case 6: {
1320  Position p = getParentDemandElements().at(1)->getParentEdges().back()->getLanes().at(0)->getLaneShape()[-1];
1321  const Boundary& b = myViewNet->getNet()->getBoundary();
1322  Position center = b.getCenter();
1323  double hue = 180. + atan2(center.x() - p.x(), center.y() - p.y()) * 180. / M_PI;
1324  double sat = p.distanceTo(center) / center.distanceTo(Position(b.xmin(), b.ymin()));
1325  GLHelper::setColor(RGBColor::fromHSV(hue, sat, 1.));
1326  break;
1327  }
1328  case 7: {
1329  Position pb = getParentDemandElements().at(1)->getParentEdges().at(0)->getLanes().at(0)->getLaneShape()[0];
1330  Position pe = getParentDemandElements().at(1)->getParentEdges().back()->getLanes().at(0)->getLaneShape()[-1];
1331  const Boundary& b = myViewNet->getNet()->getBoundary();
1332  double hue = 180. + atan2(pb.x() - pe.x(), pb.y() - pe.y()) * 180. / M_PI;
1333  Position minp(b.xmin(), b.ymin());
1334  Position maxp(b.xmax(), b.ymax());
1335  double sat = pb.distanceTo(pe) / minp.distanceTo(maxp);
1336  GLHelper::setColor(RGBColor::fromHSV(hue, sat, 1.));
1337  break;
1338  }
1339  case 29: { // color randomly (by pointer hash)
1340  std::hash<const GNEVehicle*> ptr_hash;
1341  const double hue = (double)(ptr_hash(this) % 360); // [0-360]
1342  const double sat = ((ptr_hash(this) / 360) % 67) / 100.0 + 0.33; // [0.33-1]
1343  GLHelper::setColor(RGBColor::fromHSV(hue, sat, 1.));
1344  break;
1345  }
1346  default: {
1348  }
1349  }
1350  }
1351 }
1352 
1353 // ===========================================================================
1354 // private
1355 // ===========================================================================
1356 
1357 void
1358 GNEVehicle::setAttribute(SumoXMLAttr key, const std::string& value) {
1359  // declare string error
1360  std::string error;
1361  switch (key) {
1362  case SUMO_ATTR_ID:
1363  changeDemandElementID(value);
1364  // set manually vehicle ID (needed for saving)
1365  id = value;
1366  break;
1367  case SUMO_ATTR_TYPE:
1368  replaceParentDemandElement(this, value, 0);
1369  // set manually vtypeID (needed for saving)
1370  vtypeid = value;
1371  break;
1372  case SUMO_ATTR_COLOR:
1373  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1374  color = parse<RGBColor>(value);
1375  // mark parameter as set
1377  } else {
1378  // set default value
1379  color = parse<RGBColor>(myTagProperty.getDefaultValue(key));
1380  // unset parameter
1382  }
1383  break;
1384  case SUMO_ATTR_DEPARTLANE:
1385  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1387  // mark parameter as set
1389  } else {
1390  // set default value
1392  // unset parameter
1394  }
1395  break;
1396  case SUMO_ATTR_DEPARTPOS:
1397  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1399  // mark parameter as set
1401  } else {
1402  // set default value
1404  // unset parameter
1406  }
1407  updateGeometry();
1408  break;
1409  case SUMO_ATTR_DEPARTSPEED:
1410  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1412  // mark parameter as set
1414  } else {
1415  // set default value
1417  // unset parameter
1419  }
1420  break;
1421  case SUMO_ATTR_ARRIVALLANE:
1422  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1424  // mark parameter as set
1426  } else {
1427  // set default value
1429  // unset parameter
1431  }
1432  break;
1433  case SUMO_ATTR_ARRIVALPOS:
1434  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1436  // mark parameter as set
1438  } else {
1439  // set default value
1441  // unset parameter
1443  }
1444  updateGeometry();
1445  break;
1447  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1449  // mark parameter as set
1451  } else {
1452  // set default value
1454  // unset parameter
1456  }
1457  break;
1458  case SUMO_ATTR_LINE:
1459  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1460  line = value;
1461  // mark parameter as set
1463  } else {
1464  // set default value
1466  // unset parameter
1468  }
1469  break;
1471  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1472  personNumber = parse<int>(value);
1473  // mark parameter as set
1475  } else {
1476  // set default value
1477  personNumber = parse<int>(myTagProperty.getDefaultValue(key));
1478  // unset parameter
1480  }
1481  break;
1483  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1484  containerNumber = parse<int>(value);
1485  // mark parameter as set
1487  } else {
1488  // set default value
1489  containerNumber = parse<int>(myTagProperty.getDefaultValue(key));
1490  // unset parameter
1492  }
1493  break;
1494  case SUMO_ATTR_REROUTE:
1495  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1496  // mark parameter as set
1498  } else {
1499  // unset parameter
1501  }
1502  break;
1504  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1506  // mark parameter as set
1508  } else {
1509  // set default value
1511  // unset parameter
1513  }
1514  break;
1516  if (!value.empty() && (value != myTagProperty.getDefaultValue(key))) {
1518  // mark parameter as set
1520  } else {
1521  // set default value
1523  // unset parameter
1525  }
1527  break;
1528  // Specific of vehicles
1529  case SUMO_ATTR_DEPART: {
1530  std::string oldDepart = getBegin();
1532  myViewNet->getNet()->updateDemandElementBegin(oldDepart, this);
1533  break;
1534  }
1535  case SUMO_ATTR_ROUTE:
1536  if (getParentDemandElements().size() == 2) {
1537  replaceParentDemandElement(this, value, 1);
1538  }
1539  updateGeometry();
1540  break;
1541  // Specific of Trips and flow
1542  case SUMO_ATTR_FROM: {
1543  // change first edge
1545  // compute vehicle
1546  computePath();
1547  break;
1548  }
1549  case SUMO_ATTR_TO: {
1550  // change last edge
1552  // compute vehicle
1553  computePath();
1554  break;
1555  }
1556  case SUMO_ATTR_VIA: {
1557  if (!value.empty()) {
1558  // set new via edges
1559  via = parse< std::vector<std::string> >(value);
1560  // mark parameter as set
1562  } else {
1563  // clear via
1564  via.clear();
1565  // unset parameter
1567  }
1568  // update via
1569  replaceMiddleParentEdges(this, parse<std::vector<GNEEdge*> >(myViewNet->getNet(), value), true);
1570  // compute vehicle
1571  computePath();
1572  break;
1573  }
1574  // Specific of routeFlows
1575  case SUMO_ATTR_BEGIN: {
1576  std::string oldBegin = getBegin();
1577  depart = string2time(value);
1578  myViewNet->getNet()->updateDemandElementBegin(oldBegin, this);
1579  break;
1580  }
1581  case SUMO_ATTR_END:
1582  repetitionEnd = string2time(value);
1583  break;
1584  case SUMO_ATTR_VEHSPERHOUR:
1585  repetitionOffset = TIME2STEPS(3600 / parse<double>(value));
1586  break;
1587  case SUMO_ATTR_PERIOD:
1588  repetitionOffset = string2time(value);
1589  break;
1590  case SUMO_ATTR_PROB:
1591  repetitionProbability = parse<double>(value);
1592  break;
1593  case SUMO_ATTR_NUMBER:
1594  repetitionNumber = parse<int>(value);
1595  break;
1596  //
1597  case GNE_ATTR_SELECTED:
1598  if (parse<bool>(value)) {
1600  } else {
1602  }
1603  break;
1604  case GNE_ATTR_PARAMETERS:
1605  setParametersStr(value);
1606  break;
1607  default:
1608  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
1609  }
1610 }
1611 
1612 
1613 void
1614 GNEVehicle::setEnabledAttribute(const int enabledAttributes) {
1615  parametersSet = enabledAttributes;
1616 }
1617 
1618 
1619 /****************************************************************************/
GUIGlObject::getType
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.cpp:180
GNEViewParent::getSelectorFrame
GNESelectorFrame * getSelectorFrame() const
get frame for GNE_NMODE_SELECT
Definition: GNEViewParent.cpp:186
SUMO_ATTR_MAXSPEED
Definition: SUMOXMLDefinitions.h:441
GNEVehicle::getAttributeDouble
double getAttributeDouble(SumoXMLAttr key) const
Definition: GNEVehicle.cpp:946
GNEDemandElement::myViewNet
GNEViewNet * myViewNet
The GNEViewNet this demand element element belongs.
Definition: GNEDemandElement.h:376
GUIVisualizationDetailSettings::vehicleBoxes
static const double vehicleBoxes
details for draw person as boxes
Definition: GUIVisualizationSettings.h:322
SUMO_ATTR_TYPE
Definition: SUMOXMLDefinitions.h:381
SUMOVehicleParameter::personNumber
int personNumber
The static number of persons in the vehicle when it departs (not including boarding persons)
Definition: SUMOVehicleParameter.h:662
RGBColor::DEFAULT_COLOR
static const RGBColor DEFAULT_COLOR
The default color (for vehicle types and vehicles)
Definition: RGBColor.h:203
SUMOVehicleClass
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
Definition: SUMOVehicleClass.h:133
GNEDemandElement::getLastAllowedVehicleLane
GNELane * getLastAllowedVehicleLane() const
get first allowed vehicle lane
Definition: GNEDemandElement.cpp:512
GNEHierarchicalParentElements::replaceMiddleParentEdges
void replaceMiddleParentEdges(GNEDemandElement *elementChild, const std::vector< GNEEdge * > &newMiddleEdges, const bool updateChildReferences)
replace middle (via) parent edges
Definition: GNEHierarchicalParentElements.cpp:372
SUMOVehicleParameter::containerNumber
int containerNumber
The static number of containers in the vehicle when it departs.
Definition: SUMOVehicleParameter.h:665
GNERouteHandler::transformToVehicle
static void transformToVehicle(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform vehicle functions
Definition: GNERouteHandler.cpp:774
ARRIVAL_POS_GIVEN
The arrival position is given.
Definition: SUMOVehicleParameter.h:234
SUMOVehicleParameter::wasSet
bool wasSet(int what) const
Returns whether the given parameter was set.
Definition: SUMOVehicleParameter.h:312
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:55
GLHelper::drawTextSettings
static void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048)
Definition: GLHelper.cpp:706
SUMO_ATTR_DEPART
Definition: SUMOXMLDefinitions.h:431
MIN2
T MIN2(T a, T b)
Definition: StdDefs.h:73
Parameterised::getParametersStr
std::string getParametersStr() const
Returns the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN".
Definition: Parameterised.cpp:112
ArrivalPosDefinition
ArrivalPosDefinition
Possible ways to choose the arrival position.
Definition: SUMOVehicleParameter.h:230
GNEGeometry::calculateEdgeGeometricPath
static void calculateEdgeGeometricPath(const GNEAttributeCarrier *AC, GNEGeometry::SegmentGeometry &segmentGeometry, const std::vector< GNEEdge * > &edges, const SUMOVehicleClass vClass, GNELane *fromLane, GNELane *toLane, double startPos=-1, double endPos=-1, const Position &extraFirstPosition=Position::INVALID, const Position &extraLastPosition=Position::INVALID)
calculate route between edges
Definition: GNEGeometry.cpp:591
SUMOVehicleParameter::parametersSet
int parametersSet
Information for the router which parameter were set, TraCI may modify this (whe changing color)
Definition: SUMOVehicleParameter.h:671
GNEVehicle::startGeometryMoving
void startGeometryMoving()
Definition: GNEVehicle.cpp:495
GNEHierarchicalParentElements::getPathEdges
const std::vector< GNEEdge * > & getPathEdges() const
get path edges
Definition: GNEHierarchicalParentElements.cpp:203
GNEAttributeCarrier::mySelected
bool mySelected
boolean to check if this AC is selected (instead of GUIGlObjectStorage)
Definition: GNEAttributeCarrier.h:788
GNEVehicle::selectAttributeCarrier
void selectAttributeCarrier(bool changeFlag=true)
inherited from GNEAttributeCarrier
Definition: GNEVehicle.cpp:788
GNEAttributeCarrier::getID
const std::string getID() const
function to support debugging
Definition: GNEAttributeCarrier.cpp:1289
GNEHierarchicalParentElements::replaceLastParentEdge
void replaceLastParentEdge(GNEDemandElement *elementChild, GNEEdge *newLastEdge)
replace the last parent edge (used by demand elements)
Definition: GNEHierarchicalParentElements.cpp:397
GNEVehicle::updateGeometry
void updateGeometry()
update pre-computed geometry information
Definition: GNEVehicle.cpp:519
GNEHierarchicalParentElements::replacePathEdges
void replacePathEdges(GNEDemandElement *elementChild, const std::vector< GNEEdge * > &routeEdges)
replace edge route Parents
Definition: GNEHierarchicalParentElements.cpp:414
GNEHierarchicalParentElements::replaceFirstParentEdge
void replaceFirstParentEdge(GNEDemandElement *elementChild, GNEEdge *newFirstEdge)
replace the first parent edge (used by demand elements)
Definition: GNEHierarchicalParentElements.cpp:356
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:72
GNEDemandElement::getRouteCalculatorInstance
static RouteCalculator * getRouteCalculatorInstance()
obtain instance of RouteCalculator
Definition: GNEDemandElement.cpp:280
ICON_TRIP
Definition: GUIIcons.h:302
SUMOVehicleParameter::arrivalSpeedProcedure
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle's end speed shall be chosen.
Definition: SUMOVehicleParameter.h:537
GUIGLObjectPopupMenu::insertMenuPaneChild
void insertMenuPaneChild(FXMenuPane *child)
Insert a sub-menu pane in this GUIGLObjectPopupMenu.
Definition: GUIGLObjectPopupMenu.cpp:80
SUMO_ATTR_LENGTH
Definition: SUMOXMLDefinitions.h:393
SUMOVehicleParameter::color
RGBColor color
The vehicle's color, TraCI may change this.
Definition: SUMOVehicleParameter.h:477
GNEHierarchicalChildElements::getChildDemandElements
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
Definition: GNEHierarchicalChildElements.cpp:296
Boundary::ymin
double ymin() const
Returns minimum y-coordinate.
Definition: Boundary.cpp:130
GNEVehicle::GNESelectedVehiclesPopupMenu::~GNESelectedVehiclesPopupMenu
~GNESelectedVehiclesPopupMenu()
Destructor.
Definition: GNEVehicle.cpp:214
SUMOVehicleParameter::getArrivalPos
std::string getArrivalPos() const
obtain arrival pos parameter in string format
Definition: SUMOVehicleParameter.cpp:727
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:63
GUIGlObject::drawName
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
Definition: GUIGlObject.cpp:354
SUMOVehicleParameter::getDepartSpeed
std::string getDepartSpeed() const
obtain depart speed parameter in string format
Definition: SUMOVehicleParameter.cpp:682
GNEHierarchicalParentElements::getParentEdges
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
Definition: GNEHierarchicalParentElements.cpp:181
ICON_FLOW
Definition: GUIIcons.h:303
GUIVisualizationSettings::angle
double angle
The current view rotation angle.
Definition: GUIVisualizationSettings.h:405
GUIVisualizationSettings::drawForRectangleSelection
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
Definition: GUIVisualizationSettings.h:647
Position::INVALID
static const Position INVALID
used to indicate that a position is valid
Definition: Position.h:284
GUIBaseVehicleHelper::drawAction_drawVehicleAsPoly
static void drawAction_drawVehicleAsPoly(const GUIVisualizationSettings &s, const SUMOVehicleShape shape, const double width, const double length, int carriageIndex=-1)
draw vehicle as a polygon
Definition: GUIBaseVehicleHelper.cpp:143
SUMOVehicleParameter::departSpeed
double departSpeed
(optional) The initial speed of the vehicle
Definition: SUMOVehicleParameter.h:506
SUMO_ATTR_LINE
Definition: SUMOXMLDefinitions.h:775
GNEDemandElement::getDemandElementSegmentGeometry
const GNEGeometry::SegmentGeometry & getDemandElementSegmentGeometry() const
get demand element segment geometry
Definition: GNEDemandElement.cpp:217
GNEAttributeCarrier::GNEChange_EnableAttribute
friend class GNEChange_EnableAttribute
Definition: GNEAttributeCarrier.h:58
GNEVehicle::computePath
void computePath()
compute path
Definition: GNEVehicle.cpp:567
SUMOVehicleParameter::vtypeid
std::string vtypeid
The vehicle's type id.
Definition: SUMOVehicleParameter.h:474
VEHPARS_NUMBER_SET
const int VEHPARS_NUMBER_SET
Definition: SUMOVehicleParameter.h:51
SUMOVehicleParameter::departPosProcedure
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
Definition: SUMOVehicleParameter.h:497
GNEGeometry::SegmentGeometry::getFirstRotation
double getFirstRotation() const
get first rotation (or Invalid position if segments are empty)
Definition: GNEGeometry.cpp:343
GNEVehicle::setAttribute
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
method for setting the attribute and letting the object perform demand element changes
Definition: GNEVehicle.cpp:952
GNERouteHandler::transformToTrip
static void transformToTrip(GNEVehicle *originalVehicle)
transform to trip
Definition: GNERouteHandler.cpp:894
SUMOVehicleParameter::repetitionOffset
SUMOTime repetitionOffset
The time offset between vehicle reinsertions.
Definition: SUMOVehicleParameter.h:550
SUMOVehicleParameter::parseDepartSpeed
static bool parseDepartSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, DepartSpeedDefinition &dsd, std::string &error)
Validates a given departSpeed value.
Definition: SUMOVehicleParameter.cpp:384
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToRouteFlowWithEmbeddedRoute
FXMenuCommand * myTransformToRouteFlowWithEmbeddedRoute
menu command for transform to route flow with an embedded route
Definition: GNEVehicle.h:123
SUMO_ATTR_ARRIVALPOS_LAT
Definition: SUMOXMLDefinitions.h:438
GUIGlobalSelection.h
SUMOVehicleParameter::parseDepartLane
static bool parseDepartLane(const std::string &val, const std::string &element, const std::string &id, int &lane, DepartLaneDefinition &dld, std::string &error)
Validates a given departLane value.
Definition: SUMOVehicleParameter.cpp:275
SUMO_ATTR_PERIOD
Definition: SUMOXMLDefinitions.h:645
GNEVehicle::getFromEdge
GNEEdge * getFromEdge() const
Definition: GNEVehicle.cpp:451
DepartPosLatDefinition
DepartPosLatDefinition
Definition: SUMOVehicleParameter.h:166
ArrivalPosLatDefinition
ArrivalPosLatDefinition
Possible ways to choose the departure position.
Definition: SUMOVehicleParameter.h:250
FXDEFMAP
FXDEFMAP(GNEVehicle::GNESingleVehiclePopupMenu) GNESingleVehiclePopupMenuMap[]
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
GNEDemandElement::getFirstAllowedVehicleLane
GNELane * getFirstAllowedVehicleLane() const
get first allowed vehicle lane
Definition: GNEDemandElement.cpp:476
GNEVehicle::isDemandElementValid
bool isDemandElementValid() const
check if current demand element is valid to be writed into XML (by default true, can be reimplemented...
Definition: GNEVehicle.cpp:405
DepartDefinition
DepartDefinition
Possible ways to depart.
Definition: SUMOVehicleParameter.h:98
VEHPARS_ARRIVALSPEED_SET
const int VEHPARS_ARRIVALSPEED_SET
Definition: SUMOVehicleParameter.h:58
Boundary::xmax
double xmax() const
Returns maximum x-coordinate.
Definition: Boundary.cpp:124
GNENet::retrieveDemandElement
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
Definition: GNENet.cpp:2316
SUMO_ATTR_COLOR
A color information.
Definition: SUMOXMLDefinitions.h:704
ArrivalLaneDefinition
ArrivalLaneDefinition
Possible ways to choose the arrival lane.
Definition: SUMOVehicleParameter.h:214
OptionsCont::getOptions
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:57
GNEVehicle::getBegin
std::string getBegin() const
get begin time of demand element
Definition: GNEVehicle.cpp:325
SUMOVehicleParameter::departProcedure
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
Definition: SUMOVehicleParameter.h:485
GNEViewNetHelper::NetworkViewOptions::showDemandElements
bool showDemandElements() const
check if show demand elements checkbox is enabled
Definition: GNEViewNetHelper.cpp:1616
GNEViewNet
Definition: GNEViewNet.h:42
GLO_FLOW
a flow
Definition: GUIGlObjectTypes.h:145
GNEVehicle::getPositionInView
Position getPositionInView() const
Returns position of demand element in view.
Definition: GNEVehicle.cpp:589
SUMOVehicleParameter::parseArrivalPosLat
static bool parseArrivalPosLat(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosLatDefinition &apd, std::string &error)
Validates a given arrivalPosLat value.
Definition: SUMOVehicleParameter.cpp:478
SUMO_ATTR_ARRIVALPOS
Definition: SUMOXMLDefinitions.h:437
SUMO_ATTR_ID
Definition: SUMOXMLDefinitions.h:378
PositionVector::length
double length() const
Returns the length.
Definition: PositionVector.cpp:484
GNEDemandElement::getViewNet
GNEViewNet * getViewNet() const
Returns a pointer to GNEViewNet in which demand element element is located.
Definition: GNEDemandElement.cpp:253
SUMOVehicleParameter
Structure representing possible vehicle parameter.
Definition: SUMOVehicleParameter.h:297
GLO_VEHICLE
Definition: GUIGlObjectTypes.h:141
GNERouteHandler::transformToFlow
static void transformToFlow(GNEVehicle *originalVehicle)
transform to flow
Definition: GNERouteHandler.cpp:959
GLHelper.h
MID_COPY_NAME
Copy object name - popup entry.
Definition: GUIAppEnum.h:382
GUIVisualizationSettings::vehicleSize
GUIVisualizationSizeSettings vehicleSize
Definition: GUIVisualizationSettings.h:520
GUIVisualizationSettings::vehicleColorer
GUIColorer vehicleColorer
The vehicle colorer.
Definition: GUIVisualizationSettings.h:496
SUMO_TAG_VTYPE
description of a vehicle type
Definition: SUMOXMLDefinitions.h:121
GNEVehicle::~GNEVehicle
~GNEVehicle()
destructor
Definition: GNEVehicle.cpp:321
GUIGLObjectPopupMenu
The popup menu of a globject.
Definition: GUIGLObjectPopupMenu.h:47
GUIIconSubSys::getIcon
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Definition: GUIIconSubSys.cpp:609
GNEVehicle::getVClass
SUMOVehicleClass getVClass() const
obtain VClass related with this demand element
Definition: GNEVehicle.cpp:483
SUMOVehicleParameter::parseArrivalPos
static bool parseArrivalPos(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosDefinition &apd, std::string &error)
Validates a given arrivalPos value.
Definition: SUMOVehicleParameter.cpp:448
GNEVehicle::GNESelectedVehiclesPopupMenu::GNESelectedVehiclesPopupMenu
GNESelectedVehiclesPopupMenu()
default constructor needed by FOX
Definition: GNEVehicle.h:104
GLHelper::setColor
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:621
GUIVisualizationSettings::drawMinGap
bool drawMinGap
Information whether the minimum gap shall be drawn.
Definition: GUIVisualizationSettings.h:508
GNEVehicle::enableAttribute
void enableAttribute(SumoXMLAttr key, GNEUndoList *undoList)
Definition: GNEVehicle.cpp:1179
SumoXMLTag
SumoXMLTag
Numbers representing SUMO-XML - element names.
Definition: SUMOXMLDefinitions.h:41
SUMOVehicleParameter::depart
SUMOTime depart
Definition: SUMOVehicleParameter.h:482
GUIVisualizationDetailSettings::vehicleShapes
static const double vehicleShapes
details for draw person as shapes
Definition: GUIVisualizationSettings.h:325
VEHPARS_PROB_SET
const int VEHPARS_PROB_SET
Definition: SUMOVehicleParameter.h:54
GNEVehicle::setColor
void setColor(const GUIVisualizationSettings &s) const
sets the color according to the currente settings
Definition: GNEVehicle.cpp:1250
VEHPARS_DEPARTSPEED_SET
const int VEHPARS_DEPARTSPEED_SET
Definition: SUMOVehicleParameter.h:49
GNEAttributeCarrier::TagProperties::getTag
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
Definition: GNEAttributeCarrier.cpp:523
GUIVisualizationTextSettings::scaledSize
double scaledSize(double scale, double constFactor=0.1) const
get scale size
Definition: GUIVisualizationSettings.cpp:195
Parameterised::writeParams
void writeParams(OutputDevice &device) const
write Params in the given outputdevice
Definition: Parameterised.cpp:154
GNEVehicle::getPopUpID
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
Definition: GNEVehicle.cpp:1215
OutputDevice::closeTag
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
Definition: OutputDevice.cpp:253
GUIAppEnum.h
GNEVehicle::GNESelectedVehiclesPopupMenu
class used in GUIGLObjectPopupMenu for single vehicle transformations
Definition: GNEVehicle.h:84
SUMOVehicleParameter::tag
SumoXMLTag tag
The vehicle tag.
Definition: SUMOVehicleParameter.h:465
SUMOVehicleParameter::getDepartPosLat
std::string getDepartPosLat() const
obtain depart pos lat parameter in string format
Definition: SUMOVehicleParameter.cpp:649
SUMO_ATTR_BEGIN
weights: time range begin
Definition: SUMOXMLDefinitions.h:678
SUMO_ATTR_TO
Definition: SUMOXMLDefinitions.h:640
GNEDemandElement::myDemandElementSegmentGeometry
GNEGeometry::SegmentGeometry myDemandElementSegmentGeometry
demand element segment geometry
Definition: GNEDemandElement.h:382
MAX2
T MAX2(T a, T b)
Definition: StdDefs.h:79
GNEEdge
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:51
VEHPARS_ARRIVALLANE_SET
const int VEHPARS_ARRIVALLANE_SET
Definition: SUMOVehicleParameter.h:56
GNEAttributeCarrier::GNEChange_Attribute
friend class GNEChange_Attribute
declare friend class
Definition: GNEAttributeCarrier.h:57
VEHPARS_ROUTE_SET
const int VEHPARS_ROUTE_SET
Definition: SUMOVehicleParameter.h:55
SUMO_ATTR_PERSON_NUMBER
Definition: SUMOXMLDefinitions.h:651
GNEUndoList::p_add
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
Definition: GNEUndoList.cpp:131
GNEDemandElement::changeDemandElementID
void changeDemandElementID(const std::string &newID)
change ID of demand element
Definition: GNEDemandElement.cpp:385
SUMOVehicleParameter::line
std::string line
The vehicle's line (mainly for public transport)
Definition: SUMOVehicleParameter.h:561
GNEViewNet::getNet
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:1014
GNEAttributeCarrier::TagProperties::getTagSynonym
SumoXMLTag getTagSynonym() const
get tag synonym
Definition: GNEAttributeCarrier.cpp:670
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToFlow
FXMenuCommand * myTransformToFlow
menu command for transform to flow
Definition: GNEVehicle.h:129
GNERouteHandler::setFlowParameters
static void setFlowParameters(const SumoXMLAttr attribute, int &parameters)
configure flow parameters
Definition: GNERouteHandler.cpp:1033
OutputDevice::writeAttr
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:255
RGBColor
Definition: RGBColor.h:39
SUMO_TAG_ROUTEFLOW
a flow definition nusing a route instead of a from-to edges route (used in NETEDIT)
Definition: SUMOXMLDefinitions.h:151
SUMO_ATTR_ARRIVALSPEED
Definition: SUMOXMLDefinitions.h:439
SUMO_TAG_FLOW
a flow definitio nusing a from-to edges instead of a route (used by router)
Definition: SUMOXMLDefinitions.h:149
SUMO_ATTR_PROB
Definition: SUMOXMLDefinitions.h:629
VEHPARS_ARRIVALPOS_SET
const int VEHPARS_ARRIVALPOS_SET
Definition: SUMOVehicleParameter.h:57
GUIVisualizationSettings::detailSettings
GUIVisualizationDetailSettings detailSettings
detail settings
Definition: GUIVisualizationSettings.h:683
GNEAttributeCarrier::getTagProperty
const TagProperties & getTagProperty() const
get Tag Property assigned to this object
Definition: GNEAttributeCarrier.cpp:1273
GNEHierarchicalParentElements::getParentDemandElements
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
Definition: GNEHierarchicalParentElements.cpp:114
SUMOVehicleParameter::arrivalLaneProcedure
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
Definition: SUMOVehicleParameter.h:519
SUMOVehicleParameter::parseDepartPosLat
static bool parseDepartPosLat(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosLatDefinition &dpd, std::string &error)
Validates a given departPosLat value.
Definition: SUMOVehicleParameter.cpp:348
Boundary::xmin
double xmin() const
Returns minimum x-coordinate.
Definition: Boundary.cpp:118
GUISelectedStorage::select
void select(GUIGlID id, bool update=true)
Adds the object with the given id.
Definition: GUISelectedStorage.cpp:113
SUMOVehicleParameter::getArrivalPosLat
std::string getArrivalPosLat() const
obtain arrival pos lat parameter in string format
Definition: SUMOVehicleParameter.cpp:751
GNELane::getLaneShape
const PositionVector & getLaneShape() const
Definition: GNELane.cpp:86
TIME2STEPS
#define TIME2STEPS(x)
Definition: SUMOTime.h:58
SUMOVehicleParameter::getDepart
std::string getDepart() const
obtain depart parameter in string format
Definition: SUMOVehicleParameter.cpp:574
GUIPropertySchemeStorage::getScheme
T & getScheme()
Definition: GUIPropertySchemeStorage.h:79
GNEVehicle::getColor
const RGBColor & getColor() const
get color
Definition: GNEVehicle.cpp:489
GNEViewNet::buildSelectionACPopupEntry
void buildSelectionACPopupEntry(GUIGLObjectPopupMenu *ret, GNEAttributeCarrier *AC)
Builds an entry which allows to (de)select the object.
Definition: GNEViewNet.cpp:338
GNEVehicle::isAttributeEnabled
bool isAttributeEnabled(SumoXMLAttr key) const
Definition: GNEVehicle.cpp:1196
Position::distanceTo
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:233
VEHPARS_COLOR_SET
const int VEHPARS_COLOR_SET
Definition: SUMOVehicleParameter.h:45
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToTrip
FXMenuCommand * myTransformToTrip
menu command for transform to trip
Definition: GNEVehicle.h:126
DEPART_SPEED_GIVEN
The speed is given.
Definition: SUMOVehicleParameter.h:196
SUMOVehicleShape
SUMOVehicleShape
Definition of vehicle classes to differ between different appearences.
Definition: SUMOVehicleClass.h:50
SUMOVehicleParameter::parseArrivalLane
static bool parseArrivalLane(const std::string &val, const std::string &element, const std::string &id, int &lane, ArrivalLaneDefinition &ald, std::string &error)
Validates a given arrivalLane value.
Definition: SUMOVehicleParameter.cpp:419
GNEVehicle::fixDemandElementProblem
void fixDemandElementProblem()
fix demand element problem (by default throw an exception, has to be reimplemented in children)
Definition: GNEVehicle.cpp:445
GNEViewNet::getNetworkViewOptions
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
Definition: GNEViewNet.cpp:452
GNEVehicle::disableAttribute
void disableAttribute(SumoXMLAttr key, GNEUndoList *undoList)
Definition: GNEVehicle.cpp:1190
ICON_VEHICLE
Definition: GUIIcons.h:301
DEFAULT_VTYPE_ID
const std::string DEFAULT_VTYPE_ID
SUMO_ATTR_DEPARTPOS_LAT
Definition: SUMOXMLDefinitions.h:434
DEPART_LANE_GIVEN
The lane is given.
Definition: SUMOVehicleParameter.h:120
GNEViewNet.h
STEPS2TIME
#define STEPS2TIME(x)
Definition: SUMOTime.h:56
PositionVector::positionAtOffset
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
Definition: PositionVector.cpp:248
SUMO_ATTR_WIDTH
Definition: SUMOXMLDefinitions.h:386
GNENet::retrieveDemandElements
std::vector< GNEDemandElement * > retrieveDemandElements(bool onlySelected=false) const
return all demand elements
Definition: GNENet.cpp:2328
SUMO_ATTR_DEPARTSPEED
Definition: SUMOXMLDefinitions.h:435
SUMOVehicleParameter::id
std::string id
The vehicle's id.
Definition: SUMOVehicleParameter.h:468
SUMO_ATTR_ROUTE
Definition: SUMOXMLDefinitions.h:440
GUIGlObject::getGlID
GUIGlID getGlID() const
Returns the numerical id of the object.
Definition: GUIGlObject.cpp:149
GNEViewNet::getDottedAC
const GNEAttributeCarrier * getDottedAC() const
get AttributeCarrier under cursor
Definition: GNEViewNet.cpp:1026
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
SUMO_ATTR_DEPARTLANE
Definition: SUMOXMLDefinitions.h:432
GNEVehicle::getDemandElementProblem
std::string getDemandElementProblem() const
return a string with the current demand element problem (by default empty, can be reimplemented in ch...
Definition: GNEVehicle.cpp:427
GNEVehicle::GNESingleVehiclePopupMenu::~GNESingleVehiclePopupMenu
~GNESingleVehiclePopupMenu()
Destructor.
Definition: GNEVehicle.cpp:124
GNEVehicle::getAttribute
std::string getAttribute(SumoXMLAttr key) const
Definition: GNEVehicle.cpp:819
SUMOVehicleParameter::repetitionProbability
double repetitionProbability
The probability for emitting a vehicle per second.
Definition: SUMOVehicleParameter.h:553
VEHPARS_VIA_SET
const int VEHPARS_VIA_SET
Definition: SUMOVehicleParameter.h:68
SUMO_TAG_EDGE
begin/end of the description of an edge
Definition: SUMOXMLDefinitions.h:47
GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
Definition: SUMOXMLDefinitions.h:989
SUMOVehicleParameter::arrivalPos
double arrivalPos
(optional) The position the vehicle shall arrive on
Definition: SUMOVehicleParameter.h:522
VEHPARS_LINE_SET
const int VEHPARS_LINE_SET
Definition: SUMOVehicleParameter.h:59
GLHelper::drawShapeDottedContourRectangle
static void drawShapeDottedContourRectangle(const GUIVisualizationSettings &s, const int type, const Position &center, const double width, const double height, const double rotation=0, const double offsetX=0, const double offsetY=0)
draw a dotted contour around the given Position with certain width and height
Definition: GLHelper.cpp:560
RGBColor::BLUE
static const RGBColor BLUE
Definition: RGBColor.h:191
GUIVisualizationSettings::scale
double scale
information about a lane's width (temporary, used for a single view)
Definition: GUIVisualizationSettings.h:632
ProcessError
Definition: UtilExceptions.h:39
GNEViewNetHelper::EditModes::currentSupermode
Supermode currentSupermode
the current supermode
Definition: GNEViewNetHelper.h:305
GUIVisualizationSettings::vehicleName
GUIVisualizationTextSettings vehicleName
Definition: GUIVisualizationSettings.h:523
GLO_ROUTE
Definition: GUIGlObjectTypes.h:115
SUMOVehicleParameter::arrivalPosProcedure
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
Definition: SUMOVehicleParameter.h:525
SUMO_ATTR_CONTAINER_NUMBER
Definition: SUMOXMLDefinitions.h:652
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GLO_TRIP
a trip
Definition: GUIGlObjectTypes.h:143
Position::x
double x() const
Returns the x-position.
Definition: Position.h:56
Boundary::add
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:78
GNEEdge.h
GNEAttributeCarrier::myTagProperty
const TagProperties & myTagProperty
the xml tag to which this attribute carrier corresponds
Definition: GNEAttributeCarrier.h:785
time2string
std::string time2string(SUMOTime t)
Definition: SUMOTime.cpp:67
GNEVehicle::invalidatePath
void invalidatePath()
invalidate path
Definition: GNEVehicle.cpp:578
GNEDemandElement::isAttributeCarrierSelected
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
Definition: GNEDemandElement.cpp:552
GNEViewNet::getDemandViewOptions
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
Definition: GNEViewNet.cpp:458
SUMOVehicleParameter::arrivalPosLat
double arrivalPosLat
(optional) The lateral position the vehicle shall arrive on
Definition: SUMOVehicleParameter.h:528
GNEGeometry::updateGeometricPath
static void updateGeometricPath(GNEGeometry::SegmentGeometry &segmentGeometry, const GNEEdge *edge, double startPos=-1, double endPos=-1, const Position &extraFirstPosition=Position::INVALID, const Position &extraLastPosition=Position::INVALID)
calculate route between edges
Definition: GNEGeometry.cpp:719
SUMOVehicleParameter::parseArrivalSpeed
static bool parseArrivalSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, ArrivalSpeedDefinition &asd, std::string &error)
Validates a given arrivalSpeed value.
Definition: SUMOVehicleParameter.cpp:508
SUMOVehicleParameter::parseDepart
static bool parseDepart(const std::string &val, const std::string &element, const std::string &id, SUMOTime &depart, DepartDefinition &dd, std::string &error)
Validates a given depart value.
Definition: SUMOVehicleParameter.cpp:244
RGBColor::RED
static const RGBColor RED
named colors
Definition: RGBColor.h:189
VEHPARS_ARRIVALPOSLAT_SET
const int VEHPARS_ARRIVALPOSLAT_SET
Definition: SUMOVehicleParameter.h:67
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToRouteFlow
FXMenuCommand * myTransformToRouteFlow
menu command for transform to route flow
Definition: GNEVehicle.h:120
GUIBaseVehicleHelper.h
GNENetElement
Definition: GNENetElement.h:43
GNENet::updateDemandElementBegin
void updateDemandElementBegin(const std::string &oldBegin, GNEDemandElement *demandElement)
update demand element begin in container
Definition: GNENet.cpp:2378
RGBColor::fromHSV
static RGBColor fromHSV(double h, double s, double v)
Converts the given hsv-triplet to rgb, inspired by http://alvyray.com/Papers/CG/hsv2rgb....
Definition: RGBColor.cpp:298
GNEVehicle::isValid
bool isValid(SumoXMLAttr key, const std::string &value)
method for checking if the key and their conrrespond attribute are valids
Definition: GNEVehicle.cpp:999
GUIVisualizationTextSettings::show
bool show
flag show
Definition: GUIVisualizationSettings.h:68
SUMOVehicleParameter::routeid
std::string routeid
The vehicle's route id.
Definition: SUMOVehicleParameter.h:471
GUIBaseVehicleHelper::drawAction_drawVehicleAsBoxPlus
static void drawAction_drawVehicleAsBoxPlus(const double width, const double length)
draw vehicle as a Box
Definition: GUIBaseVehicleHelper.cpp:111
GNEVehicle::getToEdge
GNEEdge * getToEdge() const
obtain to edge of this demand element
Definition: GNEVehicle.cpp:467
GUISUMOAbstractView::getPositionInformation
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
Definition: GUISUMOAbstractView.cpp:190
GNEGeometry::SegmentGeometry::getFirstPosition
const Position & getFirstPosition() const
get first position (or Invalid position if segments are empty)
Definition: GNEGeometry.cpp:324
SUMOVehicleParameter::arrivalLane
int arrivalLane
Definition: SUMOVehicleParameter.h:516
GNEVehicle::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GNEVehicle.cpp:638
GNERouteHandler::transformToRouteFlow
static void transformToRouteFlow(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform routeFlow over an existent route
Definition: GNERouteHandler.cpp:834
ICON_ROUTEFLOW
Definition: GUIIcons.h:304
GNEEdge::getLanes
const std::vector< GNELane * > & getLanes() const
returns a reference to the lane vector
Definition: GNEEdge.cpp:874
SUMOVehicleParameter::getDepartPos
std::string getDepartPos() const
obtain depart pos parameter in string format
Definition: SUMOVehicleParameter.cpp:616
SUMO_TAG_VEHICLE
description of a vehicle
Definition: SUMOXMLDefinitions.h:119
SUMOVehicleParameter::getDepartLane
std::string getDepartLane() const
obtain depart lane parameter in string format
Definition: SUMOVehicleParameter.cpp:586
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToVehicleWithEmbeddedRoute
FXMenuCommand * myTransformAllVehiclesToVehicleWithEmbeddedRoute
menu command for transform all selected vehicles to vehicle with an embedded route
Definition: GNEVehicle.h:135
string2time
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:44
VEHPARS_VPH_SET
const int VEHPARS_VPH_SET
Definition: SUMOVehicleParameter.h:53
GNELane.h
SUMOVehicleParameter::departPosLat
double departPosLat
(optional) The lateral position the vehicle shall depart from
Definition: SUMOVehicleParameter.h:500
GNEChange_EnableAttribute.h
VEHPARS_DEPARTLANE_SET
const int VEHPARS_DEPARTLANE_SET
Definition: SUMOVehicleParameter.h:47
MSDevice_BTreceiver.h
GNENet::getViewNet
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:2117
Position::distanceSquaredTo2D
double distanceSquaredTo2D(const Position &p2) const
returns the square of the distance to another position (Only using x and y positions)
Definition: Position.h:248
GUIGlObject::buildPopupHeader
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
Definition: GUIGlObject.cpp:207
SUMOVehicleParameter::write
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag tag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
Definition: SUMOVehicleParameter.cpp:67
GUIVisualizationSettings::colorSettings
GUIVisualizationColorSettings colorSettings
color settings
Definition: GUIVisualizationSettings.h:677
SUMO_ATTR_FROM
Definition: SUMOXMLDefinitions.h:639
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToRouteFlow
FXMenuCommand * myTransformAllVehiclesToRouteFlow
menu command for transform all selected vehicles to route flow
Definition: GNEVehicle.h:138
GNEAttributeCarrier::parse
static T parse(const std::string &string)
parses a value of type T from string (used for basic types: int, double, bool, etc....
DepartLaneDefinition
DepartLaneDefinition
Possible ways to choose a lane on depart.
Definition: SUMOVehicleParameter.h:116
GUIVisualizationDetailSettings::vehicleTriangles
static const double vehicleTriangles
details for draw person as triangles
Definition: GUIVisualizationSettings.h:319
SUMOVehicleParameter::repetitionEnd
SUMOTime repetitionEnd
The time at which the flow ends (only needed when using repetitionProbability)
Definition: SUMOVehicleParameter.h:556
Parameterised::setParametersStr
void setParametersStr(const std::string &paramsString)
set the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN"
Definition: Parameterised.cpp:139
GNEViewParent.h
GNEViewNetHelper::DemandViewOptions::showNonInspectedDemandElements
bool showNonInspectedDemandElements(const GNEDemandElement *demandElement) const
check if non inspected element has to be hidden
Definition: GNEViewNetHelper.cpp:1741
SUMOVehicleParameter::departLane
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
Definition: SUMOVehicleParameter.h:488
GNEVehicle::updatePartialGeometry
void updatePartialGeometry(const GNEEdge *edge)
partial update pre-computed geometry information
Definition: GNEVehicle.cpp:546
GNENet::getBoundary
const Boundary & getBoundary() const
returns the bounder of the network
Definition: GNENet.cpp:185
GLIncludes.h
GNEVehicle::getHierarchyName
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
Definition: GNEVehicle.cpp:1221
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:47
VEHPARS_VTYPE_SET
const int VEHPARS_VTYPE_SET
Definition: SUMOVehicleParameter.h:46
GNEVehicle::commitGeometryMoving
void commitGeometryMoving(GNEUndoList *undoList)
commit geometry changes in the attributes of an element after use of moveGeometry(....
Definition: GNEVehicle.cpp:513
GNEDemandElement::RouteCalculator::areEdgesConsecutives
bool areEdgesConsecutives(SUMOVehicleClass vClass, GNEEdge *from, GNEEdge *to) const
check if exist a route between the two given consecutives edges
Definition: GNEDemandElement.cpp:133
GNESelectorFrame.h
GNEAttributeCarrier::TagProperties::getDefaultValue
const std::string & getDefaultValue(SumoXMLAttr attr) const
return the default value of the attribute of an element
Definition: GNEAttributeCarrier.cpp:574
SUMOVehicleParameter::departLaneProcedure
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
Definition: SUMOVehicleParameter.h:491
VEHPARS_DEPARTPOSLAT_SET
const int VEHPARS_DEPARTPOSLAT_SET
Definition: SUMOVehicleParameter.h:66
SUMO_ATTR_VIA
Definition: SUMOXMLDefinitions.h:723
GUIMainWindow
Definition: GUIMainWindow.h:46
Position::y
double y() const
Returns the y-position.
Definition: Position.h:61
SUMOVehicleParameter::via
std::vector< std::string > via
List of the via-edges the vehicle must visit.
Definition: SUMOVehicleParameter.h:659
GNEVehicle::writeDemandElement
void writeDemandElement(OutputDevice &device) const
writte demand element element into a xml file
Definition: GNEVehicle.cpp:344
SUMOXMLDefinitions::isValidTypeID
static bool isValidTypeID(const std::string &value)
whether the given string is a valid id for an edge or vehicle type
Definition: SUMOXMLDefinitions.cpp:979
Boundary::getCenter
Position getCenter() const
Returns the center of the boundary.
Definition: Boundary.cpp:112
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToTrip
FXMenuCommand * myTransformAllVehiclesToTrip
menu command for transform all selected vehicles to trip
Definition: GNEVehicle.h:144
M_PI
#define M_PI
Definition: odrSpiral.cpp:40
GNEAttributeCarrier::TagProperties::hasTagSynonym
bool hasTagSynonym() const
return true if tag correspond to an element that will be written in XML with another tag
Definition: GNEAttributeCarrier.cpp:840
GNEVehicle::GNEVehicle
GNEVehicle(SumoXMLTag tag, GNEViewNet *viewNet, const std::string &vehicleID, GNEDemandElement *vehicleType, GNEDemandElement *route)
default constructor for vehicles and routeFlows without embedded routes
Definition: GNEVehicle.cpp:260
Parameterised::areParametersValid
static bool areParametersValid(const std::string &value, bool report=false)
check if given string can be parsed to a parameters map "key1=value1|key2=value2|....
Definition: Parameterised.cpp:166
SUMO_ATTR_REROUTE
Definition: SUMOXMLDefinitions.h:648
VEHPARS_CONTAINER_NUMBER_SET
const int VEHPARS_CONTAINER_NUMBER_SET
Definition: SUMOVehicleParameter.h:65
GNE_SUPERMODE_DEMAND
Demanding mode (Routes, Vehicles etc..)
Definition: GNEViewNetHelper.h:48
VEHPARS_DEPARTPOS_SET
const int VEHPARS_DEPARTPOS_SET
Definition: SUMOVehicleParameter.h:48
InvalidArgument
Definition: UtilExceptions.h:56
GLHelper::drawBoxLine
static void drawBoxLine(const Position &beg, double rot, double visLength, double width, double offset=0)
Draws a thick line.
Definition: GLHelper.cpp:136
SUMO_ATTR_GUISHAPE
Definition: SUMOXMLDefinitions.h:790
VEHPARS_PERSON_NUMBER_SET
const int VEHPARS_PERSON_NUMBER_SET
Definition: SUMOVehicleParameter.h:64
SUMOXMLDefinitions::isValidNetID
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
Definition: SUMOXMLDefinitions.cpp:967
SUMOXMLDefinitions::isValidVehicleID
static bool isValidVehicleID(const std::string &value)
whether the given string is a valid id for a vehicle or flow
Definition: SUMOXMLDefinitions.cpp:973
GNEVehicle::GNESelectedVehiclesPopupMenu::onCmdTransform
long onCmdTransform(FXObject *obj, FXSelector, void *)
Called to transform the current vehicle to another vehicle type.
Definition: GNEVehicle.cpp:218
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToVehicleWithEmbeddedRoute
FXMenuCommand * myTransformToVehicleWithEmbeddedRoute
menu command for transform to vehicle with an embedded route
Definition: GNEVehicle.h:117
GNEVehicle::setEnabledAttribute
void setEnabledAttribute(const int enabledAttributes)
method for enabling the attribute and nothing else (used in GNEChange_EnableAttribute)
Definition: GNEVehicle.cpp:1614
GUIGlObject::buildShowParamsPopupEntry
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
Definition: GUIGlObject.cpp:248
DepartPosDefinition
DepartPosDefinition
Possible ways to choose the departure position.
Definition: SUMOVehicleParameter.h:140
gSelected
GUISelectedStorage gSelected
A global holder of selected objects.
Definition: GUIGlobalSelection.cpp:33
GNEDemandElement::getDemandElementID
const std::string & getDemandElementID() const
returns DemandElement ID
Definition: GNEDemandElement.cpp:369
GUIGlObject::buildCenterPopupEntry
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
Definition: GUIGlObject.cpp:216
GUIGlObject::buildPositionCopyEntry
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used,...
Definition: GUIGlObject.cpp:266
GNEVehicle
Definition: GNEVehicle.h:35
SUMOVehicleParameter::arrivalPosLatProcedure
ArrivalPosLatDefinition arrivalPosLatProcedure
Information how the vehicle shall choose the lateral arrival position.
Definition: SUMOVehicleParameter.h:531
GNENet::retrieveEdge
GNEEdge * retrieveEdge(const std::string &id, bool failHard=true)
get edge by id
Definition: GNENet.cpp:1069
GNEVehicle::getParentName
std::string getParentName() const
Returns the name of the parent object.
Definition: GNEVehicle.cpp:626
SUMO_TAG_ROUTE
begin/end of the description of a route
Definition: SUMOXMLDefinitions.h:125
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformToVehicle
FXMenuCommand * myTransformToVehicle
menu command for transform to vehicle
Definition: GNEVehicle.h:114
getVehicleShapeID
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
Definition: SUMOVehicleClass.cpp:342
SUMO_ATTR_MINGAP
Definition: SUMOXMLDefinitions.h:458
GNEHierarchicalParentElements::replaceParentDemandElement
void replaceParentDemandElement(GNEShape *shapeTobeChanged, const std::string &newParentDemandElementID, int demandElementParentIndex)
replace the parent demand element of a shape
Definition: GNEHierarchicalParentElements.cpp:540
GNEVehicle::getPopUpMenu
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GNEVehicle.cpp:605
GNEVehicle.h
GUIVisualizationSettings::personName
GUIVisualizationTextSettings personName
Definition: GUIVisualizationSettings.h:541
GNEVehicle::GNESingleVehiclePopupMenu
class used in GUIGLObjectPopupMenu for single vehicle transformations
Definition: GNEVehicle.h:39
GNEGeometry::SegmentGeometry::size
int size() const
number of segments
Definition: GNEGeometry.cpp:387
GNE_ATTR_SELECTED
element is selected
Definition: SUMOXMLDefinitions.h:971
MID_GNE_VEHICLE_TRANSFORM
transform vehicle to another vehicle type (ej: flow to trip)
Definition: GUIAppEnum.h:960
StringTokenizer.h
GNEViewNet::getEditModes
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
Definition: GNEViewNet.cpp:434
GNEVehicle::splitEdgeGeometry
void splitEdgeGeometry(const double splitPosition, const GNENetElement *originalElement, const GNENetElement *newElement, GNEUndoList *undoList)
split geometry
Definition: GNEVehicle.cpp:647
SUMO_ATTR_END
weights: time range end
Definition: SUMOXMLDefinitions.h:680
Boundary::grow
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:300
DepartSpeedDefinition
DepartSpeedDefinition
Possible ways to choose the departure speed.
Definition: SUMOVehicleParameter.h:192
GUIVisualizationSettings::drawDetail
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
Definition: GUIVisualizationSettings.cpp:1669
VEHPARS_PERIOD_SET
const int VEHPARS_PERIOD_SET
Definition: SUMOVehicleParameter.h:52
GNEVehicle::GNESingleVehiclePopupMenu::onCmdTransform
long onCmdTransform(FXObject *obj, FXSelector, void *)
Called to transform the current vehicle to another vehicle type.
Definition: GNEVehicle.cpp:128
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToVehicle
FXMenuCommand * myTransformAllVehiclesToVehicle
menu command for transform all selected vehicles to vehicle
Definition: GNEVehicle.h:132
SUMO_ATTR_DEPARTPOS
Definition: SUMOXMLDefinitions.h:433
DEPART_POS_GIVEN
The position is given.
Definition: SUMOVehicleParameter.h:144
GNESelectorFrame::LockGLObjectTypes::removeLockedObject
void removeLockedObject(const GUIGlObjectType type)
set object unselected
Definition: GNESelectorFrame.cpp:573
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToRouteFlowWithEmbeddedRoute
FXMenuCommand * myTransformAllVehiclesToRouteFlowWithEmbeddedRoute
menu command for transform all selected vehicles to route flow with an embedded route
Definition: GNEVehicle.h:141
GNEAttributeCarrier::getTagStr
const std::string & getTagStr() const
get tag assigned to this object in string format
Definition: GNEAttributeCarrier.cpp:1267
GNEUndoList
Definition: GNEUndoList.h:48
SUMO_ATTR_VEHSPERHOUR
Definition: SUMOXMLDefinitions.h:786
GNEVehicle::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GNEVehicle.cpp:653
MID_COPY_TYPED_NAME
Copy typed object name - popup entry.
Definition: GUIAppEnum.h:384
SUMOVehicleParameter::parseDepartPos
static bool parseDepartPos(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosDefinition &dpd, std::string &error)
Validates a given departPos value.
Definition: SUMOVehicleParameter.cpp:312
GNEVehicle::moveGeometry
void moveGeometry(const Position &offset)
change the position of the element geometry without saving in undoList
Definition: GNEVehicle.cpp:507
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
SUMOVehicleParameter::departPosLatProcedure
DepartPosLatDefinition departPosLatProcedure
Information how the vehicle shall choose the lateral departure position.
Definition: SUMOVehicleParameter.h:503
SUMOVehicleParameter::repetitionNumber
int repetitionNumber
Definition: SUMOVehicleParameter.h:544
VEHPARS_END_SET
const int VEHPARS_END_SET
Definition: SUMOVehicleParameter.h:50
GNEVehicle::GNESelectedVehiclesPopupMenu::myTransformAllVehiclesToFlow
FXMenuCommand * myTransformAllVehiclesToFlow
menu command for transform all selected vehicles to flow
Definition: GNEVehicle.h:147
SUMOVehicleParameter::getArrivalLane
std::string getArrivalLane() const
obtain arrival lane parameter in string format
Definition: SUMOVehicleParameter.cpp:709
SumoXMLAttr
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
Definition: SUMOXMLDefinitions.h:372
NBNode.h
GUIVisualizationColorSettings::selectedVehicleColor
RGBColor selectedVehicleColor
vehicle selection color
Definition: GUIVisualizationSettings.h:153
SUMO_ATTR_NUMBER
Definition: SUMOXMLDefinitions.h:666
GLO_ROUTEFLOW
a routeFlow
Definition: GUIGlObjectTypes.h:147
SUMOVehicleParameter::getArrivalSpeed
std::string getArrivalSpeed() const
obtain arrival speed parameter in string format
Definition: SUMOVehicleParameter.cpp:775
GUIPropertyScheme::getColor
const T getColor(const double value) const
Definition: GUIPropertyScheme.h:110
GNELane
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:45
SUMO_ATTR_ARRIVALLANE
Definition: SUMOXMLDefinitions.h:436
GNEVehicle::endGeometryMoving
void endGeometryMoving()
end geometry movement
Definition: GNEVehicle.cpp:501
GNEDemandElement::drawUsingSelectColor
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
Definition: GNEDemandElement.cpp:558
GNEChange_Attribute.h
GNENet.h
GUIBaseVehicleHelper::drawAction_drawVehicleAsTrianglePlus
static void drawAction_drawVehicleAsTrianglePlus(const double width, const double length)
draw vehicle as a triangle
Definition: GUIBaseVehicleHelper.cpp:126
GUIPropertySchemeStorage::getActive
int getActive() const
Definition: GUIPropertySchemeStorage.h:75
SUMOVehicleParameter::departPos
double departPos
(optional) The position the vehicle shall depart from
Definition: SUMOVehicleParameter.h:494
SUMOVehicleParameter::departSpeedProcedure
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle's initial speed shall be chosen.
Definition: SUMOVehicleParameter.h:509
GUIVisualizationSizeSettings::getExaggeration
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Definition: GUIVisualizationSettings.cpp:212
SUMO_TAG_TRIP
a single trip definition (used by router)
Definition: SUMOXMLDefinitions.h:145
GUISelectedStorage::deselect
void deselect(GUIGlID id)
Deselects the object with the given id.
Definition: GUISelectedStorage.cpp:130
GNEViewNet::getViewParent
GNEViewParent * getViewParent() const
get the net object
Definition: GNEViewNet.cpp:1008
GNERouteHandler.h
GNESelectorFrame::getLockGLObjectTypes
LockGLObjectTypes * getLockGLObjectTypes() const
get selected items Modul
Definition: GNESelectorFrame.cpp:459
RGBColor::WHITE
static const RGBColor WHITE
Definition: RGBColor.h:196
GNEUndoList.h
Boundary::ymax
double ymax() const
Returns maximum y-coordinate.
Definition: Boundary.cpp:136
GNEVehicle::unselectAttributeCarrier
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
Definition: GNEVehicle.cpp:803
SUMOVehicleParameter::arrivalSpeed
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
Definition: SUMOVehicleParameter.h:534
GUIPropertySchemeStorage< GUIColorScheme >
ArrivalSpeedDefinition
ArrivalSpeedDefinition
Possible ways to choose the arrival speed.
Definition: SUMOVehicleParameter.h:270
GNESelectorFrame::LockGLObjectTypes::addedLockedObject
void addedLockedObject(const GUIGlObjectType type)
set object selected
Definition: GNESelectorFrame.cpp:567