Eclipse SUMO - Simulation of Urban MObility
GUIPerson.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
20 // A MSPerson extended by some values for usage within the gui
21 /****************************************************************************/
22 #include <config.h>
23 
33 #include <utils/gui/div/GLHelper.h>
39 
40 #include "GUILane.h"
41 #include "GUIPerson.h"
42 
43 //#define GUIPerson_DEBUG_DRAW_WALKINGAREA_PATHS 1
44 
45 // ===========================================================================
46 // FOX callback mapping
47 // ===========================================================================
48 
49 FXDEFMAP(GUIPerson::GUIPersonPopupMenu) GUIPersonPopupMenuMap[] = {
58 };
59 
60 // Object implementation
61 FXIMPLEMENT(GUIPerson::GUIPersonPopupMenu, GUIGLObjectPopupMenu, GUIPersonPopupMenuMap, ARRAYNUMBER(GUIPersonPopupMenuMap))
62 
63 // ===========================================================================
64 // method definitions
65 // ===========================================================================
66 
67 // -------------------------------------------------------------------------
68 // GUIPerson::GUIPersonPopupMenu - methods
69 // -------------------------------------------------------------------------
70 
72  GUIMainWindow& app, GUISUMOAbstractView& parent, GUIGlObject& o) :
73  GUIGLObjectPopupMenu(app, parent, o) {
74 }
75 
76 
78 
79 
80 long
82  assert(myObject->getType() == GLO_PERSON);
83  if (!static_cast<GUIPerson*>(myObject)->hasActiveAddVisualisation(myParent, VO_SHOW_ROUTE)) {
84  static_cast<GUIPerson*>(myObject)->addActiveAddVisualisation(myParent, VO_SHOW_ROUTE);
85  }
86  return 1;
87 }
88 
89 
90 long
92  assert(myObject->getType() == GLO_PERSON);
93  static_cast<GUIPerson*>(myObject)->removeActiveAddVisualisation(myParent, VO_SHOW_ROUTE);
94  return 1;
95 }
96 
97 
98 long
100  assert(myObject->getType() == GLO_PERSON);
101  if (!static_cast<GUIPerson*>(myObject)->hasActiveAddVisualisation(myParent, VO_SHOW_WALKINGAREA_PATH)) {
102  static_cast<GUIPerson*>(myObject)->addActiveAddVisualisation(myParent, VO_SHOW_WALKINGAREA_PATH);
103  }
104  return 1;
105 }
106 
107 
108 long
110  assert(myObject->getType() == GLO_PERSON);
111  static_cast<GUIPerson*>(myObject)->removeActiveAddVisualisation(myParent, VO_SHOW_WALKINGAREA_PATH);
112  return 1;
113 }
114 
115 
116 long
117 GUIPerson::GUIPersonPopupMenu::onCmdShowPlan(FXObject*, FXSelector, void*) {
118  GUIPerson* p = dynamic_cast<GUIPerson*>(myObject);
119  if (p == nullptr) {
120  return 1;
121  }
122  GUIParameterTableWindow* ret = new GUIParameterTableWindow(*myApplication, *p);
123  // add items
124  for (int stage = 1; stage < p->getNumStages(); stage++) {
125  ret->mkItem(toString(stage).c_str(), false, p->getStageSummary(stage));
126  }
127  // close building (use an object that is not Parameterised as argument)
128  Parameterised dummyParameterised;
129  ret->closeBuilding(&dummyParameterised);
130  return 1;
131 }
132 
133 
134 long
135 GUIPerson::GUIPersonPopupMenu::onCmdStartTrack(FXObject*, FXSelector, void*) {
136  assert(myObject->getType() == GLO_PERSON);
137  if (myParent->getTrackedID() != static_cast<GUIPerson*>(myObject)->getGlID()) {
138  myParent->startTrack(static_cast<GUIPerson*>(myObject)->getGlID());
139  }
140  return 1;
141 }
142 
143 
144 long
145 GUIPerson::GUIPersonPopupMenu::onCmdStopTrack(FXObject*, FXSelector, void*) {
146  assert(myObject->getType() == GLO_PERSON);
147  myParent->stopTrack();
148  return 1;
149 }
150 
151 
152 long
154  GUIPerson* person = static_cast<GUIPerson*>(myObject);
155  MSStage* stage = person->getCurrentStage();
156  stage->abort(person);
157  stage->getEdge()->removeTransportable(person);
158  if (stage->getDestinationStop() != nullptr) {
159  stage->getDestinationStop()->removeTransportable(person);
160  }
162  myParent->update();
163  return 1;
164 }
165 
166 // -------------------------------------------------------------------------
167 // GUIPerson - methods
168 // -------------------------------------------------------------------------
169 
171  MSPerson(pars, vtype, plan, speedFactor),
172  GUIGlObject(GLO_PERSON, pars->id, GUIIconSubSys::getIcon(GUIIcon::PERSON)),
173  myLock(true)
174 { }
175 
176 
178  myLock.lock();
179  for (std::map<GUISUMOAbstractView*, int>::iterator i = myAdditionalVisualizations.begin(); i != myAdditionalVisualizations.end(); ++i) {
180  if (i->first->getTrackedID() == getGlID()) {
181  i->first->stopTrack();
182  }
183  while (i->first->removeAdditionalGLVisualisation(this));
184  }
185  myLock.unlock();
186 }
187 
188 
191  GUIGLObjectPopupMenu* ret = new GUIPersonPopupMenu(app, parent, *this);
192  buildPopupHeader(ret, app);
197  GUIDesigns::buildFXMenuCommand(ret, "Hide Current Route", nullptr, ret, MID_HIDE_CURRENTROUTE);
198  } else {
199  GUIDesigns::buildFXMenuCommand(ret, "Show Current Route", nullptr, ret, MID_SHOW_CURRENTROUTE);
200  }
202  GUIDesigns::buildFXMenuCommand(ret, "Hide Walkingarea Path", nullptr, ret, MID_HIDE_WALKINGAREA_PATH);
203  } else {
204  GUIDesigns::buildFXMenuCommand(ret, "Show Walkingarea Path", nullptr, ret, MID_SHOW_WALKINGAREA_PATH);
205  }
206  new FXMenuSeparator(ret);
207  if (parent.getTrackedID() != getGlID()) {
208  GUIDesigns::buildFXMenuCommand(ret, "Start Tracking", nullptr, ret, MID_START_TRACK);
209  } else {
210  GUIDesigns::buildFXMenuCommand(ret, "Stop Tracking", nullptr, ret, MID_STOP_TRACK);
211  }
212  GUIDesigns::buildFXMenuCommand(ret, "Remove", nullptr, ret, MID_REMOVE_OBJECT);
213  new FXMenuSeparator(ret);
214  //
218  new FXMenuSeparator(ret);
219  buildPositionCopyEntry(ret, app);
220  return ret;
221 }
222 
223 
227  GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this);
228  // add items
230  // there is always the "start" stage which we do not count here because it is not strictly part of the plan
231  ret->mkItem(TL("stage index"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getStageIndexDescription));
232  ret->mkItem(TL("start edge [id]"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getFromEdgeID));
233  ret->mkItem(TL("dest edge [id]"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getDestinationEdgeID));
234  ret->mkItem(TL("dest stop [id]"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getDestinationStopID));
235  ret->mkItem(TL("arrival position [m]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getStageArrivalPos));
236  ret->mkItem(TL("edge [id]"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getEdgeID));
237  ret->mkItem(TL("position [m]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getEdgePos));
238  ret->mkItem(TL("speed [m/s]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getSpeed));
239  ret->mkItem(TL("speed factor"), false, getChosenSpeedFactor());
240  ret->mkItem(TL("angle [degree]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getNaviDegree));
241  ret->mkItem(TL("waiting time [s]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getWaitingSeconds));
242  ret->mkItem(TL("vehicle [id]"), true, new FunctionBindingString<GUIPerson>(this, &GUIPerson::getVehicleID));
243  ret->mkItem(TL("stop duration [s]"), true, new FunctionBinding<GUIPerson, double>(this, &GUIPerson::getStopDuration));
244  ret->mkItem(TL("desired depart [s]"), false, time2string(getParameter().depart));
245  // close building
246  ret->closeBuilding(&getParameter());
247  return ret;
248 }
249 
250 
253  GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this, "vType:" + myVType->getID());
254  ret->mkItem(TL("length"), false, myVType->getLength());
255  ret->mkItem(TL("width"), false, myVType->getWidth());
256  ret->mkItem(TL("height"), false, myVType->getHeight());
257  ret->mkItem(TL("minGap"), false, myVType->getMinGap());
258  ret->mkItem(TL("mass [kg]"), false, myVType->getMass());
259  ret->mkItem(TL("desired max speed [m/s]"), false, myVType->getDesiredMaxSpeed());
260  ret->mkItem(TL("maximum speed [m/s]"), false, myVType->getMaxSpeed());
261  ret->closeBuilding(&(myVType->getParameter()));
262  return ret;
263 }
264 
265 
266 double
268  return s.personSize.getExaggeration(s, this, s.personQuality == 1 ? 40 : 80);
269 }
270 
271 
272 Boundary
274  Boundary b;
275  // ensure that the vehicle is drawn, otherwise myPositionInVehicle will not be updated
276  b.add(getGUIPosition());
277  b.grow(MAX2(getVehicleType().getWidth(), getVehicleType().getLength()));
278  return b;
279 }
280 
281 
282 void
286  Position p1 = getGUIPosition(&s);
287  double angle = getGUIAngle();
288  glTranslated(p1.x(), p1.y(), getType());
289  // set person color
290  setColor(s);
291  // scale
292  const double exaggeration = getExaggeration(s);
293  glScaled(exaggeration, exaggeration, 1);
294  switch (s.personQuality) {
295  case 0:
297  break;
298  case 1:
299  GUIBasePersonHelper::drawAction_drawAsCircle(angle, getVehicleType().getLength(), getVehicleType().getWidth(), s.scale * exaggeration);
300  break;
301  case 2:
303  break;
304  case 3:
305  default:
307  getVehicleType().getImgFile(), getVehicleType().getGuiShape(), 1);
308  break;
309  }
311 #ifdef GUIPerson_DEBUG_DRAW_WALKINGAREA_PATHS
313 #endif
314  drawName(p1, s.scale, s.personName, s.angle);
315  if (s.personValue.show(this)) {
316  Position p2 = p1 + Position(0, 0.6 * s.personName.scaledSize(s.scale));
317  const double value = getColorValue(s, s.personColorer.getActive());
319  }
321 }
322 
323 
324 void
326  MSStageWalking* stage = dynamic_cast<MSStageWalking*>(getCurrentStage());
327  if (stage != nullptr) {
328  setColor(s);
329  MSPModel_Striping::PState* stripingState = dynamic_cast<MSPModel_Striping::PState*>(stage->getPState());
330  if (stripingState != nullptr) {
331  const MSPModel_Striping::WalkingAreaPath* waPath = stripingState->myWalkingAreaPath;
332  if (waPath != nullptr) {
334  glTranslated(0, 0, getType());
335  GLHelper::drawBoxLines(waPath->shape, 0.05);
337  }
338  }
339  }
340 }
341 
342 void
346  glTranslated(0, 0, getType() - .1); // don't draw on top of other cars
349  }
352  setColor(s);
353  RGBColor current = GLHelper::getColor();
354  RGBColor darker = current.changedBrightness(-51);
355  GLHelper::setColor(darker);
356  MSStageWalking* stage = dynamic_cast<MSStageWalking*>(getCurrentStage());
357  assert(stage != 0);
358  const double exaggeration = getExaggeration(s);
359  const ConstMSEdgeVector& edges = stage->getRoute();
360  const bool s2 = s.secondaryShape;
361  for (ConstMSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
362  GUILane* lane = static_cast<GUILane*>((*it)->getLanes()[0]);
363  GLHelper::drawBoxLines(lane->getShape(s2), lane->getShapeRotations(s2), lane->getShapeLengths(s2), exaggeration);
364  }
365  }
366  }
369 }
370 
371 
372 void
374  myPositionInVehicle = pos;
375 }
376 
377 
378 void
380  RGBColor col;
381  const GUIColorer& c = s.personColorer;
382  if (!setFunctionalColor(c.getActive(), this, col)) {
383  col = c.getScheme().getColor(getColorValue(s, c.getActive()));
384  }
385  GLHelper::setColor(col);
386 }
387 
388 
389 bool
390 GUIPerson::setFunctionalColor(int activeScheme, const MSPerson* person, RGBColor& col) {
391  switch (activeScheme) {
392  case 0: {
393  if (person->getParameter().wasSet(VEHPARS_COLOR_SET)) {
394  col = person->getParameter().color;
395  return true;
396  }
397  if (person->getVehicleType().wasSet(VTYPEPARS_COLOR_SET)) {
398  col = person->getVehicleType().getColor();
399  return true;
400  }
401  return false;
402  }
403  case 2: {
404  if (person->getParameter().wasSet(VEHPARS_COLOR_SET)) {
405  col = person->getParameter().color;
406  return true;
407  }
408  return false;
409  }
410  case 3: {
411  if (person->getVehicleType().wasSet(VTYPEPARS_COLOR_SET)) {
412  col = person->getVehicleType().getColor();
413  return true;
414  }
415  return false;
416  }
417  case 9: { // color by angle
418  double hue = GeomHelper::naviDegree(person->getAngle());
419  col = RGBColor::fromHSV(hue, 1., 1.);
420  return true;
421  }
422  case 10: { // color randomly (by pointer)
423  const double hue = (double)((long long int)person % 360); // [0-360]
424  const double sat = (double)(((long long int)person / 360) % 67) / 100. + 0.33; // [0.33-1]
425  col = RGBColor::fromHSV(hue, sat, 1.);
426  return true;
427  }
428  default:
429  return false;
430  }
431 }
432 
433 
434 double
435 GUIPerson::getColorValue(const GUIVisualizationSettings& /* s */, int activeScheme) const {
436  switch (activeScheme) {
437  case 4:
438  switch (getCurrentStageType()) {
440  return -1;
442  return -2;
443  default:
444  return getSpeed();
445  }
446  case 5:
447  if (isWaiting4Vehicle()) {
448  return 5;
449  } else {
450  return (double)getCurrentStageType();
451  }
452  case 6:
453  return getWaitingSeconds();
454  case 7:
455  return isJammed() ? 1 : 0;
456  case 8:
458  }
459  return 0;
460 }
461 
462 
463 double
465  FXMutexLock locker(myLock);
466  if (hasArrived()) {
467  return -1;
468  }
469  return MSPerson::getEdgePos();
470 }
471 
472 int
474  FXMutexLock locker(myLock);
475  if (hasArrived()) {
477  }
478  return MSPerson::getDirection();
479 }
480 
481 
482 Position
484  FXMutexLock locker(myLock);
485  if (hasArrived()) {
486  return Position::INVALID;
487  }
488  return MSPerson::getPosition();
489 }
490 
491 
492 Position
494  FXMutexLock locker(myLock);
495  if (hasArrived()) {
496  return Position::INVALID;
497  }
500  if (s != nullptr) {
501  return myPositionInVehicle.pos;
502  } else {
503  // centering boundary must cover the vehicle regardless of exaggeration and zoom
505  if (veh == nullptr) {
506  // should not happen
507  return myPositionInVehicle.pos;
508  }
509  PositionVector b = veh->getBoundingBox();
510  if (b.around(myPositionInVehicle.pos)) {
511  return myPositionInVehicle.pos;
512  } else {
513  return b.getCentroid();
514  }
515  }
516  } else if (isWaiting4Vehicle()
517  && s != nullptr
518  && s->gaming
519  && getCurrentStage()->getOriginStop() != nullptr
520  && s->addSize.getExaggeration(*s, nullptr) > 1) {
521  // shift position away from stop center
524  Position shifted = ref + (pos - ref) * s->personSize.getExaggeration(*s, this);
525  return shifted;
526  }
527  }
528  return MSPerson::getPosition();
529 }
530 
531 
532 double
534  FXMutexLock locker(myLock);
535  if (hasArrived()) {
536  return INVALID_DOUBLE;
537  }
539  return myPositionInVehicle.angle;
540  } else {
541  return MSPerson::getAngle();
542  }
543 }
544 
545 
546 double
548  FXMutexLock locker(myLock);
549  if (hasArrived()) {
550  return INVALID_DOUBLE;
551  }
553 }
554 
555 
556 double
558  FXMutexLock locker(myLock);
559  if (hasArrived()) {
560  return -1;
561  }
563 }
564 
565 
566 double
568  FXMutexLock locker(myLock);
569  if (hasArrived()) {
570  return -1;
571  }
572  return MSPerson::getSpeed();
573 }
574 
575 
576 std::string
578  FXMutexLock locker(myLock);
579  if (hasArrived()) {
580  return "arrived";
581  }
582  // there is always the "start" stage which we do not count here because it is not strictly part of the plan
583  return toString(getCurrentStageIndex()) + " of " + toString(getNumStages() - 1);
584 }
585 
586 
587 std::string
589  FXMutexLock locker(myLock);
590  if (hasArrived()) {
591  return "arrived";
592  }
593  return getEdge()->getID();
594 }
595 
596 
597 std::string
599  FXMutexLock locker(myLock);
600  if (hasArrived()) {
601  return "arrived";
602  }
603  return getFromEdge()->getID();
604 }
605 
606 
607 std::string
609  FXMutexLock locker(myLock);
610  if (hasArrived()) {
611  return "arrived";
612  }
613  return getDestination()->getID();
614 }
615 
616 
617 std::string
619  FXMutexLock locker(myLock);
620  if (hasArrived()) {
621  return "";
622  }
624  if (destStop != nullptr) {
625  return destStop->getID();
626  } else {
627  return "";
628  }
629 }
630 
631 
632 std::string
634  FXMutexLock locker(myLock);
635  if (hasArrived()) {
636  return "";
637  }
639  if (veh != nullptr) {
640  return veh->getID();
641  } else {
642  return "";
643  }
644 }
645 
646 
647 double
649  FXMutexLock locker(myLock);
650  if (hasArrived()) {
651  return -1;
652  }
654  return STEPS2TIME(dynamic_cast<MSStageWaiting*>(getCurrentStage())->getStopEnd() - SIMSTEP);
655  } else {
656  return -1;
657  }
658 }
659 
660 
661 double
663  FXMutexLock locker(myLock);
664  if (hasArrived()) {
665  return INVALID_DOUBLE;
666  }
667  return getCurrentStage()->getArrivalPos();
668 }
669 
670 bool
671 GUIPerson::proceed(MSNet* net, SUMOTime time, const bool vehicleArrived) {
672  // acquire lock before locking the person to avoid mutual deadlock (#9468)
674  FXMutexLock locker(myLock);
675  return MSTransportable::proceed(net, time, vehicleArrived);
676 }
677 
678 // -------------------------------------------------------------------------
679 // GUIPerson - Additional Visualsation methods
680 // -------------------------------------------------------------------------
681 
682 bool
684  return myAdditionalVisualizations.find(parent) != myAdditionalVisualizations.end() && (myAdditionalVisualizations.find(parent)->second & which) != 0;
685 }
686 
687 
688 void
690  if (myAdditionalVisualizations.find(parent) == myAdditionalVisualizations.end()) {
691  myAdditionalVisualizations[parent] = 0;
692  }
693  myAdditionalVisualizations[parent] |= which;
694  parent->addAdditionalGLVisualisation(this);
695 }
696 
697 
698 void
700  myAdditionalVisualizations[parent] &= ~which;
701  parent->removeAdditionalGLVisualisation(this);
702 }
703 
704 bool
707 }
708 
709 
710 /****************************************************************************/
long long int SUMOTime
Definition: GUI.h:35
@ MID_HIDE_CURRENTROUTE
Hide vehicle's current route.
Definition: GUIAppEnum.h:495
@ MID_SHOWPLAN
Show transportable plan.
Definition: GUIAppEnum.h:475
@ MID_HIDE_WALKINGAREA_PATH
Hide persons's path on walkingarea.
Definition: GUIAppEnum.h:529
@ MID_SHOW_WALKINGAREA_PATH
Show persons's path on walkingarea.
Definition: GUIAppEnum.h:527
@ MID_START_TRACK
Start to track a vehicle.
Definition: GUIAppEnum.h:513
@ MID_REMOVE_OBJECT
remove a vehicle or person
Definition: GUIAppEnum.h:525
@ MID_SHOW_CURRENTROUTE
Show vehicle's current route.
Definition: GUIAppEnum.h:493
@ MID_STOP_TRACK
Stop to track a vehicle.
Definition: GUIAppEnum.h:515
@ GLO_MAX
empty max
@ GLO_PERSON
a person
GUISelectedStorage gSelected
A global holder of selected objects.
GUIIcon
An enumeration of icons used by the gui applications.
Definition: GUIIcons.h:33
FXDEFMAP(GUIPerson::GUIPersonPopupMenu) GUIPersonPopupMenuMap[]
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:74
#define TL(string)
Definition: MsgHandler.h:315
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition: SUMOTime.cpp:69
#define STEPS2TIME(x)
Definition: SUMOTime.h:55
#define SIMSTEP
Definition: SUMOTime.h:61
const long long int VTYPEPARS_COLOR_SET
const int VEHPARS_COLOR_SET
const double INVALID_DOUBLE
invalid double
Definition: StdDefs.h:64
T MAX2(T a, T b)
Definition: StdDefs.h:82
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:39
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:78
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:319
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:654
static void pushName(unsigned int name)
push Name
Definition: GLHelper.cpp:139
static void popMatrix()
pop matrix
Definition: GLHelper.cpp:130
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
Definition: GLHelper.cpp:347
static RGBColor getColor()
gets the gl-color
Definition: GLHelper.cpp:660
static void popName()
pop Name
Definition: GLHelper.cpp:148
static void pushMatrix()
push matrix
Definition: GLHelper.cpp:117
static void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048, const int align=0)
Definition: GLHelper.cpp:787
static void drawAction_drawAsPoly(const double angle, const double length, const double width)
static void drawAction_drawAsImage(const double angle, const double length, const double width, const std::string &file, const SUMOVehicleShape guiShape, const double exaggeration)
static void drawAction_drawAsCircle(const double angle, const double length, const double width, double detail)
static void drawAction_drawAsTriangle(const double angle, const double length, const double width)
static FXMenuCommand * buildFXMenuCommand(FXComposite *p, const std::string &text, FXIcon *icon, FXObject *tgt, FXSelector sel, const bool disable=false)
build menu command
Definition: GUIDesigns.cpp:42
The popup menu of a globject.
void buildShowTypeParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the type parameter window.
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.h:156
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, const GUIMainWindow &app) const
Builds an entry which allows to copy the cursor position if geo projection is used,...
GUIGlID getGlID() const
Returns the numerical id of the object.
Definition: GUIGlObject.h:104
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0, bool forceShow=false) const
draw name of item
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Representation of a lane in the micro simulation (gui-version)
Definition: GUILane.h:60
const std::vector< double > & getShapeRotations(bool secondary) const
Definition: GUILane.cpp:1097
const PositionVector & getShape(bool secondary) const override
Definition: GUILane.cpp:1091
const std::vector< double > & getShapeLengths(bool secondary) const
Definition: GUILane.cpp:1103
A window containing a gl-object's parameter.
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
long onCmdStartTrack(FXObject *, FXSelector, void *)
Called if the person shall be tracked.
Definition: GUIPerson.cpp:135
long onCmdShowPlan(FXObject *, FXSelector, void *)
Called if the plan shall be shown.
Definition: GUIPerson.cpp:117
long onCmdRemoveObject(FXObject *, FXSelector, void *)
Called when removing the person.
Definition: GUIPerson.cpp:153
long onCmdHideCurrentRoute(FXObject *, FXSelector, void *)
Called if the current route of the person shall be hidden.
Definition: GUIPerson.cpp:91
long onCmdHideWalkingareaPath(FXObject *, FXSelector, void *)
Called if the walkingarea path of the person shall be hidden.
Definition: GUIPerson.cpp:109
~GUIPersonPopupMenu()
Destructor.
Definition: GUIPerson.cpp:77
long onCmdStopTrack(FXObject *, FXSelector, void *)
Called if the person shall not be tracked any longer.
Definition: GUIPerson.cpp:145
long onCmdShowCurrentRoute(FXObject *, FXSelector, void *)
Called if the current route of the person shall be shown.
Definition: GUIPerson.cpp:81
long onCmdShowWalkingareaPath(FXObject *, FXSelector, void *)
Called if the walkingarea path of the person shall be shown.
Definition: GUIPerson.cpp:99
void setColor(const GUIVisualizationSettings &s) const
sets the color according to the currente settings
Definition: GUIPerson.cpp:379
void drawAction_drawWalkingareaPath(const GUIVisualizationSettings &s) const
draw walking area path
Definition: GUIPerson.cpp:325
bool proceed(MSNet *net, SUMOTime time, const bool vehicleArrived=false) override
Definition: GUIPerson.cpp:671
double getExaggeration(const GUIVisualizationSettings &s) const override
return exaggeration associated with this GLObject
Definition: GUIPerson.cpp:267
std::string getDestinationStopID() const
get destination stop ID
Definition: GUIPerson.cpp:618
std::string getDestinationEdgeID() const
get destination edge ID
Definition: GUIPerson.cpp:608
std::string getStageIndexDescription() const
get stage index description
Definition: GUIPerson.cpp:577
Position getPosition() const override
return the Network coordinate of the person
Definition: GUIPerson.cpp:483
virtual void drawGLAdditional(GUISUMOAbstractView *const parent, const GUIVisualizationSettings &s) const override
Draws additionally triggered visualisations.
Definition: GUIPerson.cpp:343
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
Definition: GUIPerson.cpp:190
double getColorValue(const GUIVisualizationSettings &s, int activeScheme) const override
gets the color value according to the current scheme index
Definition: GUIPerson.cpp:435
~GUIPerson()
destructor
Definition: GUIPerson.cpp:177
double getGUIAngle() const
return the angle of the person (only for drawing centering and tracking)
Definition: GUIPerson.cpp:533
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUIPerson.cpp:273
bool isSelected() const override
whether this person is selected in the GUI
Definition: GUIPerson.cpp:705
Position getGUIPosition(const GUIVisualizationSettings *s=nullptr) const
return the Network coordinate of the person (only for drawing centering and tracking)
Definition: GUIPerson.cpp:493
double getStopDuration() const
get remaining duration of current stop or -1
Definition: GUIPerson.cpp:648
GUIBaseVehicle::Seat myPositionInVehicle
The position of a person while riding a vehicle.
Definition: GUIPerson.h:277
std::map< GUISUMOAbstractView *, int > myAdditionalVisualizations
Enabled visualisations, per view.
Definition: GUIPerson.h:280
@ VO_SHOW_WALKINGAREA_PATH
show the current walkingarea path
Definition: GUIPerson.h:234
@ VO_SHOW_ROUTE
show persons's current route
Definition: GUIPerson.h:236
double getEdgePos() const override
Return the position on the edge.
Definition: GUIPerson.cpp:464
double getSpeed() const override
the current speed of the person
Definition: GUIPerson.cpp:567
double getNaviDegree() const
return the current angle of the person
Definition: GUIPerson.cpp:547
std::string getVehicleID() const
get current vehicle id if applicable
Definition: GUIPerson.cpp:633
GUIPerson(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan, const double speedFactor)
Constructor.
Definition: GUIPerson.cpp:170
std::string getEdgeID() const
get edge ID
Definition: GUIPerson.cpp:588
bool hasActiveAddVisualisation(GUISUMOAbstractView *const parent, int which) const
Returns whether the named feature is enabled in the given view.
Definition: GUIPerson.cpp:683
double getWaitingSeconds() const override
the time this person spent waiting in seconds
Definition: GUIPerson.cpp:557
void setPositionInVehicle(const GUIBaseVehicle::Seat &pos)
Definition: GUIPerson.cpp:373
void removeActiveAddVisualisation(GUISUMOAbstractView *const parent, int which) override
Adds the named visualisation feature to the given view.
Definition: GUIPerson.cpp:699
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
Definition: GUIPerson.cpp:225
FXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
Definition: GUIPerson.h:274
int getDirection() const override
Return the movement directon on the edge.
Definition: GUIPerson.cpp:473
std::string getFromEdgeID() const
ger from edge ID
Definition: GUIPerson.cpp:598
double getStageArrivalPos() const
get stage arrival position
Definition: GUIPerson.cpp:662
static bool setFunctionalColor(int activeScheme, const MSPerson *person, RGBColor &col)
sets the color according to the current scheme index and some vehicle function
Definition: GUIPerson.cpp:390
GUIParameterTableWindow * getTypeParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own type parameter window.
Definition: GUIPerson.cpp:252
void addActiveAddVisualisation(GUISUMOAbstractView *const parent, int which)
Adds the named visualisation feature to the given view.
Definition: GUIPerson.cpp:689
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition: GUIPerson.cpp:283
T getColor(const double value) const
bool removeAdditionalGLVisualisation(GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
bool addAdditionalGLVisualisation(GUIGlObject *const which)
Adds an object to call its additional visualisation method.
virtual GUIGlID getTrackedID() const
get tracked id
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
Stores the information about how to visualize structures.
GUIVisualizationTextSettings personValue
GUIVisualizationSizeSettings addSize
int personQuality
The quality of person drawing.
bool gaming
whether the application is in gaming mode or not
GUIVisualizationSizeSettings personSize
GUIColorer personColorer
The person colorer.
double scale
information about a lane's width (temporary, used for a single view)
bool secondaryShape
whether secondary lane shape shall be drawn
GUIVisualizationTextSettings personName
double angle
The current view rotation angle.
static double naviDegree(const double angle)
Definition: GeomHelper.cpp:191
virtual void removeTransportable(MSTransportable *t) const
Definition: MSEdge.cpp:1145
The simulated network and simulation perfomer.
Definition: MSNet.h:89
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:184
virtual MSTransportableControl & getPersonControl()
Returns the person control.
Definition: MSNet.cpp:1182
Container for pedestrian state and individual position update function.
const WalkingAreaPath * myWalkingAreaPath
the current walkingAreaPath or 0
static const int UNDEFINED_DIRECTION
Definition: MSPModel.h:56
double getChosenSpeedFactor() const
the current speed factor of the transportable (where applicable)
Definition: MSPerson.h:154
bool isJammed() const
whether the person is jammed as defined by the current pedestrian model
virtual MSStoppingPlace * getOriginStop() const
returns the origin stop (if any). only needed for MSStageTrip
Definition: MSStage.h:90
virtual double getArrivalPos() const
Definition: MSStage.h:94
virtual SUMOVehicle * getVehicle() const
Current vehicle in which the transportable is driving (or nullptr)
Definition: MSStage.h:182
MSStoppingPlace * getDestinationStop() const
returns the destination stop (if any)
Definition: MSStage.h:85
virtual void abort(MSTransportable *)
abort this stage (TraCI)
Definition: MSStage.h:146
virtual const MSEdge * getEdge() const
Returns the current edge.
Definition: MSStage.cpp:71
const std::vector< const MSEdge * > & getRoute() const
MSTransportableStateAdapter * getPState() const
Definition: MSStageMoving.h:49
A lane area vehicles can halt at.
Position getCenterPos() const
the position in the middle of the stop shape
void removeTransportable(const MSTransportable *p)
Removes a transportable from this stop.
virtual void erase(MSTransportable *transportable)
removes a single transportable
virtual double getEdgePos() const
Return the position on the edge.
std::string getCurrentStageDescription() const
Returns the current stage description as a string.
virtual double getAngle() const
return the current angle of the transportable
MSStageType getStageType(int next) const
the stage type for the nth next stage
bool isWaiting4Vehicle() const
Whether the transportable waits for a vehicle.
virtual double getSpeed() const
the current speed of the transportable
std::string getStageSummary(int stageIndex) const
return textual summary for the given stage
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
virtual bool proceed(MSNet *net, SUMOTime time, const bool vehicleArrived=false)
MSVehicleType * myVType
This transportable's type. (mainly used for drawing related information Note sure if it is really nec...
const MSVehicleType & getVehicleType() const
Returns the object's "vehicle" type.
virtual Position getPosition() const
Return the Network coordinate of the transportable.
const MSEdge * getFromEdge() const
Returns the departure edge.
int getNumStages() const
Return the total number stages in this person's plan.
int getCurrentStageIndex() const
Return the index of the current stage.
MSStageType getCurrentStageType() const
the current stage type of the transportable
const MSEdge * getEdge() const
Returns the current edge.
MSStage * getCurrentStage() const
Return the current stage.
virtual double getWaitingSeconds() const
the time this transportable spent waiting in seconds
bool hasArrived() const
return whether the person has reached the end of its plan
virtual int getDirection() const
Return the movement directon on the edge.
std::vector< MSStage * > MSTransportablePlan
the structure holding the plan of a transportable
const MSEdge * getDestination() const
Returns the current destination.
The car-following model and parameter.
Definition: MSVehicleType.h:63
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
double getMaxSpeed() const
Get vehicle's (technical) maximum speed [m/s].
double getDesiredMaxSpeed() const
Returns the vehicles's desired maximum speed.
double getMinGap() const
Get the free space in front of vehicles of this class.
bool wasSet(long long int what) const
Returns whether the given parameter was set.
Definition: MSVehicleType.h:80
double getHeight() const
Get the height which vehicles of this class shall have when being drawn.
const RGBColor & getColor() const
Returns this type's color.
const std::string & getID() const
Returns the name of the vehicle type.
Definition: MSVehicleType.h:91
double getLength() const
Get vehicle's length [m].
double getMass() const
Get this vehicle type's mass.
const SUMOVTypeParameter & getParameter() const
const std::string & getID() const
Returns the id.
Definition: Named.h:74
An upper class for objects with additional parameters.
Definition: Parameterised.h:41
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
static const Position INVALID
used to indicate that a position is valid
Definition: Position.h:322
double x() const
Returns the x-position.
Definition: Position.h:55
double y() const
Returns the y-position.
Definition: Position.h:60
A list of positions.
Position getCentroid() const
Returns the centroid (closes the polygon if unclosed)
bool around(const Position &p, double offset=0) const
Returns the information whether the position vector describes a polygon lying around the given point.
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:371
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
Definition: RGBColor.cpp:200
Representation of a vehicle.
Definition: SUMOVehicle.h:62
virtual PositionVector getBoundingBox(double offset=0) const =0
get bounding rectangle
Structure representing possible vehicle parameter.
RGBColor color
The vehicle's color, TraCI may change this.
bool wasSet(int what) const
Returns whether the given parameter was set.
A scoped lock which only triggers on condition.
Definition: ScopedLocker.h:40
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
bool show(const GUIGlObject *o) const
whether to show the text
double scaledSize(double scale, double constFactor=0.1) const
get scale size