Eclipse SUMO - Simulation of Urban MObility
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GUIViewTraffic.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-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
22// A view on the simulation; this view is a microscopic one
23/****************************************************************************/
24#include <config.h>
25
26#ifdef HAVE_FFMPEG
28#endif
29
30#include <iostream>
31#include <utility>
32#include <cmath>
33#include <limits>
36#include <gui/GUIGlobals.h>
37#include <guisim/GUIEdge.h>
38#include <guisim/GUILane.h>
39#include <guisim/GUINet.h>
40#include <guisim/GUIVehicle.h>
43#include <microsim/MSEdge.h>
44#include <microsim/MSGlobals.h>
46#include <microsim/MSLane.h>
68
69#include "GUISUMOViewParent.h"
70#include "GUIViewTraffic.h"
71
72// ===========================================================================
73// member method definitions
74// ===========================================================================
76 FXComposite* p,
77 GUIMainWindow& app,
78 GUISUMOViewParent* parent,
79 GUINet& net, FXGLVisual* glVis,
80 FXGLCanvas* share) :
81 GUISUMOAbstractView(p, app, parent, net.getVisualisationSpeedUp(), glVis, share),
82 myTrackedID(GUIGlObject::INVALID_ID),
83 myTLSGame(OptionsCont::getOptions().getString("game.mode") == "tls")
84#ifdef HAVE_FFMPEG
85 , myCurrentVideo(nullptr)
86#endif
87{}
88
89
93
94
95void
97 // build coloring tools
98 {
99 const std::vector<std::string>& names = gSchemeStorage.getNames();
100 for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) {
101 v->getColoringSchemesCombo()->appendIconItem(i->c_str());
102 if ((*i) == myVisualizationSettings->name) {
104 }
105 }
106 }
107 // for junctions
109 (std::string("\t") + TL("Locate Junctions") + std::string("\t") + TL("Locate a junction within the network.")).c_str(),
112 // for edges
114 (std::string("\t") + TL("Locate Edges") + std::string("\t") + TL("Locate an edge within the network.")).c_str(),
117 // for vehicles
119 (std::string("\t") + TL("Locate Vehicles") + std::string("\t") + TL("Locate a vehicle within the network.")).c_str(),
122 // for persons
124 (std::string("\t") + TL("Locate Persons") + std::string("\t") + TL("Locate a person within the network.")).c_str(),
127 // for containers
129 (std::string("\t") + TL("Locate Container") + std::string("\t") + TL("Locate a container within the network.")).c_str(),
132 // for tls
134 (std::string("\t") + TL("Locate TLS") + std::string("\t") + TL("Locate a tls within the network.")).c_str(),
137 // for additional stuff
139 (std::string("\t") + TL("Locate Additional") + std::string("\t") + TL("Locate an additional structure within the network.")).c_str(),
142 // for pois
144 (std::string("\t") + TL("Locate PoI") + std::string("\t") + TL("Locate a PoI within the network.")).c_str(),
147 // for polygons
149 (std::string("\t") + TL("Locate Polygon") + std::string("\t") + TL("Locate a Polygon within the network.")).c_str(),
152}
153
154
155bool
156GUIViewTraffic::setColorScheme(const std::string& name) {
157 if (!gSchemeStorage.contains(name)) {
158 return false;
159 }
160 if (myGUIDialogViewSettings != nullptr) {
163 }
164 }
167 update();
168 return true;
169}
170
171
172void
175 assert(!scheme.isFixed());
176 double minValue = std::numeric_limits<double>::infinity();
177 double maxValue = -std::numeric_limits<double>::infinity();
178 // retrieve range
179 bool hasMissingData = false;
180 if (objectType == GLO_LANE) {
181 // XXX (see #3409) multi-colors are not currently handled. this is a quick hack
182 if (active == 22) {
183 active = 21; // segment height, fall back to start height
184 } else if (active == 24) {
185 active = 23; // segment incline, fall back to total incline
186 }
187 const MSEdgeVector& edges = MSEdge::getAllEdges();
188 for (MSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
190 const double val = static_cast<GUIEdge*>(*it)->getColorValue(s, active);
191 if (val == s.MISSING_DATA) {
192 hasMissingData = true;
193 continue;
194 }
195 minValue = MIN2(minValue, val);
196 maxValue = MAX2(maxValue, val);
197 } else {
198 const std::vector<MSLane*>& lanes = (*it)->getLanes();
199 for (std::vector<MSLane*>::const_iterator it_l = lanes.begin(); it_l != lanes.end(); it_l++) {
200 const double val = static_cast<GUILane*>(*it_l)->getColorValue(s, active);
201 if (val == s.MISSING_DATA) {
202 hasMissingData = true;
203 continue;
204 }
205 minValue = MIN2(minValue, val);
206 maxValue = MAX2(maxValue, val);
207 }
208 }
209 }
210 } else if (objectType == GLO_VEHICLE) {
212 for (MSVehicleControl::constVehIt it_v = c.loadedVehBegin(); it_v != c.loadedVehEnd(); ++it_v) {
213 const GUIGlObject* veh;
215 veh = static_cast<const GUIMEVehicle*>(it_v->second);
216 } else {
217 veh = static_cast<const GUIVehicle*>(it_v->second);
218 }
219 const double val = veh->getColorValue(s, active);
220 if (val == s.MISSING_DATA) {
221 hasMissingData = true;
222 continue;
223 }
224 minValue = MIN2(minValue, val);
225 maxValue = MAX2(maxValue, val);
226 }
227 } else if (objectType == GLO_JUNCTION) {
228 if (active == 3) {
229 std::set<const MSJunction*> junctions;
230 for (MSEdge* edge : MSEdge::getAllEdges()) {
231 junctions.insert(edge->getFromJunction());
232 junctions.insert(edge->getToJunction());
233 }
234 for (const MSJunction* junction : junctions) {
235 minValue = MIN2(minValue, junction->getPosition().z());
236 maxValue = MAX2(maxValue, junction->getPosition().z());
237 }
238 }
239 }
241 scheme.clear();
242 // add threshold for every distinct value
243 std::set<SVCPermissions> codes;
244 for (MSEdge* edge : MSEdge::getAllEdges()) {
245 for (MSLane* lane : edge->getLanes()) {
246 codes.insert(lane->getPermissions());
247 }
248 }
249 int step = MAX2(1, 360 / (int)codes.size());
250 int hue = 0;
251 for (SVCPermissions p : codes) {
252 scheme.addColor(RGBColor::fromHSV(hue, 1, 1), (double)p);
253 hue = (hue + step) % 360;
254 }
255 return;
256 }
257 buildMinMaxRainbow(s, scheme, rs, minValue, maxValue, hasMissingData);
258}
259
260
261std::vector<std::string>
263 if (GUINet::getGUIInstance() != nullptr) {
265 }
266 return std::vector<std::string>();
267}
268
269
270std::vector<std::string>
272 if (GUINet::getGUIInstance() != nullptr) {
274 }
275 return std::vector<std::string>();
276}
277
278std::vector<std::string>
279GUIViewTraffic::getMeanDataAttrs(const std::string& meanDataID) const {
280 if (GUINet::getGUIInstance() != nullptr) {
281 return GUINet::getGUIInstance()->getMeanDataAttrs(meanDataID);
282 }
283 return std::vector<std::string>();
284}
285
286
287std::vector<std::string>
289 std::set<std::string> keys;
290 for (const MSEdge* e : MSEdge::getAllEdges()) {
291 if (edgeKeys) {
292 for (const auto& item : e->getParametersMap()) {
293 keys.insert(item.first);
294 }
295 } else {
296 for (const auto lane : e->getLanes()) {
297 for (const auto& item : lane->getParametersMap()) {
298 keys.insert(item.first);
299 }
300 }
301 }
302 }
303 return std::vector<std::string>(keys.begin(), keys.end());
304}
305
306
307std::vector<std::string>
308GUIViewTraffic::getVehicleParamKeys(bool /*vTypeKeys*/) const {
309 std::set<std::string> keys;
311 vc->secureVehicles();
312 for (auto vehIt = vc->loadedVehBegin(); vehIt != vc->loadedVehEnd(); ++vehIt) {
313 for (auto kv : vehIt->second->getParameter().getParametersMap()) {
314 keys.insert(kv.first);
315 }
316 }
317 vc->releaseVehicles();
318 return std::vector<std::string>(keys.begin(), keys.end());
319}
320
321std::vector<std::string>
323 std::set<std::string> keys;
324 const ShapeContainer::POIs& pois = static_cast<ShapeContainer&>(GUINet::getInstance()->getShapeContainer()).getPOIs();
325 for (auto item : pois) {
326 for (auto kv : item.second->getParametersMap()) {
327 keys.insert(kv.first);
328 }
329 }
330 return std::vector<std::string>(keys.begin(), keys.end());
331}
332
333int
334GUIViewTraffic::doPaintGL(int mode, const Boundary& bound) {
335 // init view settings
336 glRenderMode(mode);
337 glMatrixMode(GL_MODELVIEW);
339 glDisable(GL_TEXTURE_2D);
340 glDisable(GL_ALPHA_TEST);
341 glEnable(GL_BLEND);
342 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
343 glEnable(GL_DEPTH_TEST);
344
345 // draw decals (if not in grabbing mode)
346 drawDecals();
349 paintGLGrid();
350 }
351 glLineWidth(1);
352 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
353 const float minB[2] = { (float)bound.xmin(), (float)bound.ymin() };
354 const float maxB[2] = { (float)bound.xmax(), (float)bound.ymax() };
355 glEnable(GL_POLYGON_OFFSET_FILL);
356 glEnable(GL_POLYGON_OFFSET_LINE);
358 int hits2 = grid.Search(minB, maxB, *myVisualizationSettings);
360 // Draw additional objects
361 if (myAdditionallyDrawn.size() > 0) {
362 glTranslated(0, 0, -.01);
364 for (auto i : myAdditionallyDrawn) {
365 i.first->drawGLAdditional(this, *myVisualizationSettings);
366 }
368 glTranslated(0, 0, .01);
369 }
371 /*
372 // draw legends
373 glMatrixMode(GL_MODELVIEW);
374 glLoadIdentity();
375 glTranslated(1.-.2, 1.-.5, 0.);
376 glScaled(.2, .5, 1.);
377 GUIColoringSchemesMap<GUILane> &sm = GUIViewTraffic::getLaneSchemesMap(); //!!!
378 sm.getColorer(myVisualizationSettings->laneEdgeMode)->drawLegend();
379 */
380 return hits2;
381}
382
383
384void
386 myTrackedID = id;
388 if (o != nullptr) {
389 GUIBaseVehicle* v = dynamic_cast<GUIBaseVehicle*>(o);
390 if (v != nullptr) {
392 }
393 }
394}
395
396
397void
401
402
405 return myTrackedID;
406}
407
408
409void
411 if (myTLSGame) {
413 MSTrafficLightLogic* minTll = nullptr;
414 double minDist = std::numeric_limits<double>::infinity();
415 for (MSTrafficLightLogic* const tll : tlsControl.getAllLogics()) {
416 if (tlsControl.isActive(tll) && tll->getProgramID() != "off") {
417 // get the links
418 const MSTrafficLightLogic::LaneVector& lanes = tll->getLanesAt(0);
419 if (lanes.size() > 0) {
420 const Position& endPos = lanes[0]->getShape().back();
421 if (endPos.distanceTo(pos) < minDist) {
422 minDist = endPos.distanceTo(pos);
423 minTll = tll;
424 }
425 }
426 }
427 }
428 if (minTll != nullptr) {
429 if (minTll->getPhaseNumber() == 0) {
430 // MSRailSignal
431 return;
432 }
433 const int ci = minTll->getCurrentPhaseIndex();
434 const int n = minTll->getPhaseNumber();
435 int greenCount = 0;
436 for (auto& phase : minTll->getPhases()) {
437 if (phase->isGreenPhase()) {
438 greenCount++;
439 }
440 }
441 int nextPhase = (ci + 1) % n;
442 SUMOTime nextDuration = 0;
443 if (minTll->getCurrentPhaseDef().isGreenPhase() || (greenCount == 1 && minTll->getCurrentPhaseDef().isAllRedPhase())) {
444 nextDuration = minTll->getPhase(nextPhase).duration;
445 } else {
446 // we are in transition to a green phase
447 // -> skip forward to the transition into the next green phase
448 // but ensure that the total transition time is maintained
449 // taking into account how much time was already spent
450 SUMOTime spentTransition = minTll->getSpentDuration();
451 // the transition may consist of more than one phase so we
452 // search backwards until the prior green phase
453 for (int i = ci - 1; i != ci; i--) {
454 if (i < 0) {
455 i = n - 1;
456 }
457 if (minTll->getPhase(i).isGreenPhase()) {
458 break;
459 }
460 spentTransition += minTll->getPhase(i).duration;
461 }
462 // now we skip past the next greenphase
463 int numGreen = 0;
464 int i = nextPhase;
465 for (; numGreen < 2; i = (i + 1) % n) {
466 if (minTll->getPhase(i).isGreenPhase()) {
467 numGreen++;
468 continue;
469 }
470 // transition after the next green
471 if (numGreen == 1) {
472 SUMOTime dur = minTll->getPhase(i).duration;
473 if (dur <= spentTransition) {
474 spentTransition -= dur;
475 } else {
476 nextPhase = i;
477 nextDuration = dur - spentTransition;
478 break;
479 }
480 }
481 }
482 }
483 minTll->changeStepAndDuration(tlsControl, MSNet::getInstance()->getCurrentTimeStep(), nextPhase, nextDuration);
484 update();
485 }
486 } else {
487 // DRT game
489 return;
490 }
491 const auto& sel = gSelected.getSelected(GLO_VEHICLE);
492 if (sel.size() == 0) {
493 // find closest pt vehicle
494 double minDist = std::numeric_limits<double>::infinity();
495 GUIVehicle* closest = nullptr;
499 for (it = vc.loadedVehBegin(); it != end; ++it) {
500 GUIVehicle* veh = dynamic_cast<GUIVehicle*>(it->second);
501 assert(veh != 0);
502 if (veh->getParameter().line != "") {
503 const double dist = veh->getPosition().distanceTo2D(pos);
504 if (dist < minDist) {
505 minDist = dist;
506 closest = veh;
507 }
508 }
509 }
510 if (closest != nullptr) {
511 gSelected.select(closest->getGlID());
513 }
514 } else {
515 // find closest pt stop
516 double minDist = std::numeric_limits<double>::infinity();
517 MSStoppingPlace* closestStop = nullptr;
519 for (auto it = stops.begin(); it != stops.end(); ++it) {
520 MSStoppingPlace* stop = it->second;
521 const double dist = pos.distanceTo2D(stop->getLane().geometryPositionAtOffset(stop->getEndLanePosition()));
522 if (dist < minDist) {
523 minDist = dist;
524 closestStop = stop;
525 }
526 }
527 if (closestStop != 0) {
528 GUIGlID id = *sel.begin();
530 assert(veh != 0);
531 MSLane* lane = veh->getMutableLane();
532 lane->getVehiclesSecure();
533 veh->rerouteDRTStop(closestStop);
535 lane->releaseVehicles();
536 }
537 }
538 }
539}
540
541
542void
544 const auto& sel = gSelected.getSelected(GLO_VEHICLE);
545 if (sel.size() > 0) {
546 GUIGlID id = *sel.begin();
548 if (veh != 0) {
550 }
552 }
554}
555
556
561
562
563long
564GUIViewTraffic::onCmdCloseLane(FXObject*, FXSelector, void*) {
565 GUILane* lane = getLaneUnderCursor();
566 if (lane != nullptr) {
567 lane->closeTraffic();
569 update();
570 }
571 return 1;
572}
573
574
575long
576GUIViewTraffic::onCmdCloseEdge(FXObject*, FXSelector, void*) {
577 GUILane* lane = getLaneUnderCursor();
578 if (lane != nullptr) {
579 dynamic_cast<GUIEdge*>(&lane->getEdge())->closeTraffic(lane);
581 update();
582 }
583 return 1;
584}
585
586
587long
588GUIViewTraffic::onCmdAddRerouter(FXObject*, FXSelector, void*) {
589 GUILane* lane = getLaneUnderCursor();
590 if (lane != nullptr) {
591 dynamic_cast<GUIEdge*>(&lane->getEdge())->addRerouter();
593 update();
594 }
595 return 1;
596}
597
598
599long
600GUIViewTraffic::showLaneReachability(GUILane* lane, FXObject* menu, FXSelector) {
601 if (lane != nullptr) {
602 // reset
603 const double UNREACHED = INVALID_DOUBLE;
605 for (const MSEdge* const e : MSEdge::getAllEdges()) {
606 for (MSLane* const l : e->getLanes()) {
607 GUILane* gLane = dynamic_cast<GUILane*>(l);
608 gLane->setReachability(UNREACHED);
609 }
610 }
611 // prepare
612 FXMenuCommand* mc = dynamic_cast<FXMenuCommand*>(menu);
613 const SUMOVehicleClass svc = SumoVehicleClassStrings.get(mc->getText().text());
614 const double defaultMaxSpeed = SUMOVTypeParameter::VClassDefaultValues(svc).desiredMaxSpeed;
615 // find reachable
616 std::map<MSEdge*, double> reachableEdges;
617 reachableEdges[&lane->getEdge()] = 0;
618 MSEdgeVector check;
619 check.push_back(&lane->getEdge());
620 while (check.size() > 0) {
621 MSEdge* e = check.front();
622 check.erase(check.begin());
623 double traveltime = reachableEdges[e];
624 for (MSLane* const l : e->getLanes()) {
625 if (l->allowsVehicleClass(svc)) {
626 GUILane* gLane = dynamic_cast<GUILane*>(l);
627 gSelected.select(gLane->getGlID(), false);
628 gLane->setReachability(traveltime);
629 }
630 }
631 const double dt = e->getLength() / MIN2(e->getSpeedLimit(), defaultMaxSpeed);
632 // ensure algorithm termination
633 traveltime += MAX2(dt, NUMERICAL_EPS);
634 for (MSEdge* const nextEdge : e->getSuccessors(svc)) {
635 if (reachableEdges.count(nextEdge) == 0 ||
636 // revisit edge via faster path
637 reachableEdges[nextEdge] > traveltime) {
638 reachableEdges[nextEdge] = traveltime;
639 check.push_back(nextEdge);
640 }
641 }
642 if (svc == SVC_PEDESTRIAN) {
643 // can also walk backwards
644 for (MSEdge* const prevEdge : e->getPredecessors()) {
645 if (prevEdge->allowedLanes(*e, svc) != nullptr &&
646 (reachableEdges.count(prevEdge) == 0 ||
647 // revisit edge via faster path
648 reachableEdges[prevEdge] > traveltime)) {
649 reachableEdges[prevEdge] = traveltime;
650 check.push_back(prevEdge);
651 }
652 }
653 // and connect to arbitrary incoming if there are no walkingareas
655 for (const MSEdge* const in_const : e->getToJunction()->getIncoming()) {
656 MSEdge* in = const_cast<MSEdge*>(in_const);
657 if ((in->getPermissions() & svc) == svc &&
658 (reachableEdges.count(in) == 0 ||
659 // revisit edge via faster path
660 reachableEdges[in] > traveltime)) {
661 reachableEdges[in] = traveltime;
662 check.push_back(in);
663 }
664 }
665 }
666 }
667 }
669 }
670 return 1;
671}
672
673
674long
675GUIViewTraffic::onCmdShowReachability(FXObject* menu, FXSelector selector, void*) {
676 GUILane* lane = getLaneUnderCursor();
677 if (lane != nullptr) {
678 // reset
679 showLaneReachability(lane, menu, selector);
680 // switch to 'color by selection' unless coloring 'by reachability'
683 }
684 update();
685 }
686 return 1;
687}
688
689
690GUILane*
692 if (makeCurrent()) {
693 int id = getObjectUnderCursor();
694 if (id != 0) {
696 if (o != nullptr) {
697 return dynamic_cast<GUILane*>(o);
698 }
699 }
700 makeNonCurrent();
701 }
702 return nullptr;
703}
704
705
706long
707GUIViewTraffic::onDoubleClicked(FXObject*, FXSelector, void*) {
708 // leave fullscreen mode
709 if (myApp->isFullScreen()) {
710 myApp->onCmdFullScreen(nullptr, 0, nullptr);
711 } else {
712 stopTrack();
713 }
714 return 1;
715}
716
717
718
719void
720GUIViewTraffic::saveFrame(const std::string& destFile, FXColor* buf) {
721#ifdef HAVE_FFMPEG
722 if (myCurrentVideo == nullptr) {
723 myCurrentVideo = new GUIVideoEncoder(destFile.c_str(), getWidth(), getHeight(), myApp->getDelay());
724 }
725 myCurrentVideo->writeFrame((uint8_t*)buf);
726#else
727 UNUSED_PARAMETER(destFile);
728 UNUSED_PARAMETER(buf);
729#endif
730}
731
732
733void
735#ifdef HAVE_FFMPEG
736 if (myCurrentVideo != nullptr) {
737 delete myCurrentVideo;
738 myCurrentVideo = nullptr;
739 }
740#endif
741}
742
743
744void
746#ifdef HAVE_FFMPEG
747 if (myCurrentVideo != nullptr) {
749 }
750#endif
752}
753
754
755const std::vector<SUMOTime>
759
760
761void
763 GUIShapeContainer& shapeContainer = dynamic_cast<GUIShapeContainer&>(GUINet::getInstance()->getShapeContainer());
764 if (s.showPedestrianNetwork) {
765 shapeContainer.removeInactivePolygonTypes(std::set<std::string> {"jupedsim.pedestrian_network"});
766 } else {
767 shapeContainer.addInactivePolygonTypes(std::set<std::string> {"jupedsim.pedestrian_network"});
768 }
769 update();
770}
771
772
773void
775 GUIShapeContainer& shapeContainer = dynamic_cast<GUIShapeContainer&>(GUINet::getInstance()->getShapeContainer());
776 for (auto polygonwithID : shapeContainer.getPolygons()) {
777 if (polygonwithID.second->getShapeType() == "jupedsim.pedestrian_network") {
778 polygonwithID.second->setShapeColor(s.pedestrianNetworkColor);
779 }
780 }
781 update();
782}
783
784/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition GUIAppEnum.h:182
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition GUIAppEnum.h:172
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition GUIAppEnum.h:192
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition GUIAppEnum.h:180
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition GUIAppEnum.h:178
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition GUIAppEnum.h:190
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignButtonPopup
checkable button placed in popup (for example, locate buttons)
Definition GUIDesigns.h:112
unsigned int GUIGlID
Definition GUIGlObject.h:44
GUIGlObjectType
@ GLO_JUNCTION
a junction
@ GLO_LANE
a lane
@ GLO_VEHICLE
a vehicle
GUISelectedStorage gSelected
A global holder of selected objects.
@ LOCATEVEHICLE
@ LOCATEPERSON
@ LOCATECONTAINER
@ LOCATEJUNCTION
std::vector< MSEdge * > MSEdgeVector
Definition MSEdge.h:73
#define TL(string)
Definition MsgHandler.h:305
#define INVALID_ID
SUMOTime DELTA_T
Definition SUMOTime.cpp:38
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2, false)
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_PEDESTRIAN
pedestrian
@ SUMO_TAG_BUS_STOP
A bus stop.
const double INVALID_DOUBLE
invalid double
Definition StdDefs.h:64
const double SUMO_const_laneWidth
Definition StdDefs.h:48
T MIN2(T a, T b)
Definition StdDefs.h:76
T MAX2(T a, T b)
Definition StdDefs.h:82
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
double ymin() const
Returns minimum y-coordinate.
Definition Boundary.cpp:127
double xmin() const
Returns minimum x-coordinate.
Definition Boundary.cpp:115
double ymax() const
Returns maximum y-coordinate.
Definition Boundary.cpp:133
double xmax() const
Returns maximum x-coordinate.
Definition Boundary.cpp:121
static void popMatrix()
pop matrix
Definition GLHelper.cpp:131
static void pushMatrix()
push matrix
Definition GLHelper.cpp:118
A MSVehicle extended by some values for usage within the gui.
void removeActiveAddVisualisation(GUISUMOAbstractView *const parent, int which)
Adds the named visualisation feature to the given view.
void addActiveAddVisualisation(GUISUMOAbstractView *const parent, int which)
Adds the named visualisation feature to the given view.
@ VO_TRACK
track the vehicle (only needed for cleaning up)
@ VO_SHOW_FUTURE_ROUTE
show vehicle's current continued from the current position
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
const std::vector< std::string > & getNames() const
Returns a list of stored settings names.
std::string getCurrentScheme() const
Returns the name of the currently chosen scheme.
void setCurrentScheme(const std::string &)
Sets the named scheme as the current.
A road/street connecting two junctions (gui-version)
Definition GUIEdge.h:51
double getColorValue(const GUIVisualizationSettings &s, int activeScheme) const override
gets the color value according to the current scheme index
Definition GUIEdge.cpp:540
MFXComboBoxIcon * getColoringSchemesCombo()
return combobox with the current coloring schemes (standard, fastest standard, real world....
FXPopup * getLocatorPopup()
@ brief return a pointer to locator popup
virtual double getColorValue(const GUIVisualizationSettings &, int) const
static const GUIGlID INVALID_ID
Definition GUIGlObject.h:73
GUIGlID getGlID() const
Returns the numerical id of the object.
void unblockObject(GUIGlID id)
Marks an object as unblocked.
GUIGlObject * getObjectBlocking(GUIGlID id) const
Returns the object from the container locking it.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
static bool gSecondaryShape
whether secondary shapes are currently being drawn
Definition GUIGlobals.h:49
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
void setReachability(double value)
Definition GUILane.h:246
double getColorValue(const GUIVisualizationSettings &s, int activeScheme) const override
gets the color value according to the current scheme index
Definition GUILane.cpp:1304
void closeTraffic(bool rebuildAllowed=true)
close this lane for traffic
Definition GUILane.cpp:1591
A MSVehicle extended by some values for usage within the gui.
virtual const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
virtual double getDelay() const
Returns the delay (should be overwritten by subclasses if applicable)
virtual long onCmdFullScreen(FXObject *, FXSelector, void *)
Toggle full screen mode.
bool isGaming() const
return whether the gui is in gaming mode
MFXStaticToolTip * getStaticTooltipMenu() const
get static toolTip for menus
A MSNet extended by some values for usage within the gui.
Definition GUINet.h:82
GUIVehicleControl * getGUIVehicleControl()
Returns the vehicle control.
Definition GUINet.cpp:582
void unlock()
release exclusive access to the simulation state
Definition GUINet.cpp:594
std::vector< std::string > getEdgeDataAttrs() const
return list of loaded edgeData attributes
Definition GUINet.cpp:734
SUMORTree & getVisualisationSpeedUp()
Returns the RTree used for visualisation speed-up.
Definition GUINet.h:285
std::vector< std::string > getMeanDataIDs() const
return list of loaded edgeData ids (being computed in the current simulation)
Definition GUINet.cpp:744
void lock()
grant exclusive access to the simulation state
Definition GUINet.cpp:588
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
Definition GUINet.cpp:572
std::vector< std::string > getMeanDataAttrs(const std::string &meanDataID) const
return list of available attributes for the given meanData id
Definition GUINet.cpp:755
const std::string & getName() const
int addColor(const T &color, const double threshold, const std::string &name="")
virtual void checkSnapshots()
Checks whether it is time for a snapshot.
void paintGLGrid() const
paints a grid
FXbool makeCurrent()
A reimplementation due to some internal reasons.
void buildMinMaxRainbow(const GUIVisualizationSettings &s, GUIColorScheme &scheme, const GUIVisualizationRainbowSettings &rs, double minValue, double maxValue, bool hasMissingData)
helper function for buildColorRainbow
void addSnapshot(SUMOTime time, const std::string &file, const int w=-1, const int h=-1)
Sets the snapshot time to file map.
GUIGlID getObjectUnderCursor()
returns the id of the front object under the cursor using GL_SELECT
GUIMainWindow * myApp
The application.
double m2p(double meter) const
meter-to-pixels conversion method
GUIVisualizationSettings * myVisualizationSettings
visualization settings
GUIDialog_ViewSettings * myGUIDialogViewSettings
Visualization changer.
std::map< GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
void drawDecals()
Draws the stored decals.
A single child window which contains a view of the simulation area.
void notifyChanged()
inform the update target of earlier changes
void clear()
Clears the list of selected objects.
void select(GUIGlID id, bool update=true)
Adds the object with the given id.
const std::unordered_set< GUIGlID > & getSelected() const
Returns the set of ids of all selected objects.
Storage for geometrical objects extended by mutexes.
void removeInactivePolygonTypes(std::set< std::string > inactivePolygonTypes)
Remove some polygon types that were deemed as inactive.
void addInactivePolygonTypes(std::set< std::string > inactivePolygonTypes)
Adds new polygon types to the set of inactive ones.
The class responsible for building and deletion of vehicles (gui-version)
void secureVehicles()
lock access to vehicle removal/additions for thread synchronization
void releaseVehicles()
unlock access to vehicle removal/additions for thread synchronization
A MSVehicle extended by some values for usage within the gui.
Definition GUIVehicle.h:51
Position getPosition(const double offset=0) const
Return current position (x/y, cartesian)
Definition GUIVehicle.h:71
void rerouteDRTStop(MSStoppingPlace *busStop)
handle route to accomodate to given stop
A simple video encoder from RGBA pics to anything ffmpeg can handle.
void saveFrame(const std::string &destFile, FXColor *buf) override
Adds a frame to a video snapshot which will be initialized if necessary.
SUMOTime getCurrentTimeStep() const override
get the current simulation time
std::vector< std::string > getVehicleParamKeys(bool vTypeKeys) const override
return list of available vehicle parameters
virtual void buildViewToolBars(GUIGlChildWindow *) override
builds the view toolbars
std::vector< std::string > getMeanDataIDs() const override
return list of loaded edgeData ids (being computed in the current simulation)
virtual ~GUIViewTraffic()
destructor
long onCmdCloseLane(FXObject *, FXSelector, void *) override
interaction with the simulation
std::vector< std::string > getMeanDataAttrs(const std::string &meanDataID) const override
return list of available attributes for the given meanData id
void stopTrack() override
Stops vehicle tracking.
int doPaintGL(int mode, const Boundary &bound) override
paint GL
GUIGlID getTrackedID() const override
Returns the id of the tracked vehicle (-1 if none)
std::vector< std::string > getPOIParamKeys() const override
return list of available POI parameters
long onCmdCloseEdge(FXObject *, FXSelector, void *) override
void onGamingClick(Position pos) override
handle mouse click in gaming mode
void endSnapshot() override
Ends a video snapshot.
long onCmdShowReachability(FXObject *, FXSelector, void *) override
highlight edges according to reachability
void drawPedestrianNetwork(const GUIVisualizationSettings &s) const override
Draw (or not) the JuPedSim pedestrian network.
void checkSnapshots() override
Checks whether it is time for a snapshot.
bool setColorScheme(const std::string &name) override
set color scheme
const std::vector< SUMOTime > retrieveBreakpoints() const override
retrieve breakpoints from the current runThread
GUILane * getLaneUnderCursor() override
returns the GUILane at cursor position (implementation depends on view)
void buildColorRainbow(const GUIVisualizationSettings &s, GUIColorScheme &scheme, int active, GUIGlObjectType objectType, const GUIVisualizationRainbowSettings &rs) override
recalibrate color scheme according to the current value range
void startTrack(int id) override
Starts vehicle tracking.
long onDoubleClicked(FXObject *, FXSelector, void *) override
std::vector< std::string > getEdgeDataAttrs() const override
return list of loaded edgeData attributes
static long showLaneReachability(GUILane *lane, FXObject *, FXSelector)
long onCmdAddRerouter(FXObject *, FXSelector, void *) override
std::vector< std::string > getEdgeLaneParamKeys(bool edgeKeys) const override
return list of available edge parameters
void changePedestrianNetworkColor(const GUIVisualizationSettings &s) const override
Change the color of the JuPedSim pedestrian network.
bool myTLSGame
whether game mode was set to 'tls'
void onGamingRightClick(Position pos) override
Stores the information about how to visualize structures.
bool showPedestrianNetwork
Flag for visualizing the pedestrian network generated for JuPedSim.
std::string name
The name of this setting.
RGBColor pedestrianNetworkColor
The color of the pedestrian network generated for JuPedSim.
bool gaming
whether the application is in gaming mode or not
bool showGrid
Information whether a grid shall be shown.
double scale
information about a lane's width (temporary, used for a single view)
bool secondaryShape
whether secondary lane shape shall be drawn
GUIColorer laneColorer
The lane colorer.
static const std::string SCHEME_NAME_PERMISSION_CODE
long setCurrentItem(const FXint index, FXbool notify=FALSE)
Set the current item (index is zero-based)
FXint getNumItems() const
Return the number of items in the list.
FXint appendIconItem(const FXString &text, FXIcon *icon=nullptr, FXColor bgColor=FXRGB(255, 255, 255), void *ptr=nullptr)
append icon item in the last position
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
A road/street connecting two junctions.
Definition MSEdge.h:77
static const MSEdgeVector & getAllEdges()
Returns all edges with a numerical id.
Definition MSEdge.cpp:1086
SVCPermissions getPermissions() const
Returns the combined permissions of all lanes of this edge.
Definition MSEdge.h:649
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
Definition MSEdge.h:168
double getSpeedLimit() const
Returns the speed limit of the edge @caution The speed limit of the first lane is retured; should pro...
Definition MSEdge.cpp:1158
const MSJunction * getToJunction() const
Definition MSEdge.h:418
double getLength() const
return the length of the edge
Definition MSEdge.h:685
const MSEdgeVector & getPredecessors() const
Definition MSEdge.h:409
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition MSEdge.cpp:1258
static bool gUseMesoSim
Definition MSGlobals.h:106
The base class for an intersection.
Definition MSJunction.h:58
const ConstMSEdgeVector & getIncoming() const
Definition MSJunction.h:108
Representation of a lane in the micro simulation.
Definition MSLane.h:84
virtual const VehCont & getVehiclesSecure() const
Returns the vehicles container; locks it for microsimulation.
Definition MSLane.h:483
virtual void releaseVehicles() const
Allows to use the container for microsimulation again.
Definition MSLane.h:513
MSEdge & getEdge() const
Returns the lane's edge.
Definition MSLane.h:764
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
Definition MSLane.h:560
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition MSNet.cpp:186
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
Definition MSNet.h:456
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
Definition MSNet.h:325
bool hasPedestrianNetwork() const
return whether the network contains walkingareas and crossings
Definition MSNet.h:800
ShapeContainer & getShapeContainer()
Returns the shapes container.
Definition MSNet.h:506
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition MSNet.h:383
const NamedObjectCont< MSStoppingPlace * > & getStoppingPlaces(SumoXMLTag category) const
Definition MSNet.cpp:1439
SUMOTime duration
The duration of the phase.
bool isGreenPhase() const
Returns whether this phase is a pure "green" phase.
bool isAllRedPhase() const
Returns whether this phase is an "all red" phase.
A lane area vehicles can halt at.
double getEndLanePosition() const
Returns the end position of this stop.
const MSLane & getLane() const
Returns the lane this stop is located at.
A class that stores and controls tls and switching of their programs.
std::vector< MSTrafficLightLogic * > getAllLogics() const
Returns a vector which contains all logics.
bool isActive(const MSTrafficLightLogic *tl) const
Returns whether the given tls program is the currently active for his tls.
The parent class for traffic light logics.
virtual const MSPhaseDefinition & getCurrentPhaseDef() const =0
Returns the definition of the current phase.
virtual int getPhaseNumber() const =0
Returns the number of phases.
virtual int getCurrentPhaseIndex() const =0
Returns the current index within the program.
std::vector< MSLane * > LaneVector
Definition of the list of arrival lanes subjected to this tls.
virtual void changeStepAndDuration(MSTLLogicControl &tlcontrol, SUMOTime simStep, int step, SUMOTime stepDuration)=0
Changes the current phase and her duration.
virtual const MSPhaseDefinition & getPhase(int givenstep) const =0
Returns the definition of the phase from the given position within the plan.
virtual const Phases & getPhases() const =0
Returns the phases of this tls program.
SUMOTime getSpentDuration(SUMOTime simStep=-1) const
Returns the duration spent in the current phase.
The class responsible for building and deletion of vehicles.
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
constVehIt loadedVehBegin() const
Returns the begin of the internal vehicle map.
constVehIt loadedVehEnd() const
Returns the end of the internal vehicle map.
MSLane * getMutableLane() const
Returns the lane the vehicle is on Non const version indicates that something volatile is going on.
Definition MSVehicle.h:589
IDMap::const_iterator begin() const
Returns a reference to the begin iterator for the internal map.
IDMap::const_iterator end() const
Returns a reference to the end iterator for the internal map.
A storage for options typed value containers)
Definition OptionsCont.h:89
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
Definition Position.h:273
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimensions
Definition Position.h:263
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:403
A RT-tree for efficient storing of SUMO's GL-objects.
Definition SUMORTree.h:66
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
Definition SUMORTree.h:114
std::string line
The vehicle's line (mainly for public transport)
Storage for geometrical objects.
const Polygons & getPolygons() const
Returns all polygons.
#define UNUSED_PARAMETER(x)
struct for default values that depend of VClass
double desiredMaxSpeed
The vehicle type's desired maximum speed [m/s].