Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
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>
44#include <microsim/MSEdge.h>
45#include <microsim/MSGlobals.h>
47#include <microsim/MSLane.h>
69
70#include "GUISUMOViewParent.h"
71#include "GUIViewTraffic.h"
72
73// ===========================================================================
74// member method definitions
75// ===========================================================================
77 FXComposite* p,
78 GUIMainWindow& app,
79 GUISUMOViewParent* parent,
80 GUINet& net, FXGLVisual* glVis,
81 FXGLCanvas* share) :
82 GUISUMOAbstractView(p, app, parent, net.getVisualisationSpeedUp(), glVis, share),
83 myTrackedID(GUIGlObject::INVALID_ID),
84 myTLSGame(OptionsCont::getOptions().getString("game.mode") == "tls")
85#ifdef HAVE_FFMPEG
86 , myCurrentVideo(nullptr)
87#endif
88{}
89
90
94
95
96void
98 // build coloring tools
99 {
100 const std::vector<std::string>& names = gSchemeStorage.getNames();
101 for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) {
102 v->getColoringSchemesCombo()->appendIconItem(i->c_str());
103 if ((*i) == myVisualizationSettings->name) {
105 }
106 }
107 }
108 // for junctions
110 (std::string("\t") + TL("Locate Junctions") + std::string("\t") + TL("Locate a junction within the network.")).c_str(),
113 // for edges
115 (std::string("\t") + TL("Locate Edges") + std::string("\t") + TL("Locate an edge within the network.")).c_str(),
118 // for vehicles
120 (std::string("\t") + TL("Locate Vehicles") + std::string("\t") + TL("Locate a vehicle within the network.")).c_str(),
123 // for persons
125 (std::string("\t") + TL("Locate Persons") + std::string("\t") + TL("Locate a person within the network.")).c_str(),
128 // for containers
130 (std::string("\t") + TL("Locate Container") + std::string("\t") + TL("Locate a container within the network.")).c_str(),
133 // for tls
135 (std::string("\t") + TL("Locate TLS") + std::string("\t") + TL("Locate a tls within the network.")).c_str(),
138 // for additional stuff
140 (std::string("\t") + TL("Locate Additional") + std::string("\t") + TL("Locate an additional structure within the network.")).c_str(),
143 // for pois
145 (std::string("\t") + TL("Locate PoI") + std::string("\t") + TL("Locate a PoI within the network.")).c_str(),
148 // for polygons
150 (std::string("\t") + TL("Locate Polygon") + std::string("\t") + TL("Locate a Polygon within the network.")).c_str(),
153}
154
155
156bool
157GUIViewTraffic::setColorScheme(const std::string& name) {
158 if (!gSchemeStorage.contains(name)) {
159 return false;
160 }
161 if (myGUIDialogViewSettings != nullptr) {
164 }
165 }
168 update();
169 return true;
170}
171
172
173void
176 assert(!scheme.isFixed());
177 double minValue = std::numeric_limits<double>::infinity();
178 double maxValue = -std::numeric_limits<double>::infinity();
179 // retrieve range
180 bool hasMissingData = false;
181 if (objectType == GLO_LANE) {
182 // XXX (see #3409) multi-colors are not currently handled. this is a quick hack
183 if (active == 22) {
184 active = 21; // segment height, fall back to start height
185 } else if (active == 24) {
186 active = 23; // segment incline, fall back to total incline
187 }
188 const MSEdgeVector& edges = MSEdge::getAllEdges();
189 for (MSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
191 const double val = static_cast<GUIEdge*>(*it)->getColorValue(s, active);
192 if (val == s.MISSING_DATA) {
193 hasMissingData = true;
194 continue;
195 }
196 minValue = MIN2(minValue, val);
197 maxValue = MAX2(maxValue, val);
198 } else {
199 const std::vector<MSLane*>& lanes = (*it)->getLanes();
200 for (std::vector<MSLane*>::const_iterator it_l = lanes.begin(); it_l != lanes.end(); it_l++) {
201 const double val = static_cast<GUILane*>(*it_l)->getColorValue(s, active);
202 if (val == s.MISSING_DATA) {
203 hasMissingData = true;
204 continue;
205 }
206 minValue = MIN2(minValue, val);
207 maxValue = MAX2(maxValue, val);
208 }
209 }
210 }
211 } else if (objectType == GLO_VEHICLE) {
213 for (MSVehicleControl::constVehIt it_v = c.loadedVehBegin(); it_v != c.loadedVehEnd(); ++it_v) {
214 const GUIGlObject* veh;
216 veh = static_cast<const GUIMEVehicle*>(it_v->second);
217 } else {
218 veh = static_cast<const GUIVehicle*>(it_v->second);
219 }
220 const double val = veh->getColorValue(s, active);
221 if (val == s.MISSING_DATA) {
222 hasMissingData = true;
223 continue;
224 }
225 minValue = MIN2(minValue, val);
226 maxValue = MAX2(maxValue, val);
227 }
228 } else if (objectType == GLO_JUNCTION) {
229 if (active == 3) {
230 std::set<const MSJunction*> junctions;
231 for (MSEdge* edge : MSEdge::getAllEdges()) {
232 junctions.insert(edge->getFromJunction());
233 junctions.insert(edge->getToJunction());
234 }
235 for (const MSJunction* junction : junctions) {
236 minValue = MIN2(minValue, junction->getPosition().z());
237 maxValue = MAX2(maxValue, junction->getPosition().z());
238 }
239 }
240 }
242 scheme.clear();
243 // add threshold for every distinct value
244 std::set<SVCPermissions> codes;
245 for (MSEdge* edge : MSEdge::getAllEdges()) {
246 for (MSLane* lane : edge->getLanes()) {
247 codes.insert(lane->getPermissions());
248 }
249 }
250 int step = MAX2(1, 360 / (int)codes.size());
251 int hue = 0;
252 for (SVCPermissions p : codes) {
253 scheme.addColor(RGBColor::fromHSV(hue, 1, 1), (double)p);
254 hue = (hue + step) % 360;
255 }
256 return;
257 }
258 buildMinMaxRainbow(s, scheme, rs, minValue, maxValue, hasMissingData);
259}
260
261
262std::vector<std::string>
264 if (GUINet::getGUIInstance() != nullptr) {
266 }
267 return std::vector<std::string>();
268}
269
270
271std::vector<std::string>
273 if (GUINet::getGUIInstance() != nullptr) {
275 }
276 return std::vector<std::string>();
277}
278
279std::vector<std::string>
280GUIViewTraffic::getMeanDataAttrs(const std::string& meanDataID) const {
281 if (GUINet::getGUIInstance() != nullptr) {
282 return GUINet::getGUIInstance()->getMeanDataAttrs(meanDataID);
283 }
284 return std::vector<std::string>();
285}
286
287
288std::vector<std::string>
290 std::set<std::string> keys;
291 for (const MSEdge* e : MSEdge::getAllEdges()) {
292 if (edgeKeys) {
293 for (const auto& item : e->getParametersMap()) {
294 keys.insert(item.first);
295 }
296 } else {
297 for (const auto lane : e->getLanes()) {
298 for (const auto& item : lane->getParametersMap()) {
299 keys.insert(item.first);
300 }
301 }
302 }
303 }
304 return std::vector<std::string>(keys.begin(), keys.end());
305}
306
307
308std::vector<std::string>
309GUIViewTraffic::getVehicleParamKeys(bool /*vTypeKeys*/) const {
310 std::set<std::string> keys;
311 MSVehicleControl* vc = nullptr;
314 } else {
316 }
317 vc->secureVehicles();
318 for (auto vehIt = vc->loadedVehBegin(); vehIt != vc->loadedVehEnd(); ++vehIt) {
319 for (auto kv : vehIt->second->getParameter().getParametersMap()) {
320 keys.insert(kv.first);
321 }
322 }
323 vc->releaseVehicles();
324 return std::vector<std::string>(keys.begin(), keys.end());
325}
326
327std::vector<std::string>
329 std::set<std::string> keys;
330 const ShapeContainer::POIs& pois = static_cast<ShapeContainer&>(GUINet::getInstance()->getShapeContainer()).getPOIs();
331 for (auto item : pois) {
332 for (auto kv : item.second->getParametersMap()) {
333 keys.insert(kv.first);
334 }
335 }
336 return std::vector<std::string>(keys.begin(), keys.end());
337}
338
339int
340GUIViewTraffic::doPaintGL(int mode, const Boundary& bound) {
341 // init view settings
342 glRenderMode(mode);
343 glMatrixMode(GL_MODELVIEW);
345 glDisable(GL_TEXTURE_2D);
346 glDisable(GL_ALPHA_TEST);
347 glEnable(GL_BLEND);
348 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
349 glEnable(GL_DEPTH_TEST);
350
351 // draw decals (if not in grabbing mode)
352 drawDecals();
355 paintGLGrid();
356 }
357 glLineWidth(1);
358 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
359 const float minB[2] = { (float)bound.xmin(), (float)bound.ymin() };
360 const float maxB[2] = { (float)bound.xmax(), (float)bound.ymax() };
361 glEnable(GL_POLYGON_OFFSET_FILL);
362 glEnable(GL_POLYGON_OFFSET_LINE);
364 int hits2 = grid.Search(minB, maxB, *myVisualizationSettings);
366 // Draw additional objects
367 if (myAdditionallyDrawn.size() > 0) {
368 glTranslated(0, 0, -.01);
370 for (auto i : myAdditionallyDrawn) {
371 i.first->drawGLAdditional(this, *myVisualizationSettings);
372 }
374 glTranslated(0, 0, .01);
375 }
377 /*
378 // draw legends
379 glMatrixMode(GL_MODELVIEW);
380 glLoadIdentity();
381 glTranslated(1.-.2, 1.-.5, 0.);
382 glScaled(.2, .5, 1.);
383 GUIColoringSchemesMap<GUILane> &sm = GUIViewTraffic::getLaneSchemesMap(); //!!!
384 sm.getColorer(myVisualizationSettings->laneEdgeMode)->drawLegend();
385 */
386 return hits2;
387}
388
389
390void
392 myTrackedID = id;
394 if (o != nullptr) {
395 GUIBaseVehicle* v = dynamic_cast<GUIBaseVehicle*>(o);
396 if (v != nullptr) {
398 }
399 }
400}
401
402
403void
407
408
411 return myTrackedID;
412}
413
414
415void
417 if (myTLSGame) {
419 MSTrafficLightLogic* minTll = nullptr;
420 GUIGlObject* minRR = nullptr;
421 double minDist = std::numeric_limits<double>::infinity();
422 double minDistRR = std::numeric_limits<double>::infinity();
423 for (MSTrafficLightLogic* const tll : tlsControl.getAllLogics()) {
424 if (tlsControl.isActive(tll) && tll->getProgramID() != "off") {
425 // get the links
426 const MSTrafficLightLogic::LaneVector& lanes = tll->getLanesAt(0);
427 if (lanes.size() > 0) {
428 const Position& endPos = lanes[0]->getShape().back();
429 if (endPos.distanceTo(pos) < minDist) {
430 minDist = endPos.distanceTo(pos);
431 minTll = tll;
432 }
433 }
434 }
435 }
436 if (makeCurrent()) {
438 if (o->getType() == GLO_REROUTER_EDGE) {
439 const double dist = o->getCenter().distanceTo2D(pos);
440 if (dist < minDistRR) {
441 minDistRR = dist;
442 minRR = o;
443 }
444 }
445 }
446 makeNonCurrent();
447 }
448 if (minDistRR < minDist && minRR != nullptr) {
449 minRR->onLeftBtnPress(nullptr);
450 update();
451 return;
452 }
453
454 if (minTll != nullptr) {
455 if (minTll->getPhaseNumber() == 0) {
456 // MSRailSignal
457 return;
458 }
459 const int ci = minTll->getCurrentPhaseIndex();
460 const int n = minTll->getPhaseNumber();
461 int greenCount = 0;
462 for (auto& phase : minTll->getPhases()) {
463 if (phase->isGreenPhase()) {
464 greenCount++;
465 }
466 }
467 int nextPhase = (ci + 1) % n;
468 SUMOTime nextDuration = 0;
469 if (minTll->getCurrentPhaseDef().isGreenPhase() || (greenCount == 1 && minTll->getCurrentPhaseDef().isAllRedPhase())) {
470 nextDuration = minTll->getPhase(nextPhase).duration;
471 } else {
472 // we are in transition to a green phase
473 // -> skip forward to the transition into the next green phase
474 // but ensure that the total transition time is maintained
475 // taking into account how much time was already spent
476 SUMOTime spentTransition = minTll->getSpentDuration();
477 // the transition may consist of more than one phase so we
478 // search backwards until the prior green phase
479 for (int i = ci - 1; i != ci; i--) {
480 if (i < 0) {
481 i = n - 1;
482 }
483 if (minTll->getPhase(i).isGreenPhase()) {
484 break;
485 }
486 spentTransition += minTll->getPhase(i).duration;
487 }
488 // now we skip past the next greenphase
489 int numGreen = 0;
490 int i = nextPhase;
491 for (; numGreen < 2; i = (i + 1) % n) {
492 if (minTll->getPhase(i).isGreenPhase()) {
493 numGreen++;
494 continue;
495 }
496 // transition after the next green
497 if (numGreen == 1) {
498 SUMOTime dur = minTll->getPhase(i).duration;
499 if (dur <= spentTransition) {
500 spentTransition -= dur;
501 } else {
502 nextPhase = i;
503 nextDuration = dur - spentTransition;
504 break;
505 }
506 }
507 }
508 }
509 minTll->changeStepAndDuration(tlsControl, MSNet::getInstance()->getCurrentTimeStep(), nextPhase, nextDuration);
510 update();
511 }
512 } else {
513 // DRT game
515 return;
516 }
517 const auto& sel = gSelected.getSelected(GLO_VEHICLE);
518 if (sel.size() == 0) {
519 // find closest pt vehicle
520 double minDist = std::numeric_limits<double>::infinity();
521 GUIVehicle* closest = nullptr;
525 for (it = vc.loadedVehBegin(); it != end; ++it) {
526 GUIVehicle* veh = dynamic_cast<GUIVehicle*>(it->second);
527 assert(veh != 0);
528 if (veh->getParameter().line != "") {
529 const double dist = veh->getPosition().distanceTo2D(pos);
530 if (dist < minDist) {
531 minDist = dist;
532 closest = veh;
533 }
534 }
535 }
536 if (closest != nullptr) {
537 gSelected.select(closest->getGlID());
539 }
540 } else {
541 // find closest pt stop
542 double minDist = std::numeric_limits<double>::infinity();
543 MSStoppingPlace* closestStop = nullptr;
545 for (auto it = stops.begin(); it != stops.end(); ++it) {
546 MSStoppingPlace* stop = it->second;
547 const double dist = pos.distanceTo2D(stop->getLane().geometryPositionAtOffset(stop->getEndLanePosition()));
548 if (dist < minDist) {
549 minDist = dist;
550 closestStop = stop;
551 }
552 }
553 if (closestStop != 0) {
554 GUIGlID id = *sel.begin();
556 assert(veh != 0);
557 MSLane* lane = veh->getMutableLane();
558 lane->getVehiclesSecure();
559 veh->rerouteDRTStop(closestStop);
561 lane->releaseVehicles();
562 }
563 }
564 }
565}
566
567
568void
570 const auto& sel = gSelected.getSelected(GLO_VEHICLE);
571 if (sel.size() > 0) {
572 GUIGlID id = *sel.begin();
574 if (veh != 0) {
576 }
578 }
580}
581
582
587
588
589long
590GUIViewTraffic::onCmdCloseLane(FXObject*, FXSelector, void*) {
591 GUILane* lane = getLaneUnderCursor();
592 if (lane != nullptr) {
593 lane->closeTraffic();
595 update();
596 }
597 return 1;
598}
599
600
601long
602GUIViewTraffic::onCmdCloseEdge(FXObject*, FXSelector, void*) {
603 GUILane* lane = getLaneUnderCursor();
604 if (lane != nullptr) {
605 dynamic_cast<GUIEdge*>(&lane->getEdge())->closeTraffic(lane);
607 update();
608 }
609 return 1;
610}
611
612
613long
614GUIViewTraffic::onCmdAddRerouter(FXObject*, FXSelector, void*) {
615 GUILane* lane = getLaneUnderCursor();
616 if (lane != nullptr) {
617 dynamic_cast<GUIEdge*>(&lane->getEdge())->addRerouter();
619 update();
620 }
621 return 1;
622}
623
624
625long
626GUIViewTraffic::showLaneReachability(GUILane* lane, FXObject* menu, FXSelector) {
627 if (lane != nullptr) {
628 // reset
629 const double UNREACHED = INVALID_DOUBLE;
631 for (const MSEdge* const e : MSEdge::getAllEdges()) {
632 for (MSLane* const l : e->getLanes()) {
633 GUILane* gLane = dynamic_cast<GUILane*>(l);
634 gLane->setReachability(UNREACHED);
635 }
636 }
637 // prepare
638 FXMenuCommand* mc = dynamic_cast<FXMenuCommand*>(menu);
639 const SUMOVehicleClass svc = SumoVehicleClassStrings.get(mc->getText().text());
640 const double defaultMaxSpeed = SUMOVTypeParameter::VClassDefaultValues(svc).desiredMaxSpeed;
641 // find reachable
642 std::map<MSEdge*, double> reachableEdges;
643 reachableEdges[&lane->getEdge()] = 0;
644 MSEdgeVector check;
645 check.push_back(&lane->getEdge());
646 while (check.size() > 0) {
647 MSEdge* e = check.front();
648 check.erase(check.begin());
649 double traveltime = reachableEdges[e];
650 for (MSLane* const l : e->getLanes()) {
651 if (l->allowsVehicleClass(svc)) {
652 GUILane* gLane = dynamic_cast<GUILane*>(l);
653 gSelected.select(gLane->getGlID(), false);
654 gLane->setReachability(traveltime);
655 }
656 }
657 const double dt = e->getLength() / MIN2(e->getSpeedLimit(), defaultMaxSpeed);
658 // ensure algorithm termination
659 traveltime += MAX2(dt, NUMERICAL_EPS);
660 for (MSEdge* const nextEdge : e->getSuccessors(svc)) {
661 if (reachableEdges.count(nextEdge) == 0 ||
662 // revisit edge via faster path
663 reachableEdges[nextEdge] > traveltime) {
664 reachableEdges[nextEdge] = traveltime;
665 check.push_back(nextEdge);
666 }
667 }
668 if (svc == SVC_PEDESTRIAN) {
669 // can also walk backwards
670 for (MSEdge* const prevEdge : e->getPredecessors()) {
671 if (prevEdge->allowedLanes(*e, svc) != nullptr &&
672 (reachableEdges.count(prevEdge) == 0 ||
673 // revisit edge via faster path
674 reachableEdges[prevEdge] > traveltime)) {
675 reachableEdges[prevEdge] = traveltime;
676 check.push_back(prevEdge);
677 }
678 }
679 // and connect to arbitrary incoming if there are no walkingareas
681 for (const MSEdge* const in_const : e->getToJunction()->getIncoming()) {
682 MSEdge* in = const_cast<MSEdge*>(in_const);
683 if ((in->getPermissions() & svc) == svc &&
684 (reachableEdges.count(in) == 0 ||
685 // revisit edge via faster path
686 reachableEdges[in] > traveltime)) {
687 reachableEdges[in] = traveltime;
688 check.push_back(in);
689 }
690 }
691 }
692 }
693 }
695 }
696 return 1;
697}
698
699
700long
701GUIViewTraffic::onCmdShowReachability(FXObject* menu, FXSelector selector, void*) {
702 GUILane* lane = getLaneUnderCursor();
703 if (lane != nullptr) {
704 // reset
705 showLaneReachability(lane, menu, selector);
706 // switch to 'color by selection' unless coloring 'by reachability'
709 }
710 update();
711 }
712 return 1;
713}
714
715
716GUILane*
718 if (makeCurrent()) {
719 int id = getObjectUnderCursor();
720 if (id != 0) {
722 if (o != nullptr) {
723 return dynamic_cast<GUILane*>(o);
724 }
725 }
726 makeNonCurrent();
727 }
728 return nullptr;
729}
730
731
732long
733GUIViewTraffic::onDoubleClicked(FXObject*, FXSelector, void*) {
734 // leave fullscreen mode
735 if (myApp->isFullScreen()) {
736 myApp->onCmdFullScreen(nullptr, 0, nullptr);
737 } else {
738 stopTrack();
739 }
740 return 1;
741}
742
743
744
745void
746GUIViewTraffic::saveFrame(const std::string& destFile, FXColor* buf) {
747#ifdef HAVE_FFMPEG
748 if (myCurrentVideo == nullptr) {
749 myCurrentVideo = new GUIVideoEncoder(destFile.c_str(), getWidth(), getHeight(), myApp->getDelay());
750 }
751 myCurrentVideo->writeFrame((uint8_t*)buf);
752#else
753 UNUSED_PARAMETER(destFile);
754 UNUSED_PARAMETER(buf);
755#endif
756}
757
758
759void
761#ifdef HAVE_FFMPEG
762 if (myCurrentVideo != nullptr) {
763 delete myCurrentVideo;
764 myCurrentVideo = nullptr;
765 }
766#endif
767}
768
769
770void
772#ifdef HAVE_FFMPEG
773 if (myCurrentVideo != nullptr) {
775 }
776#endif
778}
779
780
781const std::vector<SUMOTime>
785
786
787void
789 GUIShapeContainer& shapeContainer = dynamic_cast<GUIShapeContainer&>(GUINet::getInstance()->getShapeContainer());
790 if (s.showPedestrianNetwork) {
791 shapeContainer.removeInactivePolygonTypes(std::set<std::string> {"jupedsim.pedestrian_network"});
792 } else {
793 shapeContainer.addInactivePolygonTypes(std::set<std::string> {"jupedsim.pedestrian_network"});
794 }
795 update();
796}
797
798
799void
801 GUIShapeContainer& shapeContainer = dynamic_cast<GUIShapeContainer&>(GUINet::getInstance()->getShapeContainer());
802 for (auto polygonwithID : shapeContainer.getPolygons()) {
803 if (polygonwithID.second->getShapeType() == "jupedsim.pedestrian_network") {
804 polygonwithID.second->setShapeColor(s.pedestrianNetworkColor);
805 }
806 }
807 update();
808}
809
810/****************************************************************************/
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_REROUTER_EDGE
a Rerouter over edge
@ 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:135
static void pushMatrix()
push matrix
Definition GLHelper.cpp:122
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
virtual void onLeftBtnPress(void *)
notify object about left click
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
GUIMEVehicleControl * getGUIMEVehicleControl()
Returns the vehicle control.
Definition GUINet.cpp:599
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
GUIGlID getObjectUnderCursor(double sensitivity=SENSITIVITY)
returns the id of the front object under the cursor using GL_SELECT
void addSnapshot(SUMOTime time, const std::string &file, const int w=-1, const int h=-1)
Sets the snapshot time to file map.
GUIMainWindow * myApp
The application.
std::vector< GUIGlObject * > getGUIGlObjectsAtPosition(Position pos, double radius)
returns the GUIGlObjects at position within the given (rectangular) radius using GL_SELECT
double m2p(double meter) const
meter-to-pixels conversion method
GUIVisualizationSettings * myVisualizationSettings
visualization settings
virtual Position getPositionInformation() const
Returns the cursor's x/y position within the network.
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.
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:1092
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:1164
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:1264
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:769
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:457
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
Definition MSNet.h:326
bool hasPedestrianNetwork() const
return whether the network contains walkingareas and crossings
Definition MSNet.h:801
ShapeContainer & getShapeContainer()
Returns the shapes container.
Definition MSNet.h:507
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition MSNet.h:384
const NamedObjectCont< MSStoppingPlace * > & getStoppingPlaces(SumoXMLTag category) const
Definition MSNet.cpp:1438
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.
virtual void releaseVehicles()
unlock access to vehicle removal/additions for thread synchronization
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.
virtual void secureVehicles()
lock access to vehicle removal/additions for thread synchronization
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].