Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEViewNetHelper.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-2026 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/****************************************************************************/
19// A file used to reduce the size of GNEViewNet.h grouping structs and classes
20/****************************************************************************/
21
42
44#include "GNENet.h"
45#include "GNEUndoList.h"
46#include "GNEViewNet.h"
47#include "GNEViewNetHelper.h"
48#include "GNEViewParent.h"
49
50// ===========================================================================
51// static members
52// ===========================================================================
53
54std::vector<RGBColor> GNEViewNetHelper::myRainbowScaledColors;
55
56// ---------------------------------------------------------------------------
57// GNEViewNetHelper::LockManager - methods
58// ---------------------------------------------------------------------------
59
61 myViewNet(viewNet) {
62 // fill myLockedElements objects
77 // fill myLockedElements objects
88 // fill myLockedElements objects
92}
93
94
96
97
98bool
99GNEViewNetHelper::LockManager::isObjectLocked(GUIGlObjectType objectType, const bool selected) const {
100 if (selected && (myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands().menuCheckLockSelectedElements->getCheck() == TRUE)) {
101 return true;
102 } else if ((objectType >= GLO_ADDITIONALELEMENT) && (objectType <= GLO_ACCESS)) {
103 // additionals
104 return myLockedElements.at(GLO_ADDITIONALELEMENT).lock;
105 } else if ((objectType >= GLO_WIRE) && (objectType <= GLO_TRACTIONSUBSTATION)) {
106 // wires
107 return myLockedElements.at(GLO_WIRE).lock;
108 } else if ((objectType >= GLO_ROUTE) && (objectType <= GLO_ROUTE_DISTRIBUTION)) {
109 // routes
110 return myLockedElements.at(GLO_ROUTE).lock;
111 } else if ((objectType >= GLO_VEHICLE) && (objectType <= GLO_ROUTEFLOW)) {
112 // vehicles
113 return myLockedElements.at(GLO_VEHICLE).lock;
114 } else if ((objectType >= GLO_PERSON) && (objectType <= GLO_PERSONFLOW)) {
115 // persons
116 return myLockedElements.at(GLO_PERSON).lock;
117 } else if ((objectType >= GLO_CONTAINER) && (objectType <= GLO_CONTAINERFLOW)) {
118 // containers
119 return myLockedElements.at(GLO_CONTAINER).lock;
120 } else if ((objectType >= GLO_STOP) && (objectType <= GLO_STOP_PLAN)) {
121 // stops
122 return myLockedElements.at(GLO_STOP).lock;
123 } else {
124 return myLockedElements.at(objectType).lock;
125 }
126}
127
128
129void
131 // get lock menu commands
132 GNEApplicationWindowHelper::LockMenuCommands& lockMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands();
133 // network
134 myLockedElements[GLO_JUNCTION].lock = lockMenuCommands.menuCheckLockJunctions->getCheck() == TRUE;
135 myLockedElements[GLO_EDGE].lock = lockMenuCommands.menuCheckLockEdges->getCheck() == TRUE;
136 myLockedElements[GLO_LANE].lock = lockMenuCommands.menuCheckLockLanes->getCheck() == TRUE;
137 myLockedElements[GLO_CONNECTION].lock = lockMenuCommands.menuCheckLockConnections->getCheck() == TRUE;
138 myLockedElements[GLO_CROSSING].lock = lockMenuCommands.menuCheckLockCrossings->getCheck() == TRUE;
139 myLockedElements[GLO_WALKINGAREA].lock = lockMenuCommands.menuCheckLockWalkingAreas->getCheck() == TRUE;
140 myLockedElements[GLO_ADDITIONALELEMENT].lock = lockMenuCommands.menuCheckLockAdditionals->getCheck() == TRUE;
141 myLockedElements[GLO_WIRE].lock = lockMenuCommands.menuCheckLockWires->getCheck() == TRUE;
142 myLockedElements[GLO_TAZ].lock = lockMenuCommands.menuCheckLockTAZs->getCheck() == TRUE;
143 myLockedElements[GLO_POLYGON].lock = lockMenuCommands.menuCheckLockPolygons->getCheck() == TRUE;
144 myLockedElements[GLO_POI].lock = lockMenuCommands.menuCheckLockPOIs->getCheck() == TRUE;
145 myLockedElements[GLO_JPS_WALKABLEAREA].lock = lockMenuCommands.menuCheckLockJpsWalkableAreas->getCheck() == TRUE;
146 myLockedElements[GLO_JPS_OBSTACLE].lock = lockMenuCommands.menuCheckLockJpsObstacles->getCheck() == TRUE;
147 // demand
148 myLockedElements[GLO_ROUTE].lock = lockMenuCommands.menuCheckLockRoutes->getCheck() == TRUE;
149 myLockedElements[GLO_VEHICLE].lock = lockMenuCommands.menuCheckLockVehicles->getCheck() == TRUE;
150 myLockedElements[GLO_PERSON].lock = lockMenuCommands.menuCheckLockPersons->getCheck() == TRUE;
151 myLockedElements[GLO_PERSONTRIP].lock = lockMenuCommands.menuCheckLockPersonTrips->getCheck() == TRUE;
152 myLockedElements[GLO_WALK].lock = lockMenuCommands.menuCheckLockWalks->getCheck() == TRUE;
153 myLockedElements[GLO_RIDE].lock = lockMenuCommands.menuCheckLockRides->getCheck() == TRUE;
154 myLockedElements[GLO_CONTAINER].lock = lockMenuCommands.menuCheckLockContainers->getCheck() == TRUE;
155 myLockedElements[GLO_TRANSPORT].lock = lockMenuCommands.menuCheckLockTransports->getCheck() == TRUE;
156 myLockedElements[GLO_TRANSHIP].lock = lockMenuCommands.menuCheckLockTranships->getCheck() == TRUE;
157 myLockedElements[GLO_STOP].lock = lockMenuCommands.menuCheckLockStops->getCheck() == TRUE;
158 // data
159 myLockedElements[GLO_EDGEDATA].lock = lockMenuCommands.menuCheckLockEdgeDatas->getCheck() == TRUE;
160 myLockedElements[GLO_EDGERELDATA].lock = lockMenuCommands.menuCheckLockEdgeRelDatas->getCheck() == TRUE;
161 myLockedElements[GLO_TAZRELDATA].lock = lockMenuCommands.menuCheckLockEdgeTAZRels->getCheck() == TRUE;
162}
163
164
165void
167 // get lock menu commands
168 GNEApplicationWindowHelper::LockMenuCommands& lockMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands();
169 // network
170 lockMenuCommands.menuCheckLockJunctions->setCheck(myLockedElements[GLO_JUNCTION].lock);
171 lockMenuCommands.menuCheckLockEdges->setCheck(myLockedElements[GLO_EDGE].lock);
172 lockMenuCommands.menuCheckLockLanes->setCheck(myLockedElements[GLO_LANE].lock);
173 lockMenuCommands.menuCheckLockConnections->setCheck(myLockedElements[GLO_CONNECTION].lock);
174 lockMenuCommands.menuCheckLockCrossings->setCheck(myLockedElements[GLO_CROSSING].lock);
175 lockMenuCommands.menuCheckLockWalkingAreas->setCheck(myLockedElements[GLO_WALKINGAREA].lock);
176 lockMenuCommands.menuCheckLockAdditionals->setCheck(myLockedElements[GLO_ADDITIONALELEMENT].lock);
177 lockMenuCommands.menuCheckLockWires->setCheck(myLockedElements[GLO_WIRE].lock);
178 lockMenuCommands.menuCheckLockTAZs->setCheck(myLockedElements[GLO_TAZ].lock);
179 lockMenuCommands.menuCheckLockPolygons->setCheck(myLockedElements[GLO_POLYGON].lock);
180 lockMenuCommands.menuCheckLockPOIs->setCheck(myLockedElements[GLO_POI].lock);
181 lockMenuCommands.menuCheckLockJpsWalkableAreas->setCheck(myLockedElements[GLO_JPS_WALKABLEAREA].lock);
182 lockMenuCommands.menuCheckLockJpsObstacles->setCheck(myLockedElements[GLO_JPS_OBSTACLE].lock);
183 // demand
184 lockMenuCommands.menuCheckLockRoutes->setCheck(myLockedElements[GLO_ROUTE].lock);
185 lockMenuCommands.menuCheckLockVehicles->setCheck(myLockedElements[GLO_VEHICLE].lock);
186 lockMenuCommands.menuCheckLockPersons->setCheck(myLockedElements[GLO_PERSON].lock);
187 lockMenuCommands.menuCheckLockPersonTrips->setCheck(myLockedElements[GLO_PERSONTRIP].lock);
188 lockMenuCommands.menuCheckLockWalks->setCheck(myLockedElements[GLO_WALK].lock);
189 lockMenuCommands.menuCheckLockRides->setCheck(myLockedElements[GLO_RIDE].lock);
190 lockMenuCommands.menuCheckLockContainers->setCheck(myLockedElements[GLO_CONTAINER].lock);
191 lockMenuCommands.menuCheckLockTransports->setCheck(myLockedElements[GLO_TRANSPORT].lock);
192 lockMenuCommands.menuCheckLockTranships->setCheck(myLockedElements[GLO_TRANSHIP].lock);
193 lockMenuCommands.menuCheckLockStops->setCheck(myLockedElements[GLO_STOP].lock);
194 // data
195 lockMenuCommands.menuCheckLockEdgeDatas->setCheck(myLockedElements[GLO_EDGEDATA].lock);
196 lockMenuCommands.menuCheckLockEdgeRelDatas->setCheck(myLockedElements[GLO_EDGERELDATA].lock);
197 lockMenuCommands.menuCheckLockEdgeTAZRels->setCheck(myLockedElements[GLO_TAZRELDATA].lock);
198}
199
200
204
205
209
210
212
213
218
219// ---------------------------------------------------------------------------
220// GNEViewNetHelper::InspectedElements - methods
221// ---------------------------------------------------------------------------
222
224
225
226void
228 myInspectedACs.clear();
229 if (AC) {
230 myFirstInspectedAC = AC;
231 myInspectedACs.insert(AC);
232 } else {
233 myFirstInspectedAC = nullptr;
234 }
235}
236
237
238void
239GNEViewNetHelper::InspectedElements::inspectACs(const std::vector<GNEAttributeCarrier*>& ACs) {
240 myInspectedACs.clear();
241 if (ACs.size() > 0) {
242 myFirstInspectedAC = ACs.front();
243 for (const auto& AC : ACs) {
244 myInspectedACs.insert(AC);
245 }
246 } else {
247 myFirstInspectedAC = nullptr;
248 }
249}
250
251
252void
254 auto it = myInspectedACs.find(AC);
255 if (it != myInspectedACs.end()) {
256 myInspectedACs.erase(it);
257 if (myInspectedACs.size() == 0) {
258 myInspectedACs.clear();
259 myFirstInspectedAC = nullptr;
260 } else if (myFirstInspectedAC == AC) {
261 myFirstInspectedAC = (*myInspectedACs.begin());
262 }
263 }
264}
265
266
267void
269 myFirstInspectedAC = nullptr;
270 myInspectedACs.clear();
271}
272
273
276 return myFirstInspectedAC;
277}
278
279
280const std::unordered_set<GNEAttributeCarrier*>&
282 return myInspectedACs;
283}
284
285
286bool
288 if (myInspectedACs.empty()) {
289 return false;
290 } else if (myFirstInspectedAC == AC) {
291 return true;
292 } else {
293 return myInspectedACs.find(AC) != myInspectedACs.end();
294 }
295}
296
297
298bool
300 if (myInspectedACs.empty()) {
301 return false;
302 } else if (myFirstInspectedAC == AC) {
303 return true;
304 } else {
305 // we need a const_cast because our myInspectedACs is a set of non-constant ACs (in this case is safe)
306 return myInspectedACs.find(const_cast<GNEAttributeCarrier*>(AC)) != myInspectedACs.end();
307 }
308}
309
310
311bool
313 return myInspectedACs.size() > 0;
314}
315
316
317bool
319 return myInspectedACs.size() == 1;
320}
321
322
323bool
325 return myInspectedACs.size() > 1;
326}
327
328// ---------------------------------------------------------------------------
329// GNEViewNetHelper::MarkFrontElements - methods
330// ---------------------------------------------------------------------------
331
333
334
335const std::unordered_set<GNEAttributeCarrier*>&
337 return myMarkedACs;
338}
339
340
341void
343 // make a copy because container is modified in every iteration
344 const auto copy = myMarkedACs;
345 for (auto& AC : copy) {
347 }
348}
349
350
351void
355
356
357void
359 if (myMarkedACs.size() > 0) {
360 auto it = myMarkedACs.find(AC);
361 if (it != myMarkedACs.end()) {
362 myMarkedACs.erase(it);
363 }
364 }
365}
366
367// ---------------------------------------------------------------------------
368// GNEViewNetHelper::ViewObjectsSelector - methods
369// ---------------------------------------------------------------------------
370
374
375
376void
378 // clear elements and reserve space
379 myViewObjects.clearElements();
380 myViewObjects.reserve(gViewObjectsHandler.getNumberOfSelectedObjects());
381 // process GUIGLObjects using elements under cursor
382 processGUIGlObjects(gViewObjectsHandler.getSelectedObjects());
383}
384
385
386void
390
391
392void
394 if (myViewObjects.junctions.size() > 0) {
395 baseObjet->addParentID(SUMO_TAG_JUNCTION, myViewObjects.junctions.front()->getID());
396 }
397 if (myViewObjects.edges.size() > 0) {
398 baseObjet->addParentID(SUMO_TAG_EDGE, myViewObjects.edges.front()->getID());
399 }
400 if (myViewObjects.lanes.size() > 0) {
401 baseObjet->addParentID(SUMO_TAG_LANE, myViewObjects.lanes.front()->getID());
402 }
403 if (myViewObjects.crossings.size() > 0) {
404 baseObjet->addParentID(SUMO_TAG_CROSSING, myViewObjects.crossings.front()->getID());
405 }
406 if (myViewObjects.connections.size() > 0) {
407 baseObjet->addParentID(SUMO_TAG_CONNECTION, myViewObjects.connections.front()->getID());
408 }
409 if (myViewObjects.walkingAreas.size() > 0) {
410 baseObjet->addParentID(SUMO_TAG_WALKINGAREA, myViewObjects.walkingAreas.front()->getID());
411 }
412 if (myViewObjects.lanes.size() > 0) {
413 baseObjet->addParentID(SUMO_TAG_LANE, myViewObjects.lanes.front()->getID());
414 }
415 if (myViewObjects.additionals.size() > 0) {
416 baseObjet->addParentID(myViewObjects.additionals.front()->getTagProperty()->getTag(), myViewObjects.additionals.front()->getID());
417 }
418 if (myViewObjects.demandElements.size() > 0) {
419 baseObjet->addParentID(myViewObjects.demandElements.front()->getTagProperty()->getTag(), myViewObjects.demandElements.front()->getID());
420 }
421 if (myViewObjects.genericDatas.size() > 0) {
422 baseObjet->addParentID(myViewObjects.genericDatas.front()->getTagProperty()->getTag(), myViewObjects.genericDatas.front()->getID());
423 }
424}
425
426
427void
429 // get all elements to filter
430 std::vector<const GUIGlObject*> glElements;
431 for (const auto& glElement : myViewObjects.GUIGlObjects) {
432 if (glElement->getType() != exception) {
433 glElements.push_back(glElement);
434 }
435 }
436 myViewObjects.filterElements(glElements);
437}
438
439
440void
442 if (myViewNet->getEditModes().isCurrentSupermodeNetwork()) {
443 filterDemandElements(true);
444 filterDataElements();
445 } else if (myViewNet->getEditModes().isCurrentSupermodeDemand()) {
446 filterNetworkElements();
447 filterAdditionals(true, true);
448 filterDataElements();
449 } else if (myViewNet->getEditModes().isCurrentSupermodeData()) {
450 filterNetworkElements();
451 filterDemandElements(true);
452 }
453}
454
455
456void
458 // get all edges to filter
459 std::vector<const GUIGlObject*> junctions;
460 for (const auto& junction : myViewObjects.junctions) {
461 junctions.push_back(junction);
462 }
463 myViewObjects.filterElements(junctions);
464}
465
466
467void
469 // get all edges to filter
470 std::vector<const GUIGlObject*> edges;
471 for (const auto& edge : myViewObjects.edges) {
472 edges.push_back(edge);
473 }
474 myViewObjects.filterElements(edges);
475}
476
477
478void
480 // get all lanes to filter
481 std::vector<const GUIGlObject*> lanes;
482 for (const auto& lane : myViewObjects.lanes) {
483 lanes.push_back(lane);
484 }
485 myViewObjects.filterElements(lanes);
486}
487
488
489void
491 // get all connections to filter
492 std::vector<const GUIGlObject*> connections;
493 for (const auto& connection : myViewObjects.connections) {
494 connections.push_back(connection);
495 }
496 myViewObjects.filterElements(connections);
497}
498
499
500void
502 // get all crossings to filter
503 std::vector<const GUIGlObject*> crossings;
504 for (const auto& crossing : myViewObjects.crossings) {
505 crossings.push_back(crossing);
506 }
507 myViewObjects.filterElements(crossings);
508}
509
510
511void
513 // get all walkingAreas to filter
514 std::vector<const GUIGlObject*> walkingAreas;
515 for (const auto& walkingArea : myViewObjects.walkingAreas) {
516 walkingAreas.push_back(walkingArea);
517 }
518 myViewObjects.filterElements(walkingAreas);
519}
520
521
522void
524 // get all elements to filter
525 std::vector<const GUIGlObject*> shapes;
526 for (const auto& poly : myViewObjects.polys) {
527 shapes.push_back(poly);
528 }
529 for (const auto& POI : myViewObjects.POIs) {
530 shapes.push_back(POI);
531 }
532 myViewObjects.filterElements(shapes);
533}
534
535
536void
537GNEViewNetHelper::ViewObjectsSelector::filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs) {
538 // get all elements to filter
539 std::vector<const GUIGlObject*> additionals;
540 for (const auto& additional : myViewObjects.additionals) {
541 if (!includeStoppigPlaces && (additional->getType() > GLO_STOPPING_PLACE) && (additional->getType() < GLO_STOPPING_PLACE_LAST)) {
542 continue;
543 } else if (!includeTAZs && (additional->getType() == GLO_TAZ)) {
544 continue;
545 } else {
546 additionals.push_back(additional);
547 }
548 }
549 myViewObjects.filterElements(additionals);
550}
551
552
553void
555 // get all elements to filter
556 std::vector<const GUIGlObject*> networkElements;
557 for (const auto& networkElement : myViewObjects.networkElements) {
558 networkElements.push_back(networkElement);
559 }
560 myViewObjects.filterElements(networkElements);
561}
562
563
564void
566 // get all elements to filter
567 std::vector<const GUIGlObject*> demandElements;
568 for (const auto& demandElement : myViewObjects.demandElements) {
569 if (!includeRoutes && (demandElement->getType() == GLO_ROUTE)) {
570 continue;
571 } else {
572 demandElements.push_back(demandElement);
573 }
574 }
575 myViewObjects.filterElements(demandElements);
576}
577
578
579void
581 // get all elements to filter
582 std::vector<const GUIGlObject*> datadElements;
583 for (const auto& datadElement : myViewObjects.edgeDatas) {
584 datadElements.push_back(datadElement);
585 }
586 for (const auto& datadElement : myViewObjects.edgeRelDatas) {
587 datadElements.push_back(datadElement);
588 }
589 for (const auto& datadElement : myViewObjects.TAZRelDatas) {
590 datadElements.push_back(datadElement);
591 }
592 myViewObjects.filterElements(datadElements);
593
594}
595
596
597void
598GNEViewNetHelper::ViewObjectsSelector::filterLockedElements(const std::vector<GUIGlObjectType> ignoreFilter) {
599 std::vector<const GUIGlObject*> GUIGlObjects;
600 // get all locked elements
601 for (const auto& GUIGlObject : myViewObjects.GUIGlObjects) {
603 GUIGlObjects.push_back(GUIGlObject);
604 }
605 }
606 // apply ignore filter
607 for (const auto& ignoredType : ignoreFilter) {
608 auto it = GUIGlObjects.begin();
609 while (it != GUIGlObjects.end()) {
610 if ((*it)->getType() == ignoredType) {
611 it = GUIGlObjects.erase(it);
612 } else {
613 it++;
614 }
615 }
616 }
617 // filter objects
618 myViewObjects.filterElements(GUIGlObjects);
619}
620
621
622const GUIGlObject*
624 if (myViewObjects.GUIGlObjects.size() > 0) {
625 return myViewObjects.GUIGlObjects.front();
626 } else {
627 return nullptr;
628 }
629}
630
631
634 if (myViewObjects.attributeCarriers.size() > 0) {
635 return myViewObjects.attributeCarriers.front();
636 } else {
637 return nullptr;
638 }
639}
640
641
644 if (myViewObjects.networkElements.size() > 0) {
645 return myViewObjects.networkElements.front();
646 } else {
647 return nullptr;
648 }
649}
650
651
654 if (myViewObjects.additionals.size() > 0) {
655 return myViewObjects.additionals.front();
656 } else {
657 return nullptr;
658 }
659}
660
661
664 if (myViewObjects.demandElements.size() > 0) {
665 return myViewObjects.demandElements.front();
666 } else {
667 return nullptr;
668 }
669}
670
671
674 if (myViewObjects.genericDatas.size() > 0) {
675 return myViewObjects.genericDatas.front();
676 } else {
677 return nullptr;
678 }
679}
680
681
684 if (myViewObjects.junctions.size() > 0) {
685 return myViewObjects.junctions.front();
686 } else {
687 return nullptr;
688 }
689}
690
691
692GNEEdge*
694 if (myViewObjects.edges.size() > 0) {
695 return myViewObjects.edges.front();
696 } else {
697 return nullptr;
698 }
699}
700
701
702GNELane*
704 if (myViewObjects.lanes.size() > 0) {
705 return myViewObjects.lanes.front();
706 } else {
707 return nullptr;
708 }
709}
710
711
712GNELane*
714 if (myViewObjects.lanes.size() > 0) {
715 for (auto& lane : myViewObjects.lanes) {
716 if (!(lane->isAttributeCarrierSelected() || lane->getParentEdge()->isAttributeCarrierSelected()) ||
717 !myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands().menuCheckLockSelectedElements->getCheck()) {
718 return lane;
719 }
720 }
721 // all locked, then return nullptr
722 return nullptr;
723 } else {
724 return nullptr;
725 }
726}
727
728
729const std::vector<GNELane*>&
731 return myViewObjects.lanes;
732}
733
734
737 if (myViewObjects.crossings.size() > 0) {
738 return myViewObjects.crossings.front();
739 } else {
740 return nullptr;
741 }
742}
743
744
747 if (myViewObjects.walkingAreas.size() > 0) {
748 return myViewObjects.walkingAreas.front();
749 } else {
750 return nullptr;
751 }
752}
753
754
757 if (myViewObjects.connections.size() > 0) {
758 return myViewObjects.connections.front();
759 } else {
760 return nullptr;
761 }
762}
763
764
767 if (myViewObjects.internalLanes.size() > 0) {
768 return myViewObjects.internalLanes.front();
769 } else {
770 return nullptr;
771 }
772}
773
774
775GNEPOI*
777 if (myViewObjects.POIs.size() > 0) {
778 return myViewObjects.POIs.front();
779 } else {
780 return nullptr;
781 }
782}
783
784
785GNEPoly*
787 if (myViewObjects.polys.size() > 0) {
788 return myViewObjects.polys.front();
789 } else {
790 return nullptr;
791 }
792}
793
794
795GNETAZ*
797 if (myViewObjects.TAZs.size() > 0) {
798 return myViewObjects.TAZs.front();
799 } else {
800 return nullptr;
801 }
802}
803
804
807 if (myViewObjects.edgeDatas.size() > 0) {
808 return myViewObjects.edgeDatas.front();
809 } else {
810 return nullptr;
811 }
812}
813
814
817 if (myViewObjects.edgeRelDatas.size() > 0) {
818 return myViewObjects.edgeRelDatas.front();
819 } else {
820 return nullptr;
821 }
822}
823
824
827 if (myViewObjects.TAZRelDatas.size() > 0) {
828 return myViewObjects.TAZRelDatas.front();
829 } else {
830 return nullptr;
831 }
832}
833
834
835const std::vector<GUIGlObject*>&
837 return myViewObjects.GUIGlObjects;
838}
839
840
841const std::vector<GNEAttributeCarrier*>&
843 return myViewObjects.attributeCarriers;
844}
845
846
847const std::vector<GNEJunction*>&
849 return myViewObjects.junctions;
850}
851
852
853const std::vector<GNEEdge*>&
855 return myViewObjects.edges;
856}
857
858
859const std::vector<GNETAZ*>&
861 return myViewObjects.TAZs;
862}
863
864
865const std::vector<GNEAdditional*>&
867 return myViewObjects.additionals;
868}
869
870
871const std::vector<GNEDemandElement*>&
873 return myViewObjects.demandElements;
874}
875
876
877const std::vector<const GNEJunction*>&
879 return myMergingJunctions;
880}
881
882
884
885
886void
888 GUIGlObjects.clear();
889 attributeCarriers.clear();
890 networkElements.clear();
891 additionals.clear();
892 demandElements.clear();
893 junctions.clear();
894 edges.clear();
895 lanes.clear();
896 crossings.clear();
897 walkingAreas.clear();
898 connections.clear();
899 internalLanes.clear();
900 TAZs.clear();
901 POIs.clear();
902 polys.clear();
903 genericDatas.clear();
904 edgeDatas.clear();
905 edgeRelDatas.clear();
906 TAZRelDatas.clear();
907}
908
909
910void
912 GUIGlObjects.reserve(size);
913 attributeCarriers.reserve(size);
914 networkElements.reserve(size);
915 additionals.reserve(size);
916 demandElements.reserve(size);
917 junctions.reserve(size);
918 edges.reserve(size);
919 lanes.reserve(size);
920 crossings.reserve(size);
921 walkingAreas.reserve(size);
922 connections.reserve(size);
923 internalLanes.reserve(size);
924 TAZs.reserve(size);
925 POIs.reserve(size);
926 polys.reserve(size);
927 genericDatas.reserve(size);
928 edgeDatas.reserve(size);
929 edgeRelDatas.reserve(size);
930 TAZRelDatas.reserve(size);
931}
932
933
934void
936 for (const auto& object : objects) {
937 // remove from GUIGlObjects
938 auto itGlObjects = GUIGlObjects.begin();
939 while (itGlObjects != GUIGlObjects.end()) {
940 if (*itGlObjects == object) {
941 itGlObjects = GUIGlObjects.erase(itGlObjects);
942 } else {
943 itGlObjects++;
944 }
945 }
946 // remove from attributeCarriers
947 auto itACs = attributeCarriers.begin();
948 while (itACs != attributeCarriers.end()) {
949 if ((*itACs)->getGUIGlObject() == object) {
950 itACs = attributeCarriers.erase(itACs);
951 } else {
952 itACs++;
953 }
954 }
955 // remove from networkElements
956 auto itNetworkElements = networkElements.begin();
957 while (itNetworkElements != networkElements.end()) {
958 if ((*itNetworkElements)->getGUIGlObject() == object) {
959 itNetworkElements = networkElements.erase(itNetworkElements);
960 } else {
961 itNetworkElements++;
962 }
963 }
964 // remove from additionals
965 auto itAdditionals = additionals.begin();
966 while (itAdditionals != additionals.end()) {
967 if ((*itAdditionals)->getGUIGlObject() == object) {
968 itAdditionals = additionals.erase(itAdditionals);
969 } else {
970 itAdditionals++;
971 }
972 }
973 // remove from demandElements
974 auto itDemandElements = demandElements.begin();
975 while (itDemandElements != demandElements.end()) {
976 if ((*itDemandElements)->getGUIGlObject() == object) {
977 itDemandElements = demandElements.erase(itDemandElements);
978 } else {
979 itDemandElements++;
980 }
981 }
982 // remove from genericDatas
983 auto itGenericDatas = genericDatas.begin();
984 while (itGenericDatas != genericDatas.end()) {
985 if ((*itGenericDatas)->getGUIGlObject() == object) {
986 itGenericDatas = genericDatas.erase(itGenericDatas);
987 } else {
988 itGenericDatas++;
989 }
990 }
991 // remove from junctions
992 auto itJunctions = junctions.begin();
993 while (itJunctions != junctions.end()) {
994 if ((*itJunctions)->getGUIGlObject() == object) {
995 itJunctions = junctions.erase(itJunctions);
996 } else {
997 itJunctions++;
998 }
999 }
1000 // remove from edges
1001 auto itEdges = edges.begin();
1002 while (itEdges != edges.end()) {
1003 if ((*itEdges)->getGUIGlObject() == object) {
1004 itEdges = edges.erase(itEdges);
1005 } else {
1006 itEdges++;
1007 }
1008 }
1009 // remove from lanes
1010 auto itLanes = lanes.begin();
1011 while (itLanes != lanes.end()) {
1012 if ((*itLanes)->getGUIGlObject() == object) {
1013 itLanes = lanes.erase(itLanes);
1014 } else {
1015 itLanes++;
1016 }
1017 }
1018 // remove from crossings
1019 auto itCrossings = crossings.begin();
1020 while (itCrossings != crossings.end()) {
1021 if ((*itCrossings)->getGUIGlObject() == object) {
1022 itCrossings = crossings.erase(itCrossings);
1023 } else {
1024 itCrossings++;
1025 }
1026 }
1027 // remove from walkingAreas
1028 auto itWalkingAreas = walkingAreas.begin();
1029 while (itWalkingAreas != walkingAreas.end()) {
1030 if ((*itWalkingAreas)->getGUIGlObject() == object) {
1031 itWalkingAreas = walkingAreas.erase(itWalkingAreas);
1032 } else {
1033 itWalkingAreas++;
1034 }
1035 }
1036 // remove from connections
1037 auto itConnections = connections.begin();
1038 while (itConnections != connections.end()) {
1039 if ((*itConnections)->getGUIGlObject() == object) {
1040 itConnections = connections.erase(itConnections);
1041 } else {
1042 itConnections++;
1043 }
1044 }
1045 // remove from internalLanes
1046 auto itInternalLanes = internalLanes.begin();
1047 while (itInternalLanes != internalLanes.end()) {
1048 if ((*itInternalLanes)->getGUIGlObject() == object) {
1049 itInternalLanes = internalLanes.erase(itInternalLanes);
1050 } else {
1051 itInternalLanes++;
1052 }
1053 }
1054 // remove from TAZs
1055 auto itTAZs = TAZs.begin();
1056 while (itTAZs != TAZs.end()) {
1057 if ((*itTAZs)->getGUIGlObject() == object) {
1058 itTAZs = TAZs.erase(itTAZs);
1059 } else {
1060 itTAZs++;
1061 }
1062 }
1063 // remove from POIs
1064 auto itPOIs = POIs.begin();
1065 while (itPOIs != POIs.end()) {
1066 if ((*itPOIs)->getGUIGlObject() == object) {
1067 itPOIs = POIs.erase(itPOIs);
1068 } else {
1069 itPOIs++;
1070 }
1071 }
1072 // remove from polys
1073 auto itPolys = polys.begin();
1074 while (itPolys != polys.end()) {
1075 if ((*itPolys)->getGUIGlObject() == object) {
1076 itPolys = polys.erase(itPolys);
1077 } else {
1078 itPolys++;
1079 }
1080 }
1081 // remove from edgeDatas
1082 auto itEdgeDatas = edgeDatas.begin();
1083 while (itEdgeDatas != edgeDatas.end()) {
1084 if ((*itEdgeDatas)->getGUIGlObject() == object) {
1085 itEdgeDatas = edgeDatas.erase(itEdgeDatas);
1086 } else {
1087 itEdgeDatas++;
1088 }
1089 }
1090 // remove from edgeRelDatas
1091 auto itEdgeRelDatas = edgeRelDatas.begin();
1092 while (itEdgeRelDatas != edgeRelDatas.end()) {
1093 if ((*itEdgeRelDatas)->getGUIGlObject() == object) {
1094 itEdgeRelDatas = edgeRelDatas.erase(itEdgeRelDatas);
1095 } else {
1096 itEdgeRelDatas++;
1097 }
1098 }
1099 // remove from TAZRelDatas
1100 auto itTAZRelDatas = TAZRelDatas.begin();
1101 while (itTAZRelDatas != TAZRelDatas.end()) {
1102 if ((*itTAZRelDatas)->getGUIGlObject() == object) {
1103 itTAZRelDatas = TAZRelDatas.erase(itTAZRelDatas);
1104 } else {
1105 itTAZRelDatas++;
1106 }
1107 }
1108 }
1109}
1110
1111
1112void
1114 // cast specific network element
1115 switch (glObject->getType()) {
1116 case GLO_JUNCTION: {
1117 // get junction
1118 auto junction = myViewNet->getNet()->getAttributeCarriers()->retrieveJunction(glObject->getMicrosimID());
1119 // check front element
1120 if (junction->isMarkedForDrawingFront()) {
1121 // insert at front
1122 container.junctions.insert(container.junctions.begin(), junction);
1123 container.networkElements.insert(container.networkElements.begin(), junction);
1124 container.attributeCarriers.insert(container.attributeCarriers.begin(), junction);
1125 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), junction);
1126 } else {
1127 // insert at back
1128 container.junctions.push_back(junction);
1129 container.networkElements.push_back(junction);
1130 container.attributeCarriers.push_back(junction);
1131 container.GUIGlObjects.push_back(junction);
1132 }
1133 break;
1134 }
1135 case GLO_EDGE: {
1136 // get edge
1137 auto edge = myViewNet->getNet()->getAttributeCarriers()->retrieveEdge(glObject->getMicrosimID());
1138 // check front element
1139 if (edge->isMarkedForDrawingFront()) {
1140 // insert at front
1141 container.edges.insert(container.edges.begin(), edge);
1142 container.networkElements.insert(container.networkElements.begin(), edge);
1143 container.attributeCarriers.insert(container.attributeCarriers.begin(), edge);
1144 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edge);
1145 } else {
1146 // insert at back
1147 container.edges.push_back(edge);
1148 container.networkElements.push_back(edge);
1149 container.attributeCarriers.push_back(edge);
1150 container.GUIGlObjects.push_back(edge);
1151 }
1152 break;
1153 }
1154 case GLO_LANE: {
1155 // get lane
1156 auto lane = myViewNet->getNet()->getAttributeCarriers()->retrieveLane(glObject);
1157 // check front element
1158 if (lane->isMarkedForDrawingFront()) {
1159 // insert at front
1160 container.lanes.insert(container.lanes.begin(), lane);
1161 container.networkElements.insert(container.networkElements.begin(), lane);
1162 container.attributeCarriers.insert(container.attributeCarriers.begin(), lane);
1163 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), lane);
1164 } else {
1165 // insert at back
1166 container.lanes.push_back(lane);
1167 container.networkElements.push_back(lane);
1168 container.attributeCarriers.push_back(lane);
1169 container.GUIGlObjects.push_back(lane);
1170 }
1171 break;
1172 }
1173 case GLO_CROSSING: {
1174 // get crossing
1175 auto crossing = myViewNet->getNet()->getAttributeCarriers()->retrieveCrossing(glObject);
1176 // check front element
1177 if (crossing->isMarkedForDrawingFront()) {
1178 // insert at front
1179 container.crossings.insert(container.crossings.begin(), crossing);
1180 container.networkElements.insert(container.networkElements.begin(), crossing);
1181 container.attributeCarriers.insert(container.attributeCarriers.begin(), crossing);
1182 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), crossing);
1183 } else {
1184 // insert at back
1185 container.crossings.push_back(crossing);
1186 container.networkElements.push_back(crossing);
1187 container.attributeCarriers.push_back(crossing);
1188 container.GUIGlObjects.push_back(crossing);
1189 }
1190 break;
1191 }
1192 case GLO_WALKINGAREA: {
1193 // get walkingArea
1194 auto walkingArea = myViewNet->getNet()->getAttributeCarriers()->retrieveWalkingArea(glObject);
1195 // check front element
1196 if (walkingArea->isMarkedForDrawingFront()) {
1197 // insert at front
1198 container.walkingAreas.insert(container.walkingAreas.begin(), walkingArea);
1199 container.networkElements.insert(container.networkElements.begin(), walkingArea);
1200 container.attributeCarriers.insert(container.attributeCarriers.begin(), walkingArea);
1201 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), walkingArea);
1202 } else {
1203 // insert at back
1204 container.walkingAreas.push_back(walkingArea);
1205 container.networkElements.push_back(walkingArea);
1206 container.attributeCarriers.push_back(walkingArea);
1207 container.GUIGlObjects.push_back(walkingArea);
1208 }
1209 break;
1210 }
1211 case GLO_CONNECTION: {
1212 // get connection
1213 auto connection = myViewNet->getNet()->getAttributeCarriers()->retrieveConnection(glObject);
1214 // check front element
1215 if (connection->isMarkedForDrawingFront()) {
1216 // insert at front
1217 container.connections.insert(container.connections.begin(), connection);
1218 container.networkElements.insert(container.networkElements.begin(), connection);
1219 container.attributeCarriers.insert(container.attributeCarriers.begin(), connection);
1220 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), connection);
1221 } else {
1222 // insert at back
1223 container.connections.push_back(connection);
1224 container.networkElements.push_back(connection);
1225 container.attributeCarriers.push_back(connection);
1226 container.GUIGlObjects.push_back(connection);
1227 }
1228 break;
1229 }
1230 case GLO_TLLOGIC: {
1231 // get internal lane
1232 auto internalLane = myViewNet->getNet()->getAttributeCarriers()->retrieveInternalLane(glObject);
1233 // check front element
1234 if (internalLane->isMarkedForDrawingFront()) {
1235 // insert at front
1236 container.internalLanes.insert(container.internalLanes.begin(), internalLane);
1237 container.attributeCarriers.insert(container.attributeCarriers.begin(), internalLane);
1238 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), internalLane);
1239 } else {
1240 // insert at back
1241 container.internalLanes.push_back(internalLane);
1242 container.attributeCarriers.push_back(internalLane);
1243 container.GUIGlObjects.push_back(internalLane);
1244 }
1245 break;
1246 }
1247 default:
1248 break;
1249 }
1250}
1251
1252
1253void
1255 // get additional element
1256 auto additionalElement = myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject, false);
1257 if (additionalElement) {
1258 // insert depending if is the front attribute carrier
1259 if (additionalElement->isMarkedForDrawingFront()) {
1260 // insert at front
1261 container.additionals.insert(container.additionals.begin(), additionalElement);
1262 container.attributeCarriers.insert(container.attributeCarriers.begin(), additionalElement);
1263 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), additionalElement);
1264 } else {
1265 // insert at back
1266 container.additionals.push_back(additionalElement);
1267 container.attributeCarriers.push_back(additionalElement);
1268 container.GUIGlObjects.push_back(additionalElement);
1269 }
1270 }
1271}
1272
1273
1274void
1276 // cast specific shape
1277 if (glObject->getType() == GLO_POI) {
1278 // cast POI
1279 auto POI = dynamic_cast<GNEPOI*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
1280 // check front element
1281 if (POI->isMarkedForDrawingFront()) {
1282 // insert at front
1283 container.POIs.insert(container.POIs.begin(), POI);
1284 } else {
1285 // insert at back
1286 container.POIs.push_back(POI);
1287 }
1288 } else if ((glObject->getType() == GLO_POLYGON) || (glObject->getType() == GLO_JPS_WALKABLEAREA) || (glObject->getType() == GLO_JPS_OBSTACLE)) {
1289 // cast poly
1290 auto poly = dynamic_cast<GNEPoly*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
1291 // check front element
1292 if (poly->isMarkedForDrawingFront()) {
1293 // insert at front
1294 container.polys.insert(container.polys.begin(), poly);
1295 } else {
1296 // insert at back
1297 container.polys.push_back(poly);
1298 }
1299 }
1300}
1301
1302
1303void
1305 // cast specific TAZ
1306 if (glObject->getType() == GLO_TAZ) {
1307 // cast TAZ
1308 auto TAZ = dynamic_cast<GNETAZ*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
1309 // check front element
1310 if (TAZ->isMarkedForDrawingFront()) {
1311 // insert at front
1312 container.TAZs.insert(container.TAZs.begin(), TAZ);
1313 } else {
1314 // insert at back
1315 container.TAZs.push_back(TAZ);
1316 }
1317 }
1318}
1319
1320
1321void
1323 // get demandElement
1324 GNEDemandElement* demandElement = myViewNet->getNet()->getAttributeCarriers()->retrieveDemandElement(glObject, false);
1325 if (demandElement) {
1326 // insert depending if is the front attribute carrier
1327 if (demandElement->isMarkedForDrawingFront()) {
1328 // insert at front
1329 container.demandElements.insert(container.demandElements.begin(), demandElement);
1330 container.attributeCarriers.insert(container.attributeCarriers.begin(), demandElement);
1331 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), demandElement);
1332 } else {
1333 // insert at back
1334 container.demandElements.push_back(demandElement);
1335 container.attributeCarriers.push_back(demandElement);
1336 container.GUIGlObjects.push_back(demandElement);
1337 }
1338 }
1339}
1340
1341
1342void
1344 // cast specific generic data
1345 switch (glObject->getType()) {
1346 case GLO_EDGEDATA: {
1347 // cast EdgeData
1348 auto edgeData = dynamic_cast<GNEEdgeData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1349 // check front element
1350 if (edgeData->isMarkedForDrawingFront()) {
1351 // insert at front
1352 container.edgeDatas.insert(container.edgeDatas.begin(), edgeData);
1353 container.genericDatas.insert(container.genericDatas.begin(), edgeData);
1354 container.attributeCarriers.insert(container.attributeCarriers.begin(), edgeData);
1355 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edgeData);
1356 } else {
1357 // insert at back
1358 container.edgeDatas.push_back(edgeData);
1359 container.genericDatas.push_back(edgeData);
1360 container.attributeCarriers.push_back(edgeData);
1361 container.GUIGlObjects.push_back(edgeData);
1362 }
1363 break;
1364 }
1365 case GLO_EDGERELDATA: {
1366 // cast EdgeData
1367 auto edgeRelData = dynamic_cast<GNEEdgeRelData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1368 // check front element
1369 if (edgeRelData->isMarkedForDrawingFront()) {
1370 // insert at front
1371 container.edgeRelDatas.insert(container.edgeRelDatas.begin(), edgeRelData);
1372 container.genericDatas.insert(container.genericDatas.begin(), edgeRelData);
1373 container.attributeCarriers.insert(container.attributeCarriers.begin(), edgeRelData);
1374 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edgeRelData);
1375 } else {
1376 // insert at back
1377 container.edgeRelDatas.push_back(edgeRelData);
1378 container.genericDatas.push_back(edgeRelData);
1379 container.attributeCarriers.push_back(edgeRelData);
1380 container.GUIGlObjects.push_back(edgeRelData);
1381 }
1382 break;
1383 }
1384 case GLO_TAZRELDATA: {
1385 // cast TAZRelData
1386 auto TAZRelData = dynamic_cast<GNETAZRelData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1387 // check front element
1388 if (TAZRelData->isMarkedForDrawingFront()) {
1389 // insert at front
1390 container.TAZRelDatas.insert(container.TAZRelDatas.begin(), TAZRelData);
1391 container.genericDatas.insert(container.genericDatas.begin(), TAZRelData);
1392 container.attributeCarriers.insert(container.attributeCarriers.begin(), TAZRelData);
1393 container.GUIGlObjects.insert(container.GUIGlObjects.begin(), TAZRelData);
1394 } else {
1395 // insert at back
1396 container.TAZRelDatas.push_back(TAZRelData);
1397 container.genericDatas.push_back(TAZRelData);
1398 container.attributeCarriers.push_back(TAZRelData);
1399 container.GUIGlObjects.push_back(TAZRelData);
1400 }
1401 break;
1402 }
1403 default:
1404 break;
1405 }
1406}
1407
1408
1409void
1411 // iterate over filtered edge objects
1412 for (const auto& glObjectLayer : objectsContainer) {
1413 for (const auto& glObject : glObjectLayer.second) {
1414 // update all elements by categories
1415 updateNetworkElements(myViewObjects, glObject.object);
1416 updateAdditionalElements(myViewObjects, glObject.object);
1417 updateShapeElements(myViewObjects, glObject.object);
1418 updateTAZElements(myViewObjects, glObject.object);
1419 updateDemandElements(myViewObjects, glObject.object);
1420 updateGenericDataElements(myViewObjects, glObject.object);
1421 }
1422 }
1423}
1424
1425
1429
1430// ---------------------------------------------------------------------------
1431// GNEViewNetHelper::MouseButtonKeyPressed - methods
1432// ---------------------------------------------------------------------------
1433
1437
1438
1439void
1441 myEventInfo = (FXEvent*) eventData;
1442}
1443
1444
1445bool
1447 if (myEventInfo) {
1448 return (myEventInfo->state & SHIFTMASK) != 0;
1449 } else {
1450 return false;
1451 }
1452}
1453
1454
1455bool
1457 if (myEventInfo) {
1458 return (myEventInfo->state & CONTROLMASK) != 0;
1459 } else {
1460 return false;
1461 }
1462}
1463
1464
1465bool
1467 if (myEventInfo) {
1468 return (myEventInfo->state & ALTMASK) != 0;
1469 } else {
1470 return false;
1471 }
1472}
1473
1474
1475bool
1477 if (myEventInfo) {
1478 return (myEventInfo->state & LEFTBUTTONMASK) != 0;
1479 } else {
1480 return false;
1481 }
1482}
1483
1484
1485bool
1487 if (myEventInfo) {
1488 return (myEventInfo->state & RIGHTBUTTONMASK) != 0;
1489 } else {
1490 return false;
1491 }
1492}
1493
1494// ---------------------------------------------------------------------------
1495// GNEViewNetHelper::MoveSingleElementValues - methods
1496// ---------------------------------------------------------------------------
1497
1501
1502
1503bool
1505 // first obtain moving reference (common for all)
1506 myRelativeClickedPosition = myViewNet->getPositionInformation();
1507 // get edited element
1508 const GNENetworkElement* editedElement = myViewNet->myEditNetworkElementShapes.getEditedNetworkElement();
1509 // check what type of AC will be moved
1510 if (myViewNet->myViewObjectsSelector.getJunctionFront() && (myViewNet->myViewObjectsSelector.getJunctionFront() == editedElement)) {
1511 // get move operation
1512 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getJunctionFront()->getMoveElement()->getMoveOperation();
1513 // continue if move operation is valid
1514 if (moveOperation) {
1515 myMoveOperation = moveOperation;
1516 return true;
1517 } else {
1518 return false;
1519 }
1520 } else if (myViewNet->myViewObjectsSelector.getLaneFront() && (myViewNet->myViewObjectsSelector.getLaneFront() == editedElement)) {
1521 // get move operation
1522 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getLaneFront()->getMoveElement()->getMoveOperation();
1523 // continue if move operation is valid
1524 if (moveOperation) {
1525 myMoveOperation = moveOperation;
1526 return true;
1527 } else {
1528 return false;
1529 }
1530 } else if (myViewNet->myViewObjectsSelector.getCrossingFront() && (myViewNet->myViewObjectsSelector.getCrossingFront() == editedElement)) {
1531 // get move operation
1532 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getCrossingFront()->getMoveElement()->getMoveOperation();
1533 // continue if move operation is valid
1534 if (moveOperation) {
1535 myMoveOperation = moveOperation;
1536 return true;
1537 } else {
1538 return false;
1539 }
1540 } else if (myViewNet->myViewObjectsSelector.getConnectionFront() && (myViewNet->myViewObjectsSelector.getConnectionFront() == editedElement)) {
1541 // get move operation
1542 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getConnectionFront()->getMoveElement()->getMoveOperation();
1543 // continue if move operation is valid
1544 if (moveOperation) {
1545 myMoveOperation = moveOperation;
1546 return true;
1547 } else {
1548 return false;
1549 }
1550 } else if (myViewNet->myViewObjectsSelector.getWalkingAreaFront() && (myViewNet->myViewObjectsSelector.getWalkingAreaFront() == editedElement)) {
1551 // currently walking areas cannot be moved (will be implemented in the future)
1552 return false;
1553 } else {
1554 // there isn't moved items, then return false
1555 return false;
1556 }
1557}
1558
1559
1560bool
1562 // first obtain moving reference (common for all)
1563 myRelativeClickedPosition = myViewNet->getPositionInformation();
1564 // get front AC
1565 const GNEAttributeCarrier* markAC = myViewNet->myViewObjectsSelector.getAttributeCarrierFront();
1566 // check what type of AC will be moved
1567 if (myViewNet->myViewObjectsSelector.getPolyFront() && (markAC == myViewNet->myViewObjectsSelector.getPolyFront())) {
1568 // get move operation
1569 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getPolyFront()->getMoveElement()->getMoveOperation();
1570 // continue if move operation is valid
1571 if (moveOperation) {
1572 myMoveOperation = moveOperation;
1573 return true;
1574 } else {
1575 return false;
1576 }
1577 } else if (myViewNet->myViewObjectsSelector.getPOIFront() && (markAC == myViewNet->myViewObjectsSelector.getPOIFront())) {
1578 // get move operation
1579 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getPOIFront()->getMoveElement()->getMoveOperation();
1580 // continue if move operation is valid
1581 if (moveOperation) {
1582 myMoveOperation = moveOperation;
1583 return true;
1584 } else {
1585 return false;
1586 }
1587 } else if (myViewNet->myViewObjectsSelector.getAdditionalFront() && (markAC == myViewNet->myViewObjectsSelector.getAdditionalFront()) &&
1588 myViewNet->myViewObjectsSelector.getAdditionalFront()->getMoveElement()) {
1589 // get move operation
1590 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getAdditionalFront()->getMoveElement()->getMoveOperation();
1591 // continue if move operation is valid
1592 if (moveOperation) {
1593 myMoveOperation = moveOperation;
1594 return true;
1595 } else {
1596 return false;
1597 }
1598 } else if (myViewNet->myViewObjectsSelector.getJunctionFront() && (markAC == myViewNet->myViewObjectsSelector.getJunctionFront())) {
1599 // check if over junction there is a geometry point
1600 if (myViewNet->myViewObjectsSelector.getEdgeFront() && (myViewNet->myViewObjectsSelector.getEdgeFront()->clickedOverGeometryPoint(myRelativeClickedPosition))) {
1601 // get move operation
1602 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getEdgeFront()->getMoveElement()->getMoveOperation();
1603 // continue if move operation is valid
1604 if (moveOperation) {
1605 myMoveOperation = moveOperation;
1606 return true;
1607 } else {
1608 return false;
1609 }
1610 } else {
1611 // get move operation
1612 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getJunctionFront()->getMoveElement()->getMoveOperation();
1613 // continue if move operation is valid
1614 if (moveOperation) {
1615 myMoveOperation = moveOperation;
1616 return true;
1617 } else {
1618 return false;
1619 }
1620 }
1621 } else if (myViewNet->myViewObjectsSelector.getEdgeFront() && (markAC == myViewNet->myViewObjectsSelector.getEdgeFront())) {
1622 // calculate Edge movement values (can be entire shape, single geometry points, altitude, etc.)
1623 if (myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1624 // edit end point
1625 myViewNet->myViewObjectsSelector.getEdgeFront()->editEndpoint(myViewNet->getPositionInformation(), myViewNet->myUndoList);
1626 // edge values wasn't calculated, then return false
1627 return false;
1628 } else {
1629 // get move operation
1630 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getEdgeFront()->getMoveElement()->getMoveOperation();
1631 // continue if move operation is valid
1632 if (moveOperation) {
1633 myMoveOperation = moveOperation;
1634 return true;
1635 } else {
1636 return false;
1637 }
1638 }
1639 } else if (myViewNet->myViewObjectsSelector.getLaneFront() && (markAC == myViewNet->myViewObjectsSelector.getLaneFront())) {
1640 // get move operation
1641 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getLaneFront()->getMoveElement()->getMoveOperation();
1642 // continue if move operation is valid
1643 if (moveOperation) {
1644 myMoveOperation = moveOperation;
1645 return true;
1646 } else {
1647 return false;
1648 }
1649 } else {
1650 // there isn't moved items, then return false
1651 return false;
1652 }
1653}
1654
1655
1656bool
1658 // first obtain moving reference (common for all)
1659 myRelativeClickedPosition = myViewNet->getPositionInformation();
1660 // get front AC
1661 const GNEAttributeCarrier* markAC = myViewNet->myViewObjectsSelector.getAttributeCarrierFront();
1662 // check if demand element can be moved
1663 if (myViewNet->myViewObjectsSelector.getDemandElementFront() && (markAC == myViewNet->myViewObjectsSelector.getDemandElementFront() &&
1664 myViewNet->myViewObjectsSelector.getDemandElementFront()->getMoveElement())) {
1665 // get move operation
1666 GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getDemandElementFront()->getMoveElement()->getMoveOperation();
1667 // continue if move operation is valid
1668 if (moveOperation) {
1669 myMoveOperation = moveOperation;
1670 return true;
1671 } else {
1672 return false;
1673 }
1674 } else {
1675 // there isn't moved items, then return false
1676 return false;
1677 }
1678}
1679
1680
1681void
1683 if (myMoveOperation) {
1684 // calculate moveOffset
1685 const GNEMoveOffset moveOffset = calculateMoveOffset();
1686 // check if mouse button is pressed
1687 if (mouseLeftButtonPressed) {
1688 // move elements
1689 GNEMoveElement::moveElement(myViewNet, myMoveOperation, moveOffset);
1690 } else {
1691 // commit move
1692 GNEMoveElement::commitMove(myViewNet, myMoveOperation, moveOffset, myViewNet->getUndoList());
1693 // don't forget delete move operation
1694 delete myMoveOperation;
1695 myMoveOperation = nullptr;
1696 }
1697 }
1698}
1699
1700
1701void
1703 if (myMoveOperation) {
1704 // calculate moveOffset
1705 const GNEMoveOffset moveOffset = calculateMoveOffset();
1706 GNEMoveElement::commitMove(myViewNet, myMoveOperation, moveOffset, myViewNet->getUndoList());
1707 // don't forget delete move operation
1708 delete myMoveOperation;
1709 myMoveOperation = nullptr;
1710 }
1711}
1712
1713
1714bool
1716 return myMoveOperation != nullptr;
1717}
1718
1719
1722 if (myMoveOperation) {
1723 return myMoveOperation->moveElement;
1724 } else {
1725 return nullptr;
1726 }
1727}
1728
1729
1730const GNEMoveOffset
1732 // calculate moveOffset depending of current mouse position and relative clicked position
1733 // @note #3521: Add checkBox to allow moving elements... has to be implemented and used here
1734 Position moveOffset = (myViewNet->getPositionInformation() - myViewNet->myMoveSingleElement.myRelativeClickedPosition);
1735 // calculate Z depending of moveElevation
1736 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1737 // use Y as Z value and return Z move offset
1738 return GNEMoveOffset(moveOffset.y());
1739 } else {
1740 // return X-Y move offset
1741 return GNEMoveOffset(moveOffset.x(), moveOffset.y());
1742 }
1743}
1744
1745// ---------------------------------------------------------------------------
1746// GNEViewNetHelper::MoveMultipleElementValues - methods
1747// ---------------------------------------------------------------------------
1748
1750 myViewNet(viewNet),
1751 myMovingSelectedEdge(false),
1752 myEdgeOffset(0) {
1753}
1754
1755
1756void
1758 // save clicked position (to calculate offset)
1759 myClickedPosition = myViewNet->getPositionInformation();
1760 // continue depending of clicked element
1761 if (myViewNet->myViewObjectsSelector.getJunctionFront()) {
1762 calculateJunctionSelection();
1763 } else if (myViewNet->myViewObjectsSelector.getEdgeFront()) {
1764 calculateEdgeSelection(myViewNet->myViewObjectsSelector.getEdgeFront());
1765 }
1766 myViewNet->updateViewNet();
1767}
1768
1769
1770void
1772 // calculate moveOffset
1773 const GNEMoveOffset moveOffset = calculateMoveOffset();
1774 // check if mouse button is pressed
1775 if (mouseLeftButtonPressed) {
1776 // iterate over all operations
1777 for (const auto& moveOperation : myMoveOperations) {
1778 // move elements
1779 GNEMoveElement::moveElement(myViewNet, moveOperation, moveOffset);
1780 }
1781 } else if (myMoveOperations.size() > 0) {
1782 // begin undo list
1783 myViewNet->getUndoList()->begin(GUIIcon::MODEMOVE, TL("moving selection"));
1784 // iterate over all operations
1785 for (const auto& moveOperation : myMoveOperations) {
1786 // commit move
1787 GNEMoveElement::commitMove(myViewNet, moveOperation, moveOffset, myViewNet->getUndoList());
1788 // don't forget delete move operation
1789 delete moveOperation;
1790 }
1791 // end undo list
1792 myViewNet->getUndoList()->end();
1793 // clear move operations
1794 myMoveOperations.clear();
1795 }
1796}
1797
1798
1799void
1801 // calculate moveOffset
1802 const GNEMoveOffset moveOffset = calculateMoveOffset();
1803 // begin undo list
1804 myViewNet->getUndoList()->begin(GUIIcon::MODEMOVE, TL("moving selection"));
1805 // finish all move operations
1806 for (const auto& moveOperation : myMoveOperations) {
1807 GNEMoveElement::commitMove(myViewNet, moveOperation, moveOffset, myViewNet->getUndoList());
1808 // don't forget delete move operation
1809 delete moveOperation;
1810 }
1811 // end undo list
1812 myViewNet->getUndoList()->end();
1813 // clear move operations
1814 myMoveOperations.clear();
1815}
1816
1817
1818bool
1820 return (myMoveOperations.size() > 0);
1821}
1822
1823
1824bool
1826 return myMovingSelectedEdge;
1827}
1828
1829
1830void
1834
1835
1836double
1838 return myEdgeOffset;
1839}
1840
1841
1842bool
1844 return myMoveOperations.size() > 0;
1845}
1846
1847
1848const GNEMoveOffset
1850 // calculate moveOffset depending of current mouse position and relative clicked position
1851 // @note #3521: Add checkBox to allow moving elements... has to be implemented and used here
1852 Position moveOffset = (myViewNet->getPositionInformation() - myClickedPosition);
1853 // calculate Z depending of moveElevation
1854 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1855 // use Y for Z and return X move offset
1856 return GNEMoveOffset(moveOffset.y());
1857 } else {
1858 // return X-Y move offset
1859 return GNEMoveOffset(moveOffset.x(), moveOffset.y());
1860 }
1861}
1862
1863
1864void
1866 // declare move operation
1867 GNEMoveOperation* moveOperation = nullptr;
1868 // first move all selected junctions
1869 const auto selectedJunctions = myViewNet->getNet()->getAttributeCarriers()->getSelectedJunctions();
1870 // iterate over selected junctions
1871 for (const auto& junction : selectedJunctions) {
1872 moveOperation = junction->getMoveElement()->getMoveOperation();
1873 if (moveOperation) {
1874 myMoveOperations.push_back(moveOperation);
1875 }
1876 }
1877 // now move all selected edges
1878 const auto selectedEdges = myViewNet->getNet()->getAttributeCarriers()->getSelectedEdges();
1879 // iterate over selected edges
1880 for (const auto& edge : selectedEdges) {
1881 moveOperation = edge->getMoveElement()->getMoveOperation();
1882 if (moveOperation) {
1883 myMoveOperations.push_back(moveOperation);
1884 }
1885 }
1886}
1887
1888
1889void
1891 // first move all selected junctions
1892 const auto selectedJunctions = myViewNet->getNet()->getAttributeCarriers()->getSelectedJunctions();
1893 // iterate over selected junctions
1894 for (const auto& junction : selectedJunctions) {
1895 GNEMoveOperation* moveOperation = junction->getMoveElement()->getMoveOperation();
1896 if (moveOperation) {
1897 myMoveOperations.push_back(moveOperation);
1898 }
1899 }
1900 // enable moving selected edge flag
1901 myMovingSelectedEdge = true;
1902 // get edge shape
1903 const auto& shape = clickedEdge->getNBEdge()->getGeometry();
1904 // calculate offset based on the clicked edge shape and convex angle
1905 if (clickedEdge->isConvexAngle()) {
1906 myEdgeOffset = shape.nearest_offset_to_point2D(myViewNet->getPositionInformation());
1907 } else {
1908 myEdgeOffset = shape.length2D() - shape.nearest_offset_to_point2D(myViewNet->getPositionInformation());
1909 }
1910 // now move all selected edges
1911 const auto selectedEdges = myViewNet->getNet()->getAttributeCarriers()->getSelectedEdges();
1912 // iterate over edges between 0 and 180 degrees
1913 for (const auto& edge : selectedEdges) {
1914 GNEMoveOperation* moveOperation = edge->getMoveElement()->getMoveOperation();
1915 // continue if move operation is valid
1916 if (moveOperation) {
1917 myMoveOperations.push_back(moveOperation);
1918 }
1919 }
1920}
1921
1922// ---------------------------------------------------------------------------
1923// GNEViewNetHelper::VehicleOptions - methods
1924// ---------------------------------------------------------------------------
1925
1927 myViewNet(viewNet) {
1928}
1929
1930
1931void
1936
1937
1938void
1942
1943// ---------------------------------------------------------------------------
1944// GNEViewNetHelper::VehicleTypeOptions - methods
1945// ---------------------------------------------------------------------------
1946
1950
1951
1952void
1957
1958
1959void
1963
1964// ---------------------------------------------------------------------------
1965// GNEViewNetHelper::SelectingArea - methods
1966// ---------------------------------------------------------------------------
1967
1969 selectingUsingRectangle(false),
1970 startDrawing(false),
1971 myViewNet(viewNet) {
1972}
1973
1974
1975void
1977 selectingUsingRectangle = true;
1978 selectionCorner1 = myViewNet->getPositionInformation();
1979 selectionCorner2 = selectionCorner1;
1980}
1981
1982
1983void
1985 // start drawing
1986 startDrawing = true;
1987 // only update selection corner 2
1988 selectionCorner2 = myViewNet->getPositionInformation();
1989 // update status bar
1990 myViewNet->setStatusBarText(TL("Selection width:") + toString(fabs(selectionCorner1.x() - selectionCorner2.x()))
1991 + TL(" height:") + toString(fabs(selectionCorner1.y() - selectionCorner2.y()))
1992 + TL(" diagonal:") + toString(selectionCorner1.distanceTo2D(selectionCorner2)));
1993}
1994
1995
1996void
1998 // finish rectangle selection
1999 selectingUsingRectangle = false;
2000 startDrawing = false;
2001 // clear status bar
2002 myViewNet->setStatusBarText("");
2003}
2004
2005
2006void
2008 // shift held down on mouse-down and mouse-up and check that rectangle exist
2009 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
2010 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
2011 myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
2012 // create boundary between two corners
2013 Boundary rectangleBoundary;
2014 rectangleBoundary.add(selectionCorner1);
2015 rectangleBoundary.add(selectionCorner2);
2016 // process selection within boundary
2017 processBoundarySelection(rectangleBoundary);
2018 }
2019}
2020
2021
2022std::vector<GNEEdge*>
2024 // shift held down on mouse-down and mouse-up and check that rectangle exist
2025 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
2026 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
2027 myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
2028 // create boundary between two corners
2029 Boundary rectangleBoundary;
2030 rectangleBoundary.add(selectionCorner1);
2031 rectangleBoundary.add(selectionCorner2);
2032 // get all elements in boundary
2033 myViewNet->updateObjectsInShape(rectangleBoundary.getShape(false));
2034 // return all edges
2035 return myViewNet->getViewObjectsSelector().getEdges();
2036 } else {
2037 return {};
2038 }
2039}
2040
2041
2042void
2044 if (selectingUsingRectangle) {
2046 glTranslated(0, 0, GLO_RECTANGLESELECTION);
2047 GLHelper::setColor(color);
2048 glLineWidth(2);
2049 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
2050 glBegin(GL_QUADS);
2051 glVertex2d(selectionCorner1.x(), selectionCorner1.y());
2052 glVertex2d(selectionCorner1.x(), selectionCorner2.y());
2053 glVertex2d(selectionCorner2.x(), selectionCorner2.y());
2054 glVertex2d(selectionCorner2.x(), selectionCorner1.y());
2055 glEnd();
2057 }
2058}
2059
2060
2061void
2063 const bool selEdges = myViewNet->myNetworkViewOptions.selectEdges();
2064 // obtain all elements in boundary
2065 myViewNet->updateObjectsInShape(boundary.getShape(false));
2066 // filter ACsInBoundary depending of current supermode
2067 std::vector<GNEAttributeCarrier*> ACsFiltered;
2068 ACsFiltered.reserve(myViewNet->getViewObjectsSelector().getAttributeCarriers().size());
2069 for (const auto& AC : myViewNet->getViewObjectsSelector().getAttributeCarriers()) {
2070 const auto tagProperty = AC->getTagProperty();
2071 if (tagProperty->isNetworkElement() || tagProperty->isAdditionalElement()) {
2072 // filter edges and lanes
2073 if (((tagProperty->getTag() == SUMO_TAG_EDGE) && !selEdges) ||
2074 ((tagProperty->getTag() == SUMO_TAG_LANE) && selEdges)) {
2075 continue;
2076 } else {
2077 ACsFiltered.push_back(AC);
2078 }
2079 } else if (tagProperty->isDemandElement()) {
2080 ACsFiltered.push_back(AC);
2081 } else if (tagProperty->isGenericData()) {
2082 ACsFiltered.push_back(AC);
2083 }
2084 }
2085 // filter ACsInBoundary depending if is locked
2086 std::vector<GNEAttributeCarrier*> ACsFilteredUnlocked;
2087 ACsFilteredUnlocked.reserve(ACsFiltered.size());
2088 for (const auto& AC : ACsFiltered) {
2089 // isGLObjectLockedcheck also if we're in their correspoindient supermode
2090 if (!AC->getGUIGlObject()->isGLObjectLocked()) {
2091 ACsFilteredUnlocked.push_back(AC);
2092 }
2093 }
2094 // declare two sets of attribute carriers, one for select and another for unselect
2095 std::vector<GNEAttributeCarrier*> ACToSelect;
2096 std::vector<GNEAttributeCarrier*> ACToUnselect;
2097 // reserve memory (we assume that in the worst case we're going to insert all elements of ACsInBoundaryFiltered
2098 ACToSelect.reserve(ACsFilteredUnlocked.size());
2099 ACToUnselect.reserve(ACsFilteredUnlocked.size());
2100 // in restrict AND replace mode all current selected attribute carriers will be unselected
2101 const auto modificationMode = myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode();
2103 // obtain selected ACs depending of current supermode
2104 const auto selectedAC = myViewNet->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(false);
2105 // add id into ACs to unselect
2106 for (const auto& AC : selectedAC) {
2107 ACToUnselect.push_back(AC);
2108 }
2109 }
2110 // iterate over AttributeCarriers obtained of boundary an place it in ACToSelect or ACToUnselect
2111 for (const auto& AC : ACsFilteredUnlocked) {
2112 switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
2114 ACToUnselect.push_back(AC);
2115 break;
2117 if (std::find(ACToUnselect.begin(), ACToUnselect.end(), AC) != ACToUnselect.end()) {
2118 ACToSelect.push_back(AC);
2119 }
2120 break;
2121 default:
2122 ACToSelect.push_back(AC);
2123 break;
2124 }
2125 }
2126 // select junctions and their connections and crossings if Auto select junctions is enabled (note: only for "add mode")
2127 if (myViewNet->autoSelectNodes() && (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode() == GNESelectorFrame::ModificationMode::Operation::ADD)) {
2128 std::vector<GNEEdge*> edgesToSelect;
2129 // iterate over ACToSelect and extract edges
2130 for (const auto& AC : ACToSelect) {
2131 if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {
2132 edgesToSelect.push_back(dynamic_cast<GNEEdge*>(AC));
2133 }
2134 }
2135 // iterate over extracted edges
2136 for (const auto& edge : edgesToSelect) {
2137 // select junction source and all their connections and crossings
2138 ACToSelect.push_back(edge->getFromJunction());
2139 for (const auto& connection : edge->getFromJunction()->getGNEConnections()) {
2140 ACToSelect.push_back(connection);
2141 }
2142 for (const auto& crossing : edge->getFromJunction()->getGNECrossings()) {
2143 ACToSelect.push_back(crossing);
2144 }
2145 // select junction destination and all their connections crossings
2146 ACToSelect.push_back(edge->getToJunction());
2147 for (const auto& connection : edge->getToJunction()->getGNEConnections()) {
2148 ACToSelect.push_back(connection);
2149 }
2150 for (const auto& crossing : edge->getToJunction()->getGNECrossings()) {
2151 ACToSelect.push_back(crossing);
2152 }
2153 }
2154 }
2155 // only continue if there is ACs to select or unselect
2156 if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
2157 // first unselect AC of ACToUnselect and then selects AC of ACToSelect
2158 myViewNet->myUndoList->begin(GUIIcon::MODESELECT, TL("selection using rectangle"));
2159 for (const auto& AC : ACToUnselect) {
2160 AC->setAttribute(GNE_ATTR_SELECTED, "0", myViewNet->myUndoList);
2161 }
2162 for (const auto& AC : ACToSelect) {
2163 if (AC->getTagProperty()->isSelectable()) {
2164 AC->setAttribute(GNE_ATTR_SELECTED, "1", myViewNet->myUndoList);
2165 }
2166 }
2167 myViewNet->myUndoList->end();
2168 }
2169 myViewNet->makeNonCurrent();
2170}
2171
2172// ---------------------------------------------------------------------------
2173// GNEViewNetHelper::TestingMode - methods
2174// ---------------------------------------------------------------------------
2175
2177 myViewNet(viewNet) {
2178}
2179
2180
2181void
2183 // first check if testing mode is enabled and window size is correct
2184 if (OptionsCont::getOptions().getBool("gui-testing") && OptionsCont::getOptions().isSet("window-size")) {
2185 std::vector<std::string> windowSize = OptionsCont::getOptions().getStringVector("window-size");
2186 // make sure that given windows size has exactly two valid int values
2187 if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
2188 myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
2189 myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
2190 } else {
2191 WRITE_ERRORF(TL("Invalid windows size-format: %for option 'window-size'"), toString(windowSize));
2192 }
2193 }
2194}
2195
2196
2197void
2199 // first check if testing mode is enabled
2200 if (OptionsCont::getOptions().getBool("gui-testing")) {
2201 // check if main windows has to be resized
2202 if (myTestingWidth > 0) {
2203 mainWindow->resize(myTestingWidth, myTestingHeight);
2204 }
2205 //std::cout << " fixed: view=" << getWidth() << ", " << getHeight() << " app=" << mainWindow->getWidth() << ", " << mainWindow->getHeight() << "\n";
2206 // draw pink square in the upper left corner on top of everything
2207 const double size = myViewNet->p2m(32);
2208 Position center = myViewNet->screenPos2NetPos(8, 8);
2209 // magenta
2212 glTranslated(center.x(), center.y(), GLO_TESTELEMENT);
2213 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2214 glBegin(GL_QUADS);
2215 glVertex2d(0, 0);
2216 glVertex2d(0, -size);
2217 glVertex2d(size, -size);
2218 glVertex2d(size, 0);
2219 glEnd();
2221 // blue
2224 glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 1);
2225 glScaled(0.7, 0.7, 0);
2226 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2227 glBegin(GL_QUADS);
2228 glVertex2d(0, 0);
2229 glVertex2d(0, -size);
2230 glVertex2d(size, -size);
2231 glVertex2d(size, 0);
2232 glEnd();
2234 // yellow
2237 glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 2);
2238 glScaled(0.4, 0.4, 0);
2239 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2240 glBegin(GL_QUADS);
2241 glVertex2d(0, 0);
2242 glVertex2d(0, -size);
2243 glVertex2d(size, -size);
2244 glVertex2d(size, 0);
2245 glEnd();
2247 }
2248}
2249
2250// ---------------------------------------------------------------------------
2251// GNEViewNetHelper::SaveElements - methods
2252// ---------------------------------------------------------------------------
2253
2255 myViewNet(viewNet) {
2256}
2257
2258
2260 delete mySaveIndividualFilesPopup;
2261}
2262
2263
2264void
2266 // get save element grip
2267 auto gripSaveElements = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements;
2268 // get tooltip menu
2269 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2270 // create save sumo config button
2271 mySaveNeteditConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2272 std::string("\t") + TL("Save Netedit Config") + std::string("\t") + TL("Save Netedit Config. (Ctrl+Shift+E)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG),
2273 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG, GUIDesignButtonToolbar);
2274 mySaveNeteditConfig->create();
2275 // create save sumo config button
2276 mySaveSumoConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2277 std::string("\t") + TL("Save Sumo Config") + std::string("\t") + TL("Save Sumo Config. (Ctrl+Shift+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG),
2278 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG, GUIDesignButtonToolbar);
2279 mySaveSumoConfig->create();
2280 // create save network button
2281 mySaveNetwork = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2282 std::string("\t") + TL("Save network") + std::string("\t") + TL("Save network. (Ctrl+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS),
2283 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK, GUIDesignButtonToolbar);
2284 mySaveNetwork->create();
2285 // create popup for save individual files
2286 mySaveIndividualFilesPopup = new FXPopup(gripSaveElements, POPUP_VERTICAL);
2287 mySaveIndividualFilesPopup->create();
2288 // create save individual files button
2289 mySaveIndividualFiles = new MFXMenuButtonTooltip(gripSaveElements, tooltipMenu,
2290 std::string("\t") + TL("Save individual files") + std::string("\t") + TL("Save individual files."),
2291 GUIIconSubSys::getIcon(GUIIcon::SAVE_MULTIPLE), mySaveIndividualFilesPopup, nullptr, GUIDesignButtonToolbarLocator);
2292 mySaveIndividualFiles->create();
2293 // create save additional elements button
2294 mySaveAdditionalElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2295 std::string("\t") + TL("Save additional elements") + std::string("\t") + TL("Save additional elements. (Ctrl+Shift+A)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS),
2296 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS, GUIDesignButtonPopup);
2297 mySaveAdditionalElements->create();
2298 // create save demand elements button
2299 mySaveDemandElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2300 std::string("\t") + TL("Save demand elements") + std::string("\t") + TL("Save demand elements. (Ctrl+Shift+D)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS),
2301 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS, GUIDesignButtonPopup);
2302 mySaveDemandElements->create();
2303 // create save data elements button
2304 mySaveDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2305 std::string("\t") + TL("Save data elements") + std::string("\t") + TL("Save data elements. (Ctrl+Shift+B)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS),
2306 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS, GUIDesignButtonPopup);
2307 mySaveDataElements->create();
2308 // create save mean datas elements button
2309 mySaveMeanDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2310 std::string("\t") + TL("Save mean data elements") + std::string("\t") + TL("Save mean data elements. (Ctrl+Shift+M)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS),
2311 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS, GUIDesignButtonPopup);
2312 mySaveMeanDataElements->create();
2313 // recalc menu bar because there is new elements
2314 gripSaveElements->recalc();
2315 // show menu bar modes
2316 gripSaveElements->show();
2317}
2318
2319
2320void
2322 if (value) {
2323 mySaveIndividualFiles->enable();
2324 } else {
2325 mySaveIndividualFiles->disable();
2326 }
2327}
2328
2329// ---------------------------------------------------------------------------
2330// GNEViewNetHelper::TimeFormat - methods
2331// ---------------------------------------------------------------------------
2332
2334 myViewNet(viewNet) {
2335}
2336
2337
2338void
2340 // create save sumo config button
2341 mySwitchButton = new MFXButtonTooltip(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().timeSwitch,
2342 myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu(),
2343 gHumanReadableTime ? "H" : "S" + std::string("\t") + TL("Switch between seconds and HH:MM:SS") + std::string("\t") + TL("Switch between seconds and HH:MM:SS"), nullptr,
2344 myViewNet->getViewParent()->getGNEAppWindows(), MID_GNE_TOGGLE_TIMEFORMAT, GUIDesignButtonToolbar);
2345 mySwitchButton->create();
2346}
2347
2348
2349void
2359
2360
2361void
2363 if (gHumanReadableTime) {
2364 mySwitchButton->setText("H");
2365 } else {
2366 mySwitchButton->setText("S");
2367 }
2368}
2369
2370// ---------------------------------------------------------------------------
2371// GNEViewNetHelper::EditModes - methods
2372// ---------------------------------------------------------------------------
2373
2375 currentSupermode(Supermode::NETWORK),
2376 networkEditMode(NetworkEditMode::NETWORK_INSPECT),
2377 demandEditMode(DemandEditMode::DEMAND_INSPECT),
2378 dataEditMode(DataEditMode::DATA_INSPECT),
2379 myViewNet(viewNet) {
2380 auto& neteditOptions = OptionsCont::getOptions();
2381 // if new option is enabled, start in create edge mode
2382 if (neteditOptions.getBool("new")) {
2384 neteditOptions.resetWritable();
2385 neteditOptions.set("new", "false");
2386 }
2387}
2388
2389
2391 delete myNeteditViewsPopup;
2392}
2393
2394
2395void
2397 // grip supermodes
2398 auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2399 // static toolTip menu
2400 auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2401 // create network button
2402 networkButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2403 TL("Network") + std::string("\t") + TL("Edit network elements") + std::string("\t") + TL("Set mode for editing network elements. (F2)"),
2405 networkButton->create();
2406 // create demand button
2407 demandButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2408 TL("Demand") + std::string("\t") + TL("Edit traffic demand elements") + std::string("\t") + TL("Set mode for editing traffic demand. (F3)"),
2410 demandButton->create();
2411 // create data button
2412 dataButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2413 TL("Data") + std::string("\t") + TL("Edit data elements") + std::string("\t") + TL("Set mode for editing data demand. (F4)"),
2415 dataButton->create();
2416 // build the views popup
2417 myNeteditViewsPopup = new FXPopup(gripSupermodes, POPUP_VERTICAL);
2418 myNeteditViewsPopup->create();
2419 // build views button
2420 myNeteditViewsButton = new MFXMenuButtonTooltip(gripSupermodes, toolTipMenu,
2421 (std::string("\t") + TL("Change netedit view") + std::string("\t") + TL("Change netedit view.")).c_str(),
2423 myNeteditViewsButton->create();
2424 // build default view button
2425 myDefaultViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2426 (std::string("Default\t") + TL("Set default view") + std::string("\t") + TL("Set default view.")).c_str(),
2428 myDefaultViewButton->create();
2429 // build jupedsim view button
2430 myJuPedSimViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2431 (std::string("JuPedSim\t") + TL("Set JuPedSim view") + std::string("\t") + TL("Set JuPedSim view.")).c_str(),
2433 myJuPedSimViewButton->create();
2434 myNeteditViewsPopup->recalc();
2435 // set width (grip + 3 large buttons + icon button)
2436 gripSupermodes->setWidth(353);
2437 // show menu bar modes
2438 gripSupermodes->show();
2439}
2440
2441
2442void
2444 if (!force && (supermode == currentSupermode)) {
2445 myViewNet->setStatusBarText(TL("Mode already selected"));
2446 if (myViewNet->myCurrentFrame != nullptr) {
2447 myViewNet->myCurrentFrame->focusUpperElement();
2448 }
2449 } else {
2450 myViewNet->setStatusBarText("");
2451 // abort current operation
2452 myViewNet->abortOperation(false);
2453 // set super mode
2454 currentSupermode = supermode;
2455 // set supermodes
2456 if (supermode == Supermode::NETWORK) {
2457 // change buttons
2458 networkButton->setChecked(true);
2459 demandButton->setChecked(false);
2460 dataButton->setChecked(false);
2461 // show network buttons
2462 myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
2463 // hide demand buttons
2464 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2465 // hide data buttons
2466 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2467 // force update network mode
2468 setNetworkEditMode(networkEditMode, true);
2469 } else if (supermode == Supermode::DEMAND) {
2470 // change buttons
2471 networkButton->setChecked(false);
2472 demandButton->setChecked(true);
2473 dataButton->setChecked(false);
2474 // hide network buttons
2475 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2476 // show demand buttons
2477 myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
2478 // hide data buttons
2479 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2480 // force update demand mode
2481 setDemandEditMode(demandEditMode, true);
2482 // demand modes require ALWAYS a recomputing
2483 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2484 // check if update path calculator
2485 if (!myViewNet->myNet->getDemandPathManager()->getPathCalculator()->isPathCalculatorUpdated()) {
2486 // update path calculator of demand path manager
2487 myViewNet->myNet->getDemandPathManager()->getPathCalculator()->updatePathCalculator();
2488 // compute all demand elements
2489 myViewNet->myNet->computeDemandElements(myViewNet->myViewParent->getGNEAppWindows());
2490 }
2491 } else if (supermode == Supermode::DATA) {
2492 // change buttons
2493 networkButton->setChecked(false);
2494 demandButton->setChecked(false);
2495 dataButton->setChecked(true);
2496 // hide network buttons
2497 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2498 // hide demand buttons
2499 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2500 // show data buttons
2501 myViewNet->myDataCheckableButtons.showDataCheckableButtons();
2502 // force update data mode
2503 setDataEditMode(dataEditMode, true);
2504 // check if recompute
2505 if (myViewNet->getViewParent()->getGNEAppWindows()->getProcessingMenuCommands().menuCheckRecomputeDataMode->getCheck() == TRUE) {
2506 // demand modes require ALWAYS a recomputing
2507 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2508 }
2509 // reset TAZ contours (due filling)
2510 for (const auto& TAZ : myViewNet->getNet()->getAttributeCarriers()->getAdditionals().at(SUMO_TAG_TAZ)) {
2511 TAZ.second->resetAdditionalContour();
2512 }
2513 }
2514 // update buttons
2515 networkButton->update();
2516 demandButton->update();
2517 dataButton->update();
2518 // update Supermode CommandButtons in GNEAppWindows
2519 myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(currentSupermode);
2520 }
2521}
2522
2523
2524void
2526 if ((mode == networkEditMode) && !force) {
2527 myViewNet->setStatusBarText(TL("Network mode already selected"));
2528 if (myViewNet->myCurrentFrame != nullptr) {
2529 myViewNet->myCurrentFrame->focusUpperElement();
2530 }
2531 } else if (networkEditMode == NetworkEditMode::NETWORK_TLS && !myViewNet->myViewParent->getTLSEditorFrame()->isTLSSaved()) {
2532 myViewNet->setStatusBarText(TL("Save modifications in TLS before change mode"));
2533 myViewNet->myCurrentFrame->focusUpperElement();
2534 } else {
2535 myViewNet->setStatusBarText("");
2536 myViewNet->abortOperation(false);
2537 // stop editing of custom shapes
2538 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2539 // set new Network mode
2540 networkEditMode = mode;
2541 // for common modes (Inspect/Delete/Select/move) change also the other supermode
2542 if (networkEditMode == NetworkEditMode::NETWORK_INSPECT) {
2543 demandEditMode = DemandEditMode::DEMAND_INSPECT;
2544 dataEditMode = DataEditMode::DATA_INSPECT;
2545 } else if (networkEditMode == NetworkEditMode::NETWORK_DELETE) {
2546 demandEditMode = DemandEditMode::DEMAND_DELETE;
2547 dataEditMode = DataEditMode::DATA_DELETE;
2548 } else if (networkEditMode == NetworkEditMode::NETWORK_SELECT) {
2549 demandEditMode = DemandEditMode::DEMAND_SELECT;
2550 dataEditMode = DataEditMode::DATA_SELECT;
2551 } else if (networkEditMode == NetworkEditMode::NETWORK_MOVE) {
2552 demandEditMode = DemandEditMode::DEMAND_MOVE;
2553 }
2554 // certain modes require a recomputing
2555 switch (mode) {
2560 // modes which depend on computed data
2561 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2562 break;
2563 default:
2564 break;
2565 }
2566 // update cursors
2567 myViewNet->updateCursor();
2568 // update network mode specific controls
2569 myViewNet->updateNetworkModeSpecificControls();
2570 }
2571}
2572
2573
2574void
2576 if ((mode == demandEditMode) && !force) {
2577 myViewNet->setStatusBarText(TL("Demand mode already selected"));
2578 if (myViewNet->myCurrentFrame != nullptr) {
2579 myViewNet->myCurrentFrame->focusUpperElement();
2580 }
2581 } else {
2582 myViewNet->setStatusBarText("");
2583 myViewNet->abortOperation(false);
2584 // stop editing of custom shapes
2585 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2586 // set new Demand mode
2587 demandEditMode = mode;
2588 // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2589 if (demandEditMode == DemandEditMode::DEMAND_INSPECT) {
2590 networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2591 dataEditMode = DataEditMode::DATA_INSPECT;
2592 } else if (demandEditMode == DemandEditMode::DEMAND_DELETE) {
2593 networkEditMode = NetworkEditMode::NETWORK_DELETE;
2594 dataEditMode = DataEditMode::DATA_DELETE;
2595 } else if (demandEditMode == DemandEditMode::DEMAND_SELECT) {
2596 networkEditMode = NetworkEditMode::NETWORK_SELECT;
2597 dataEditMode = DataEditMode::DATA_SELECT;
2598 } else if (demandEditMode == DemandEditMode::DEMAND_MOVE) {
2599 networkEditMode = NetworkEditMode::NETWORK_MOVE;
2600 }
2601 // update cursors
2602 myViewNet->updateCursor();
2603 // update network mode specific controls
2604 myViewNet->updateDemandModeSpecificControls();
2605 }
2606}
2607
2608
2609void
2611 if ((mode == dataEditMode) && !force) {
2612 myViewNet->setStatusBarText(TL("Data mode already selected"));
2613 if (myViewNet->myCurrentFrame != nullptr) {
2614 myViewNet->myCurrentFrame->focusUpperElement();
2615 }
2616 } else {
2617 myViewNet->setStatusBarText("");
2618 myViewNet->abortOperation(false);
2619 // stop editing of custom shapes
2620 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2621 // set new Data mode
2622 dataEditMode = mode;
2623 // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2624 if (dataEditMode == DataEditMode::DATA_INSPECT) {
2625 networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2626 demandEditMode = DemandEditMode::DEMAND_INSPECT;
2627 } else if (dataEditMode == DataEditMode::DATA_DELETE) {
2628 networkEditMode = NetworkEditMode::NETWORK_DELETE;
2629 demandEditMode = DemandEditMode::DEMAND_DELETE;
2630 } else if (dataEditMode == DataEditMode::DATA_SELECT) {
2631 networkEditMode = NetworkEditMode::NETWORK_SELECT;
2632 demandEditMode = DemandEditMode::DEMAND_SELECT;
2633 }
2634 // update all datasets
2635 for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
2636 dataSet.second->updateAttributeColors();
2637 }
2638 // update cursors
2639 myViewNet->updateCursor();
2640 // update network mode specific controls
2641 myViewNet->updateDataModeSpecificControls();
2642 }
2643}
2644
2645
2646bool
2648 return (currentSupermode == Supermode::NETWORK);
2649}
2650
2651
2652bool
2654 return (currentSupermode == Supermode::DEMAND);
2655}
2656
2657
2658bool
2660 return (currentSupermode == Supermode::DATA);
2661}
2662
2663
2664void
2666 // grip supermodes
2667 auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2668 // file menu commands
2669 auto& fileMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getFileMenuCommands();
2670 // continue depending of selector
2671 if (sel == MID_GNE_VIEW_DEFAULT) {
2672 myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT));
2673 gripSupermodes->setWidth(353);
2674 // show menu commands
2675 fileMenuCommands.setDefaultView();
2676 } else if (sel == MID_GNE_VIEW_JUPEDSIM) {
2677 myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM));
2678 gripSupermodes->setWidth(250);
2679 // hide menu commands
2680 fileMenuCommands.setJuPedSimView();
2681 }
2682 // update viewNet
2683 myViewNet->viewUpdated();
2684}
2685
2686
2687bool
2689 return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT);
2690}
2691
2692
2693bool
2695 return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM);
2696}
2697
2698// ---------------------------------------------------------------------------
2699// GNEViewNetHelper::NetworkViewOptions - methods
2700// ---------------------------------------------------------------------------
2701
2705
2706
2707void
2709 // get grip modes
2710 auto gripModes = myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes;
2711 // static toolTip menu
2712 auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2713 // create menu checks
2714 menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, toolTipMenu,
2715 (std::string("\t") + TL("Show grid") + std::string("\t") + TL("Show grid and restrict movement to the grid - define grid size in visualization options. (Ctrl+G)")),
2718 menuCheckToggleGrid->setChecked(false);
2719 menuCheckToggleGrid->create();
2720
2721 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, toolTipMenu,
2722 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
2725 menuCheckToggleDrawJunctionShape->setChecked(false);
2726 menuCheckToggleDrawJunctionShape->create();
2727
2728 menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, toolTipMenu,
2729 (std::string("\t") + TL("Draw vehicles spread in lane or depart position") + std::string("\t") + TL("Draw vehicles spread in lane or in depart position.")),
2732 menuCheckDrawSpreadVehicles->setChecked(false);
2733 menuCheckDrawSpreadVehicles->create();
2734
2735 menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2736 (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
2739 menuCheckShowDemandElements->setChecked(false);
2740 menuCheckShowDemandElements->create();
2741
2742 menuCheckSelectEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2743 (std::string("\t") + TL("Clicks target lanes") + std::string("\t") + TL("Toggle whether clicking should inspect/select/delete lanes instead of edges.")),
2746 menuCheckSelectEdges->create();
2747
2748 menuCheckShowConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2749 (std::string("\t") + TL("Show connections over junctions") + std::string("\t") + TL("Toggle show connections over junctions.")),
2752 menuCheckShowConnections->setChecked(myViewNet->getVisualisationSettings().showLane2Lane);
2753 menuCheckShowConnections->create();
2754
2755 menuCheckHideConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2756 (std::string("\t") + TL("Hide connections") + std::string("\t") + TL("Toggle hide connections.")),
2759 menuCheckHideConnections->setChecked(false);
2760 menuCheckHideConnections->create();
2761
2762 menuCheckShowAdditionalSubElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2763 (std::string("\t") + TL("Show additional sub-elements") + std::string("\t") + TL("Toggle show additional sub-elements.")),
2766 menuCheckShowAdditionalSubElements->setChecked(false);
2767 menuCheckShowAdditionalSubElements->create();
2768
2769 menuCheckShowTAZElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2770 (std::string("\t") + TL("Show TAZ elements") + std::string("\t") + TL("Toggle show TAZ elements.")),
2773 menuCheckShowTAZElements->setChecked(false);
2774 menuCheckShowTAZElements->create();
2775
2776 menuCheckExtendSelection = new MFXCheckableButton(false, gripModes, toolTipMenu,
2777 (std::string("\t") + TL("Automatic select junctions") + std::string("\t") + TL("Toggle whether selecting multiple edges should automatically select their junctions.")),
2780 menuCheckExtendSelection->setChecked(true);
2781 menuCheckExtendSelection->create();
2782
2783 menuCheckChangeAllPhases = new MFXCheckableButton(false, gripModes, toolTipMenu,
2784 (std::string("\t") + TL("Apply state to all phases") + std::string("\t") + TL("Toggle whether clicking should apply state changes to all phases of the current TLS plan.")),
2787 menuCheckChangeAllPhases->setChecked(false);
2788 menuCheckChangeAllPhases->create();
2789
2790 menuCheckMergeAutomatically = new MFXCheckableButton(false, gripModes, toolTipMenu,
2791 (std::string("\t") + TL("Automatic merging junction") + std::string("\t") + TL("Toggle ask for confirmation before merging junction.")),
2794 menuCheckMergeAutomatically->create();
2795
2796 menuCheckChainEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2797 (std::string("\t") + TL("Edge chain mode") + std::string("\t") + TL("Create consecutive edges with a single click (hit ESC to cancel chain).")),
2800 menuCheckChainEdges->setChecked(false);
2801 menuCheckChainEdges->create();
2802
2803 menuCheckAutoOppositeEdge = new MFXCheckableButton(false, gripModes, toolTipMenu,
2804 (std::string("\t") + TL("Edge opposite direction") + std::string("\t") + TL("Automatically create an edge in the opposite direction.")),
2807 menuCheckAutoOppositeEdge->setChecked(false);
2808 menuCheckAutoOppositeEdge->create();
2809
2810 menuCheckMoveElevation = new MFXCheckableButton(false, gripModes, toolTipMenu,
2811 (std::string("\t") + TL("Move elevation") + std::string("\t") + TL("Apply mouse movement to elevation instead of x,y position.")),
2814 menuCheckMoveElevation->setChecked(false);
2815 menuCheckMoveElevation->create();
2816
2817 menuCheckShowJunctionBubble = new MFXCheckableButton(false, gripModes, toolTipMenu,
2818 (std::string("\t") + TL("Show bubbles") + std::string("\t") + TL("Toggle show bubbles over junctions shapes.")),
2821 menuCheckShowJunctionBubble->setChecked(false);
2822 menuCheckShowJunctionBubble->create();
2823
2824 menuCheckShowPolygonSymbols = new MFXCheckableButton(false, gripModes, toolTipMenu,
2825 (std::string("\t") + TL("Show polygon symbols") + std::string("\t") + TL("Show polygon symbols.")),
2828 menuCheckShowPolygonSymbols->setChecked(true);
2829 menuCheckShowPolygonSymbols->create();
2830
2831 // always recalc after creating new elements
2832 gripModes->recalc();
2833}
2834
2835
2836void
2838 menuCheckToggleGrid->hide();
2839 menuCheckToggleDrawJunctionShape->hide();
2840 menuCheckDrawSpreadVehicles->hide();
2841 menuCheckShowDemandElements->hide();
2842 menuCheckSelectEdges->hide();
2843 menuCheckShowConnections->hide();
2844 menuCheckHideConnections->hide();
2845 menuCheckShowAdditionalSubElements->hide();
2846 menuCheckShowTAZElements->hide();
2847 menuCheckExtendSelection->hide();
2848 menuCheckChangeAllPhases->hide();
2849 menuCheckMergeAutomatically->hide();
2850 menuCheckShowJunctionBubble->hide();
2851 menuCheckMoveElevation->hide();
2852 menuCheckChainEdges->hide();
2853 menuCheckAutoOppositeEdge->hide();
2854 menuCheckShowPolygonSymbols->hide();
2855}
2856
2857
2858void
2859GNEViewNetHelper::NetworkViewOptions::getVisibleNetworkMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
2860 // save visible menu commands in commands vector
2861 if (menuCheckToggleGrid->shown()) {
2862 commands.push_back(menuCheckToggleGrid);
2863 }
2864 if (menuCheckToggleDrawJunctionShape->shown()) {
2865 commands.push_back(menuCheckToggleDrawJunctionShape);
2866 }
2867 if (menuCheckDrawSpreadVehicles->shown()) {
2868 commands.push_back(menuCheckDrawSpreadVehicles);
2869 }
2870 if (menuCheckShowDemandElements->shown()) {
2871 commands.push_back(menuCheckShowDemandElements);
2872 }
2873 if (menuCheckSelectEdges->shown()) {
2874 commands.push_back(menuCheckSelectEdges);
2875 }
2876 if (menuCheckShowConnections->shown()) {
2877 commands.push_back(menuCheckShowConnections);
2878 }
2879 if (menuCheckHideConnections->shown()) {
2880 commands.push_back(menuCheckHideConnections);
2881 }
2882 if (menuCheckShowAdditionalSubElements->shown()) {
2883 commands.push_back(menuCheckShowAdditionalSubElements);
2884 }
2885 if (menuCheckShowTAZElements->shown()) {
2886 commands.push_back(menuCheckShowTAZElements);
2887 }
2888 if (menuCheckExtendSelection->shown()) {
2889 commands.push_back(menuCheckExtendSelection);
2890 }
2891 if (menuCheckChangeAllPhases->shown()) {
2892 commands.push_back(menuCheckChangeAllPhases);
2893 }
2894 if (menuCheckMergeAutomatically->shown()) {
2895 commands.push_back(menuCheckMergeAutomatically);
2896 }
2897 if (menuCheckChainEdges->shown()) {
2898 commands.push_back(menuCheckChainEdges);
2899 }
2900 if (menuCheckAutoOppositeEdge->shown()) {
2901 commands.push_back(menuCheckAutoOppositeEdge);
2902 }
2903 if (menuCheckMoveElevation->shown()) {
2904 commands.push_back(menuCheckMoveElevation);
2905 }
2906 if (menuCheckShowJunctionBubble->shown()) {
2907 commands.push_back(menuCheckShowJunctionBubble);
2908 }
2909 if (menuCheckShowPolygonSymbols->shown()) {
2910 commands.push_back(menuCheckShowPolygonSymbols);
2911 }
2912}
2913
2914
2915bool
2917 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2918}
2919
2920
2921bool
2923 if (menuCheckShowDemandElements->shown()) {
2924 return (menuCheckShowDemandElements->amChecked() == TRUE);
2925 } else {
2926 // by default, if menuCheckShowDemandElements isn't shown, always show demand elements
2927 return true;
2928 }
2929}
2930
2931
2932bool
2934 if (menuCheckSelectEdges->shown()) {
2935 return (menuCheckSelectEdges->amChecked() != TRUE);
2936 } else {
2937 // by default, if menuCheckSelectEdges isn't shown, always select edges
2938 return true;
2939 }
2940}
2941
2942
2943bool
2945 if (myViewNet->myEditModes.isCurrentSupermodeData()) {
2946 return false;
2947 } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_CONNECT) {
2948 // check if menu check hide connections ins shown
2949 return (menuCheckHideConnections->amChecked() == FALSE);
2950 } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_PROHIBITION) {
2951 return true;
2952 } else if (myViewNet->myEditModes.isCurrentSupermodeNetwork() && menuCheckShowConnections->shown() == false) {
2953 return false;
2954 } else {
2955 return (myViewNet->getVisualisationSettings().showLane2Lane);
2956 }
2957}
2958
2959
2960bool
2962 if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2963 return false;
2964 } else if (menuCheckShowAdditionalSubElements->shown() == false) {
2965 return false;
2966 } else {
2967 return menuCheckShowAdditionalSubElements->amChecked();
2968 }
2969}
2970
2971
2972bool
2974 if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2975 return false;
2976 } else if (menuCheckShowTAZElements->shown() == false) {
2977 return false;
2978 } else {
2979 return menuCheckShowTAZElements->amChecked();
2980 }
2981}
2982
2983
2984bool
2986 if (menuCheckMoveElevation->shown()) {
2987 return (menuCheckMoveElevation->amChecked() == TRUE);
2988 } else {
2989 return false;
2990 }
2991}
2992
2993
2994bool
2996 if (menuCheckShowPolygonSymbols->shown()) {
2997 return (menuCheckShowPolygonSymbols->amChecked() == TRUE);
2998 } else {
2999 return false;
3000 }
3001}
3002
3003// ---------------------------------------------------------------------------
3004// GNEViewNetHelper::DemandViewOptions - methods
3005// ---------------------------------------------------------------------------
3006
3008 myViewNet(viewNet) {
3009}
3010
3011
3012void
3014 // get grip modes
3015 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3016 // get tooltip menu
3017 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3018 // create menu checks
3019 menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, tooltipMenu,
3020 (std::string("\t") + TL("Show grid") + std::string("\t") + TL("Show grid and restrict movement to the grid - define grid size in visualization options. (Ctrl+G)")),
3023 menuCheckToggleGrid->setChecked(false);
3024 menuCheckToggleGrid->create();
3025
3026 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
3027 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
3030 menuCheckToggleDrawJunctionShape->setChecked(false);
3031 menuCheckToggleDrawJunctionShape->create();
3032
3033 menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, tooltipMenu,
3034 (std::string("\t") + TL("Draw vehicles spread/depart position") + std::string("\t") + TL("Draw vehicles spread in lane or in depart position.")),
3037 menuCheckDrawSpreadVehicles->setChecked(false);
3038 menuCheckDrawSpreadVehicles->create();
3039
3040 menuCheckHideShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3041 (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
3044 menuCheckHideShapes->setChecked(false);
3045 menuCheckHideShapes->create();
3046
3047 menuCheckShowAllTrips = new MFXCheckableButton(false, gripModes, tooltipMenu,
3048 (std::string("\t") + TL("Show all trips") + std::string("\t") + TL("Toggle show all trips (requires updated demand - F5).")),
3051 menuCheckShowAllTrips->setChecked(false);
3052 menuCheckShowAllTrips->create();
3053
3054 menuCheckShowAllPersonPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
3055 (std::string("\t") + TL("Show all person plans") + std::string("\t") + TL("Toggle show all person plans.")),
3058 menuCheckShowAllPersonPlans->setChecked(false);
3059 menuCheckShowAllPersonPlans->create();
3060
3061 menuCheckLockPerson = new MFXCheckableButton(false, gripModes, tooltipMenu,
3062 (std::string("\t") + TL("Lock selected person") + std::string("\t") + TL("Toggle lock selected person.")),
3065 menuCheckLockPerson->setChecked(false);
3066 menuCheckLockPerson->create();
3067
3068 menuCheckShowAllContainerPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
3069 (std::string("\t") + TL("Show all containers plans") + std::string("\t") + TL("Toggle show all container plans.")),
3072 menuCheckShowAllContainerPlans->setChecked(false);
3073 menuCheckShowAllContainerPlans->create();
3074
3075 menuCheckLockContainer = new MFXCheckableButton(false, gripModes, tooltipMenu,
3076 (std::string("\t") + TL("Lock selected container") + std::string("\t") + TL("Toggle lock selected container.")),
3079 menuCheckLockContainer->setChecked(false);
3080 menuCheckLockContainer->create();
3081
3082 menuCheckHideNonInspectedDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
3083 (std::string("\t") + TL("Show non-inspected demand elements") + std::string("\t") + TL("Toggle show non-inspected demand elements.")),
3086 menuCheckHideNonInspectedDemandElements->setChecked(false);
3087 menuCheckHideNonInspectedDemandElements->create();
3088
3089 menuCheckShowOverlappedRoutes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3090 (std::string("\t") + TL("Show number of overlapped routes") + std::string("\t") + TL("Toggle show number of overlapped routes.")),
3093 menuCheckShowOverlappedRoutes->setChecked(false);
3094 menuCheckShowOverlappedRoutes->create();
3095
3096 // always recalc after creating new elements
3097 gripModes->recalc();
3098}
3099
3100
3101void
3103 menuCheckToggleGrid->hide();
3104 menuCheckToggleDrawJunctionShape->hide();
3105 menuCheckDrawSpreadVehicles->hide();
3106 menuCheckHideShapes->hide();
3107 menuCheckShowAllTrips->hide();
3108 menuCheckShowAllPersonPlans->hide();
3109 menuCheckLockPerson->hide();
3110 menuCheckShowAllContainerPlans->hide();
3111 menuCheckLockContainer->hide();
3112 menuCheckHideNonInspectedDemandElements->hide();
3113 menuCheckShowOverlappedRoutes->hide();
3114}
3115
3116
3117void
3118GNEViewNetHelper::DemandViewOptions::getVisibleDemandMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
3119 // save visible menu commands in commands vector
3120 if (menuCheckToggleGrid->shown()) {
3121 commands.push_back(menuCheckToggleGrid);
3122 }
3123 if (menuCheckToggleDrawJunctionShape->shown()) {
3124 commands.push_back(menuCheckToggleDrawJunctionShape);
3125 }
3126 if (menuCheckDrawSpreadVehicles->shown()) {
3127 commands.push_back(menuCheckDrawSpreadVehicles);
3128 }
3129 if (menuCheckHideShapes->shown()) {
3130 commands.push_back(menuCheckHideShapes);
3131 }
3132 if (menuCheckShowAllTrips->shown()) {
3133 commands.push_back(menuCheckShowAllTrips);
3134 }
3135 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
3136 commands.push_back(menuCheckShowAllPersonPlans);
3137 }
3138 if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
3139 commands.push_back(menuCheckLockPerson);
3140 }
3141 if (menuCheckShowAllContainerPlans->shown() && menuCheckShowAllContainerPlans->isEnabled()) {
3142 commands.push_back(menuCheckShowAllContainerPlans);
3143 }
3144 if (menuCheckLockContainer->shown() && menuCheckLockContainer->isEnabled()) {
3145 commands.push_back(menuCheckLockContainer);
3146 }
3147 if (menuCheckHideNonInspectedDemandElements->shown()) {
3148 commands.push_back(menuCheckHideNonInspectedDemandElements);
3149 }
3150 if (menuCheckShowOverlappedRoutes->shown()) {
3151 commands.push_back(menuCheckShowOverlappedRoutes);
3152 }
3153}
3154
3155
3156bool
3158 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
3159}
3160
3161
3162bool
3164 if (menuCheckHideNonInspectedDemandElements->shown()) {
3165 const auto& inspectedElements = myViewNet->getInspectedElements();
3166 // check conditions
3167 if ((menuCheckHideNonInspectedDemandElements->amChecked() == FALSE) || (inspectedElements.getFirstAC() == nullptr)) {
3168 // if checkbox is disabled or there isn't an inspected element, then return true
3169 return true;
3170 } else if (inspectedElements.getFirstAC() && inspectedElements.getFirstAC()->getTagProperty()->isDemandElement()) {
3171 if (inspectedElements.isACInspected(demandElement)) {
3172 // if inspected element correspond to demandElement, return true
3173 return true;
3174 } else {
3175 // if demandElement is a route, check if dottedAC is one of their children (Vehicle or Stop)
3176 for (const auto& demandElementChild : demandElement->getChildDemandElements()) {
3177 if (inspectedElements.isACInspected(demandElementChild)) {
3178 return true;
3179 }
3180 }
3181 // if demandElement is a vehicle, check if dottedAC is one of his route Parent
3182 for (const auto& demandElementParent : demandElement->getParentDemandElements()) {
3183 if (inspectedElements.isACInspected(demandElementParent)) {
3184 return true;
3185 }
3186 }
3187 // dottedAC isn't one of their parent, then return false
3188 return false;
3189 }
3190 } else {
3191 // we're inspecting a demand element, then return true
3192 return true;
3193 }
3194 } else {
3195 // we're inspecting a demand element, then return true
3196 return true;
3197 }
3198}
3199
3200
3201bool
3203 if (menuCheckHideShapes->shown()) {
3204 return (menuCheckHideShapes->amChecked() == FALSE);
3205 } else {
3206 return true;
3207 }
3208}
3209
3210
3211bool
3213 return (menuCheckShowAllTrips->amChecked() == TRUE);
3214}
3215
3216
3217bool
3219 if (menuCheckShowAllPersonPlans->isEnabled()) {
3220 return (menuCheckShowAllPersonPlans->amChecked() == TRUE);
3221 } else {
3222 return false;
3223 }
3224}
3225
3226
3227void
3229 myLockedPerson = person;
3230}
3231
3232
3233void
3235 myLockedPerson = nullptr;
3236}
3237
3238
3239const GNEDemandElement*
3241 return myLockedPerson;
3242}
3243
3244
3245bool
3247 if (menuCheckShowAllContainerPlans->isEnabled()) {
3248 return (menuCheckShowAllContainerPlans->amChecked() == TRUE);
3249 } else {
3250 return false;
3251 }
3252}
3253
3254
3255void
3257 myLockedContainer = container;
3258}
3259
3260
3261void
3263 myLockedContainer = nullptr;
3264}
3265
3266
3267bool
3269 if (menuCheckShowOverlappedRoutes->isEnabled()) {
3270 return (menuCheckShowOverlappedRoutes->amChecked() == TRUE);
3271 } else {
3272 return false;
3273 }
3274}
3275
3276
3277const GNEDemandElement*
3279 return myLockedContainer;
3280}
3281
3282// ---------------------------------------------------------------------------
3283// GNEViewNetHelper::DataViewOptions - methods
3284// ---------------------------------------------------------------------------
3285
3287 myViewNet(viewNet) {
3288}
3289
3290
3291void
3293 // get grip modes
3294 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3295 // get tooltip menu
3296 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3297 // create menu checks
3298 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
3299 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
3302 menuCheckToggleDrawJunctionShape->setChecked(false);
3303 menuCheckToggleDrawJunctionShape->create();
3304
3305 menuCheckShowAdditionals = new MFXCheckableButton(false, gripModes, tooltipMenu,
3306 (std::string("\t") + TL("Show additionals") + std::string("\t") + TL("Toggle show additionals.")),
3309 menuCheckShowAdditionals->create();
3310
3311 menuCheckShowShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3312 (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
3315 menuCheckShowShapes->create();
3316
3317 menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
3318 (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
3321 menuCheckShowDemandElements->create();
3322
3323 menuCheckToggleTAZRelDrawing = new MFXCheckableButton(false, gripModes, tooltipMenu,
3324 (std::string("\t") + TL("Draw TAZREL drawing mode") + std::string("\t") + TL("Toggle draw TAZREL drawing mode.")),
3327 menuCheckToggleTAZRelDrawing->create();
3328
3329 menuCheckToggleTAZDrawFill = new MFXCheckableButton(false, gripModes, tooltipMenu,
3330 (std::string("\t") + TL("Toggle draw TAZ fill") + std::string("\t") + TL("Toggle draw TAZ fill")),
3333 menuCheckToggleTAZDrawFill->create();
3334
3335 menuCheckToggleTAZRelOnlyFrom = new MFXCheckableButton(false, gripModes, tooltipMenu,
3336 (std::string("\t") + TL("Toggle draw TAZRel only from") + std::string("\t") + TL("Toggle draw TAZRel only from")),
3339 menuCheckToggleTAZRelOnlyFrom->create();
3340
3341 menuCheckToggleTAZRelOnlyTo = new MFXCheckableButton(false, gripModes, tooltipMenu,
3342 (std::string("\t") + TL("Toggle draw TAZRel only to") + std::string("\t") + TL("Toggle draw TAZRel only to")),
3345 menuCheckToggleTAZRelOnlyTo->create();
3346
3347 // always recalc after creating new elements
3348 gripModes->recalc();
3349}
3350
3351
3352void
3354 menuCheckToggleDrawJunctionShape->hide();
3355 menuCheckShowAdditionals->hide();
3356 menuCheckShowShapes->hide();
3357 menuCheckShowDemandElements->hide();
3358 menuCheckToggleTAZRelDrawing->hide();
3359 menuCheckToggleTAZDrawFill->hide();
3360 menuCheckToggleTAZRelOnlyFrom->hide();
3361 menuCheckToggleTAZRelOnlyTo->hide();
3362}
3363
3364
3365void
3366GNEViewNetHelper::DataViewOptions::getVisibleDataMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
3367 // save visible menu commands in commands vector
3368 if (menuCheckToggleDrawJunctionShape->shown()) {
3369 commands.push_back(menuCheckToggleDrawJunctionShape);
3370 }
3371 if (menuCheckShowAdditionals->shown()) {
3372 commands.push_back(menuCheckShowAdditionals);
3373 }
3374 if (menuCheckShowShapes->shown()) {
3375 commands.push_back(menuCheckShowShapes);
3376 }
3377 if (menuCheckShowDemandElements->shown()) {
3378 commands.push_back(menuCheckShowDemandElements);
3379 }
3380 if (menuCheckToggleTAZRelDrawing->shown()) {
3381 commands.push_back(menuCheckToggleTAZRelDrawing);
3382 }
3383 if (menuCheckToggleTAZDrawFill->shown()) {
3384 commands.push_back(menuCheckToggleTAZDrawFill);
3385 }
3386 if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3387 commands.push_back(menuCheckToggleTAZRelOnlyFrom);
3388 }
3389 if (menuCheckToggleTAZRelOnlyTo->shown()) {
3390 commands.push_back(menuCheckToggleTAZRelOnlyTo);
3391 }
3392}
3393
3394
3395bool
3397 if (menuCheckShowAdditionals->shown()) {
3398 return (menuCheckShowAdditionals->amChecked() == TRUE);
3399 } else {
3400 return true;
3401 }
3402}
3403
3404
3405bool
3407 if (menuCheckShowShapes->shown()) {
3408 return (menuCheckShowShapes->amChecked() == TRUE);
3409 } else {
3410 return true;
3411 }
3412}
3413
3414
3415bool
3417 if (menuCheckShowDemandElements->shown()) {
3418 return (menuCheckShowDemandElements->amChecked() == TRUE);
3419 } else {
3420 return true;
3421 }
3422}
3423
3424
3425bool
3427 return (menuCheckToggleTAZRelDrawing->amChecked() != TRUE);
3428}
3429
3430
3431bool
3433 if (menuCheckToggleTAZDrawFill->shown()) {
3434 return (menuCheckToggleTAZDrawFill->amChecked() != TRUE);
3435 } else {
3436 return false;
3437 }
3438}
3439
3440
3441bool
3443 if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3444 return (menuCheckToggleTAZRelOnlyFrom->amChecked() != TRUE);
3445 } else {
3446 return false;
3447 }
3448}
3449
3450
3451bool
3453 if (menuCheckToggleTAZRelOnlyTo->shown()) {
3454 return (menuCheckToggleTAZRelOnlyTo->amChecked() != TRUE);
3455 } else {
3456 return false;
3457 }
3458}
3459
3460// ---------------------------------------------------------------------------
3461// GNEViewNetHelper::IntervalBar - methods
3462// ---------------------------------------------------------------------------
3463
3465 myViewNet(viewNet) {
3466}
3467
3468
3469void
3471 const auto staticTooltip = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3472 // create interval label
3473 FXLabel* genericDataLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3474 TL("Data type"), 0, GUIDesignLabelThickedFixed(100));
3475 genericDataLabel->create();
3476 // create combo box for generic datas
3477 myGenericDataTypesComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3478 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed, myViewNet,
3480 myGenericDataTypesComboBox->create();
3481 // fill combo box
3482 myGenericDataTypesComboBox->appendIconItem("<all>");
3483 myGenericDataTypesComboBox->appendIconItem(toString(GNE_TAG_EDGEREL_SINGLE).c_str());
3484 myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_EDGEREL).c_str());
3485 myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_TAZREL).c_str());
3486 // create dataSet label
3487 FXLabel* dataSetLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3488 TL("Data sets"), 0, GUIDesignLabelThickedFixed(100));
3489 dataSetLabel->create();
3490 // create combo box for sets
3491 myDataSetsComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3492 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed,
3494 myDataSetsComboBox->create();
3495 // create checkbutton for myLimitByInterval
3496 myIntervalCheckBox = new FXCheckButton(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3498 myIntervalCheckBox->create();
3499 // create textfield for begin
3500 myBeginTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3502 myBeginTextField->create();
3503 // create text field for end
3504 myEndTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3506 myEndTextField->create();
3507 // create parameter label
3508 FXLabel* parameterLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3509 TL("Parameter"), 0, GUIDesignLabelThickedFixed(100));
3510 parameterLabel->create();
3511 // create combo box for attributes
3512 myParametersComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3513 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed,
3515 myParametersComboBox->create();
3516 // always recalc after creating new elements
3517 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->recalc();
3518}
3519
3520
3521void
3523 // first update interval bar
3524 updateIntervalBar();
3525 // show toolbar grip
3526 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->show();
3527}
3528
3529
3530void
3532 // hide toolbar grip
3533 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->hide();
3534}
3535
3536
3537void
3539 // check if intervalBar has to be updated
3540 if (myUpdateInterval && myViewNet->getNet()) {
3541 // clear data sets
3542 myDataSets.clear();
3543 // declare intervals
3544 double begin = INVALID_DOUBLE;
3545 double end = INVALID_DOUBLE;
3546 // clear parameters
3547 myParameters.clear();
3548 // iterate over all data elements
3549 for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
3550 // add data set ID
3551 myDataSets.push_back(dataSet.second->getID());
3552 // iterate over all intervals
3553 for (const auto& interval : dataSet.second->getDataIntervalChildren()) {
3554 // set intervals
3555 if ((begin == INVALID_DOUBLE) || (interval.first < begin)) {
3556 begin = interval.first;
3557 }
3558 if ((end == INVALID_DOUBLE) || (interval.first > end)) {
3559 end = interval.first;
3560 }
3561 // iterate over all generic datas
3562 for (const auto& genericData : interval.second->getGenericDataChildren()) {
3563 // iterate over parameters
3564 for (const auto& parameter : genericData->getParametersMap()) {
3565 myParameters.insert(parameter.first);
3566 }
3567 }
3568 }
3569 }
3570 // get previous dataSet
3571 const std::string previousDataSet = myDataSetsComboBox->getText().text();
3572 // get previous interval
3573 const std::string previousBegin = (myIntervalCheckBox->getCheck() == TRUE) ? myBeginTextField->getText().text() : "";
3574 const std::string previousEnd = (myIntervalCheckBox->getCheck() == TRUE) ? myEndTextField->getText().text() : "";
3575 // get previous parameter
3576 const std::string previousParameter = myParametersComboBox->getText().text();
3577 // clear comboBoxes
3578 myDataSetsComboBox->clearItems();
3579 myParametersComboBox->clearItems();
3580 // add first item (all)
3581 myDataSetsComboBox->appendIconItem("<all>");
3582 myParametersComboBox->appendIconItem("<all>");
3583 // fill dataSet comboBox
3584 for (const auto& dataSet : myDataSets) {
3585 myDataSetsComboBox->appendIconItem(dataSet.c_str());
3586 }
3587 // set begin/end
3588 myBeginTextField->setText(toString(begin).c_str());
3589 myEndTextField->setText(toString(end).c_str());
3590 // fill parameter comboBox
3591 for (const auto& parameter : myParameters) {
3592 myParametersComboBox->appendIconItem(parameter.c_str());
3593 }
3594 // check previous dataSet
3595 myDataSetsComboBox->setCurrentItem(0, FALSE);
3596 for (int i = 0; i < myDataSetsComboBox->getNumItems(); i++) {
3597 if (myDataSetsComboBox->getItemText(i) == previousDataSet) {
3598 myDataSetsComboBox->setCurrentItem(i);
3599 }
3600 }
3601 // set previous interval
3602 if (myIntervalCheckBox->getCheck() == TRUE) {
3603 myBeginTextField->setText(previousBegin.c_str());
3604 myEndTextField->setText(previousEnd.c_str());
3605 }
3606 // check previous parameter
3607 myParametersComboBox->setCurrentItem(0, FALSE);
3608 for (int i = 0; i < myParametersComboBox->getNumItems(); i++) {
3609 if (myParametersComboBox->getItemText(i) == previousParameter) {
3610 myParametersComboBox->setCurrentItem(i);
3611 }
3612 }
3613 // check if enable or disable
3614 if ((myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_INSPECT) ||
3615 (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_SELECT) ||
3616 (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_DELETE)) {
3617 enableIntervalBar();
3618 } else {
3619 disableIntervalBar();
3620 }
3621 // intervalBar updated, then change flag
3622 myUpdateInterval = false;
3623 }
3624}
3625
3626
3627void
3629 myUpdateInterval = true;
3630}
3631
3632
3635 if (myGenericDataTypesComboBox->isEnabled() && (myGenericDataTypesComboBox->getTextColor() == GUIDesignTextColorBlack)) {
3636 if (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) {
3638 } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) {
3639 return SUMO_TAG_EDGEREL;
3640 } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str()) {
3641 return SUMO_TAG_TAZREL;
3642 }
3643 }
3644 return SUMO_TAG_NOTHING;
3645}
3646
3647
3650 if (!myDataSetsComboBox->isEnabled() ||
3651 (myDataSetsComboBox->getCurrentItem() == 0) ||
3652 (myDataSetsComboBox->getTextColor() == GUIDesignTextColorRed)) {
3653 return nullptr;
3654 } else {
3655 return myViewNet->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetsComboBox->getText().text());
3656 }
3657}
3658
3659
3660double
3662 if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3663 return INVALID_DOUBLE;
3664 } else {
3665 return GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
3666 }
3667}
3668
3669
3670double
3672 if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3673 return INVALID_DOUBLE;
3674 } else {
3675 return GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
3676 }
3677}
3678
3679
3680std::string
3682 if (!myParametersComboBox->isEnabled() ||
3683 (myParametersComboBox->getCurrentItem() == 0) ||
3684 (myParametersComboBox->getTextColor() == GUIDesignTextColorRed)) {
3685 return "";
3686 } else {
3687 return myParametersComboBox->getText().text();
3688 }
3689}
3690
3691
3692void
3694 if ((myGenericDataTypesComboBox->getText() == "<all>") ||
3695 (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) ||
3696 (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) ||
3697 (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str())) {
3698 myGenericDataTypesComboBox->setTextColor(GUIDesignTextColorBlack);
3699 } else {
3700 myGenericDataTypesComboBox->setTextColor(GUIDesignTextColorRed);
3701 }
3702 // update view net
3703 myViewNet->updateViewNet();
3704}
3705
3706
3707void
3709 // check if exist
3710 if (std::find(myDataSets.begin(), myDataSets.end(), myDataSetsComboBox->getText().text()) != myDataSets.end()) {
3711 myDataSetsComboBox->setTextColor(GUIDesignTextColorBlack);
3712 } else {
3713 myDataSetsComboBox->setTextColor(GUIDesignTextColorRed);
3714 }
3715 // update view net
3716 myViewNet->updateViewNet();
3717}
3718
3719
3720void
3722 // enable or disable text fields
3723 if (myIntervalCheckBox->isEnabled() && (myIntervalCheckBox->getCheck() == TRUE)) {
3724 myBeginTextField->enable();
3725 myEndTextField->enable();
3726 } else {
3727 myBeginTextField->disable();
3728 myEndTextField->disable();
3729 }
3730 // update view net
3731 myViewNet->updateViewNet();
3732}
3733
3734
3735void
3737 if (myBeginTextField->getText().empty()) {
3738 myBeginTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMinimumBegin()).c_str());
3739 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
3740 } else if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
3741 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
3742 } else {
3743 myBeginTextField->setTextColor(GUIDesignTextColorRed);
3744 }
3745 // update view net
3746 myViewNet->updateViewNet();
3747}
3748
3749
3750void
3752 if (myEndTextField->getText().empty()) {
3753 myEndTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMaximumEnd()).c_str());
3754 myEndTextField->setTextColor(GUIDesignTextColorBlack);
3755 } else if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
3756 myEndTextField->setTextColor(GUIDesignTextColorBlack);
3757 } else {
3758 myEndTextField->setTextColor(GUIDesignTextColorRed);
3759 }
3760 // update view net
3761 myViewNet->updateViewNet();
3762}
3763
3764
3765void
3767 // check if exist
3768 if (myParameters.count(myParametersComboBox->getText().text()) > 0) {
3769 myParametersComboBox->setTextColor(GUIDesignTextColorBlack);
3770 } else {
3771 myParametersComboBox->setTextColor(GUIDesignTextColorRed);
3772 }
3773 // update view net
3774 myViewNet->updateViewNet();
3775}
3776
3777
3778
3779void
3781 // enable elements
3782 myGenericDataTypesComboBox->enable();
3783 myDataSetsComboBox->enable();
3784 myIntervalCheckBox->enable();
3785 if (myIntervalCheckBox->getCheck() == TRUE) {
3786 myBeginTextField->enable();
3787 myEndTextField->enable();
3788 } else {
3789 myBeginTextField->disable();
3790 myEndTextField->disable();
3791 }
3792 myParametersComboBox->enable();
3793}
3794
3795
3796void
3798 // disable all elements
3799 myGenericDataTypesComboBox->disable();
3800 myDataSetsComboBox->disable();
3801 myIntervalCheckBox->disable();
3802 myBeginTextField->disable();
3803 myEndTextField->disable();
3804 myParametersComboBox->disable();
3805}
3806
3807// ---------------------------------------------------------------------------
3808// GNEViewNetHelper::CommonCheckableButtons - methods
3809// ---------------------------------------------------------------------------
3810
3814
3815
3816void
3818 // get grip modes
3819 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3820 // get tooltip menu
3821 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3822 // inspect button
3823 inspectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3824 std::string("\t") + TL("Inspect mode") + std::string("\t") + TL("Mode to inspect elements and change their attributes. (I)"),
3826 inspectButton->create();
3827 // delete button
3828 deleteButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3829 std::string("\t") + TL("Delete mode") + std::string("\t") + TL("Mode for deleting elements. (D)"),
3831 deleteButton->create();
3832 // select button
3833 selectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3834 std::string("\t") + TL("Select mode") + std::string("\t") + TL("Mode for selecting elements. (S)"),
3836 selectButton->create();
3837 // always recalc menu bar after creating new elements
3838 gripModes->recalc();
3839}
3840
3841
3842void
3844 inspectButton->show();
3845 deleteButton->show();
3846 selectButton->show();
3847}
3848
3849
3850void
3852 inspectButton->hide();
3853 deleteButton->hide();
3854 selectButton->hide();
3855}
3856
3857
3858void
3860 inspectButton->setChecked(false);
3861 deleteButton->setChecked(false);
3862 selectButton->setChecked(false);
3863}
3864
3865
3866void
3868 inspectButton->update();
3869 deleteButton->update();
3870 selectButton->update();
3871}
3872
3873// ---------------------------------------------------------------------------
3874// GNEViewNetHelper::NetworkCheckableButtons - methods
3875// ---------------------------------------------------------------------------
3876
3880
3881
3882void
3884 // get grip modes
3885 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3886 // get tooltip menu
3887 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3888 // move button
3889 moveNetworkElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3890 std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
3892 moveNetworkElementsButton->create();
3893 // create edge
3894 createEdgeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3895 std::string("\t") + TL("Edge mode") + std::string("\t") + TL("Mode for creating junctions and edges. (E)"),
3897 createEdgeButton->create();
3898 // traffic light mode
3899 trafficLightButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3900 std::string("\t") + TL("Traffic light mode") + std::string("\t") + TL("Mode for editing traffic lights over junctions. (T)"),
3902 trafficLightButton->create();
3903 // connection mode
3904 connectionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3905 std::string("\t") + TL("Connection mode") + std::string("\t") + TL("Mode for editing connections between lanes. (C)"),
3907 connectionButton->create();
3908 // prohibition mode
3909 prohibitionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3910 std::string("\t") + TL("Prohibition mode") + std::string("\t") + TL("Mode for editing connection prohibitions. (H)"),
3912 prohibitionButton->create();
3913 // crossing mode
3914 crossingButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3915 std::string("\t") + TL("Crossing mode") + std::string("\t") + TL("Mode for creating crossings between edges. (R)"),
3917 crossingButton->create();
3918 // additional mode
3919 additionalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3920 std::string("\t") + TL("Additional mode") + std::string("\t") + TL("Mode for creating additional elements. (A)"),
3922 additionalButton->create();
3923 // wire mode
3924 wireButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3925 std::string("\t") + TL("Wire mode") + std::string("\t") + TL("Mode for editing overhead wires. (W)"),
3927 wireButton->create();
3928 // TAZ Mode
3929 TAZButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3930 std::string("\t") + TL("TAZ mode") + std::string("\t") + TL("Mode for creating Traffic Assignment Zones. (Z)"),
3932 TAZButton->create();
3933 // shape mode
3934 shapeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3935 std::string("\t") + TL("Polygon mode") + std::string("\t") + TL("Mode for creating polygons and POIs. (P)"),
3937 shapeButton->create();
3938 // decal mode
3939 decalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3940 std::string("\t") + TL("Decal mode") + std::string("\t") + TL("Mode for editing decals. (U)"),
3942 decalButton->create();
3943 // always recalc after creating new elements
3944 gripModes->recalc();
3945}
3946
3947
3948void
3950 // continue depending of view
3951 if (myViewNet->getEditModes().isJuPedSimView()) {
3952 moveNetworkElementsButton->show();
3953 createEdgeButton->show();
3954 connectionButton->hide();
3955 trafficLightButton->hide();
3956 additionalButton->show();
3957 crossingButton->show();
3958 TAZButton->show();
3959 shapeButton->show();
3960 prohibitionButton->hide();
3961 wireButton->hide();
3962 decalButton->hide();
3963 } else {
3964 moveNetworkElementsButton->show();
3965 createEdgeButton->show();
3966 connectionButton->show();
3967 trafficLightButton->show();
3968 additionalButton->show();
3969 crossingButton->show();
3970 TAZButton->show();
3971 shapeButton->show();
3972 prohibitionButton->show();
3973 wireButton->show();
3974 decalButton->show();
3975 }
3976}
3977
3978
3979void
3981 moveNetworkElementsButton->hide();
3982 createEdgeButton->hide();
3983 connectionButton->hide();
3984 trafficLightButton->hide();
3985 additionalButton->hide();
3986 crossingButton->hide();
3987 TAZButton->hide();
3988 shapeButton->hide();
3989 prohibitionButton->hide();
3990 wireButton->hide();
3991 decalButton->hide();
3992}
3993
3994
3995void
3997 moveNetworkElementsButton->setChecked(false);
3998 createEdgeButton->setChecked(false);
3999 connectionButton->setChecked(false);
4000 trafficLightButton->setChecked(false);
4001 additionalButton->setChecked(false);
4002 crossingButton->setChecked(false);
4003 TAZButton->setChecked(false);
4004 shapeButton->setChecked(false);
4005 prohibitionButton->setChecked(false);
4006 wireButton->setChecked(false);
4007 decalButton->setChecked(false);
4008}
4009
4010
4011void
4013 moveNetworkElementsButton->update();
4014 createEdgeButton->update();
4015 connectionButton->update();
4016 trafficLightButton->update();
4017 additionalButton->update();
4018 crossingButton->update();
4019 TAZButton->update();
4020 shapeButton->update();
4021 prohibitionButton->update();
4022 wireButton->update();
4023 decalButton->update();
4024}
4025
4026// ---------------------------------------------------------------------------
4027// GNEViewNetHelper::DemandCheckableButtons - methods
4028// ---------------------------------------------------------------------------
4029
4033
4034
4035void
4037 // get grip modes
4038 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
4039 // get tooltip menu
4040 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
4041 // move button
4042 moveDemandElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4043 std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
4045 moveDemandElementsButton->create();
4046 // route mode
4047 routeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4048 std::string("\t") + TL("Route mode") + std::string("\t") + TL("Mode for creating routes. (R)"),
4050 routeButton->create();
4051 // rout distribution mode
4052 routeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4053 std::string("\t") + TL("Route distribution mode") + std::string("\t") + TL("Mode for creating and editing rout distributions. (W)"),
4055 routeDistributionButton->create();
4056 // vehicle mode
4057 vehicleButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4058 std::string("\t") + TL("Vehicle mode") + std::string("\t") + TL("Mode for creating vehicles. (V)"),
4060 vehicleButton->create();
4061 // type mode
4062 typeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4063 std::string("\t") + TL("Type mode") + std::string("\t") + TL("Mode for creating types (of vehicles, persons and containers). (T)"),
4065 typeButton->create();
4066 // type distribution mode
4067 typeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4068 std::string("\t") + TL("Type distribution mode") + std::string("\t") + TL("Mode for creating and editing type distribution. (U)"),
4070 typeDistributionButton->create();
4071 // stop mode
4072 stopButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4073 std::string("\t") + TL("Stop mode") + std::string("\t") + TL("Mode for creating stops. (A)"),
4075 stopButton->create();
4076 // person mode
4077 personButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4078 std::string("\t") + TL("Person mode") + std::string("\t") + TL("Mode for creating persons. (P)"),
4080 personButton->create();
4081 // person plan mode
4082 personPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4083 std::string("\t") + TL("Person plan mode") + std::string("\t") + TL("Mode for creating person plans. (L)"),
4085 personPlanButton->create();
4086 // container mode
4087 containerButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4088 std::string("\t") + TL("Container mode") + std::string("\t") + TL("Mode for creating containers. (C)"),
4090 containerButton->create();
4091 // container plan mode
4092 containerPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4093 std::string("\t") + TL("Container plan mode") + std::string("\t") + TL("Mode for creating container plans. (H)"),
4095 containerPlanButton->create();
4096 // always recalc after creating new elements
4097 gripModes->recalc();
4098}
4099
4100
4101void
4103 if (myViewNet->getEditModes().isJuPedSimView()) {
4104 moveDemandElementsButton->hide();
4105 routeButton->show();
4106 routeDistributionButton->show();
4107 vehicleButton->hide();
4108 typeButton->show();
4109 typeDistributionButton->show();
4110 stopButton->hide();
4111 personButton->show();
4112 personPlanButton->show();
4113 containerButton->hide();
4114 containerPlanButton->hide();
4115 } else {
4116 moveDemandElementsButton->show();
4117 routeButton->show();
4118 routeDistributionButton->show();
4119 vehicleButton->show();
4120 typeButton->show();
4121 typeDistributionButton->show();
4122 stopButton->show();
4123 personButton->show();
4124 personPlanButton->show();
4125 containerButton->show();
4126 containerPlanButton->show();
4127 }
4128}
4129
4130
4131void
4133 moveDemandElementsButton->hide();
4134 routeButton->hide();
4135 routeDistributionButton->hide();
4136 vehicleButton->hide();
4137 typeButton->hide();
4138 typeDistributionButton->hide();
4139 stopButton->hide();
4140 personButton->hide();
4141 personPlanButton->hide();
4142 containerButton->hide();
4143 containerPlanButton->hide();
4144}
4145
4146
4147void
4149 moveDemandElementsButton->setChecked(false);
4150 routeButton->setChecked(false);
4151 routeDistributionButton->setChecked(false);
4152 vehicleButton->setChecked(false);
4153 typeButton->setChecked(false);
4154 typeDistributionButton->setChecked(false);
4155 stopButton->setChecked(false);
4156 personButton->setChecked(false);
4157 personPlanButton->setChecked(false);
4158 containerButton->setChecked(false);
4159 containerPlanButton->setChecked(false);
4160}
4161
4162
4163void
4165 moveDemandElementsButton->update();
4166 routeButton->update();
4167 routeDistributionButton->update();
4168 vehicleButton->update();
4169 typeButton->update();
4170 typeDistributionButton->update();
4171 stopButton->update();
4172 personButton->update();
4173 personPlanButton->update();
4174 containerButton->update();
4175 containerPlanButton->update();
4176}
4177
4178// ---------------------------------------------------------------------------
4179// GNEViewNetHelper::DataCheckableButtons - methods
4180// ---------------------------------------------------------------------------
4181
4185
4186
4187void
4189 // get grip modes
4190 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
4191 // get tooltip menu
4192 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
4193 // edgeData mode
4194 edgeDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4195 std::string("\t") + TL("Edge data mode") + std::string("\t") + TL("Mode for creating edge datas. (E)"),
4197 edgeDataButton->create();
4198 // edgeRelData mode
4199 edgeRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4200 std::string("\t") + TL("Edge relation data mode") + std::string("\t") + TL("Mode for creating edge relation datas. (R)"),
4202 edgeRelDataButton->create();
4203 // TAZRelData mode
4204 TAZRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4205 std::string("\t") + TL("TAZ relation data mode") + std::string("\t") + TL("Mode for creating TAZ relation datas. (Z)"),
4207 TAZRelDataButton->create();
4208 // meanData button
4209 meanDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4210 std::string("\t") + TL("MeanData mode") + std::string("\t") + TL("Mode for MeanData elements. (M)"),
4212 meanDataButton->create();
4213 // always recalc after creating new elements
4214 gripModes->recalc();
4215}
4216
4217
4218void
4220 edgeDataButton->show();
4221 edgeRelDataButton->show();
4222 TAZRelDataButton->show();
4223 meanDataButton->show();
4224}
4225
4226
4227void
4229 edgeDataButton->hide();
4230 edgeRelDataButton->hide();
4231 TAZRelDataButton->hide();
4232 meanDataButton->hide();
4233}
4234
4235
4236void
4238 edgeDataButton->setChecked(false);
4239 edgeRelDataButton->setChecked(false);
4240 TAZRelDataButton->setChecked(false);
4241 meanDataButton->setChecked(false);
4242}
4243
4244
4245void
4247 edgeDataButton->update();
4248 edgeRelDataButton->update();
4249 TAZRelDataButton->update();
4250 meanDataButton->update();
4251}
4252
4253// ---------------------------------------------------------------------------
4254// GNEViewNetHelper::EditNetworkElementShapes - methods
4255// ---------------------------------------------------------------------------
4256
4258 myViewNet(viewNet),
4259 myPreviousNetworkEditMode(NetworkEditMode::NETWORK_NONE) {
4260}
4261
4262
4263void
4265 if (element && (myEditedNetworkElement == nullptr)) {
4266 // save current edit mode before starting
4267 myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
4268 // set move mode
4269 myViewNet->myEditModes.setNetworkEditMode(NetworkEditMode::NETWORK_MOVE);
4270 //set editedNetworkElement
4271 myEditedNetworkElement = element;
4272 // enable shape edited flag
4273 myEditedNetworkElement->setShapeEdited(true);
4274 // update view net to show the new editedShapePoly
4275 myViewNet->updateViewNet();
4276 }
4277}
4278
4279
4280void
4282 // stop edit shape junction deleting editedShapePoly
4283 if (myEditedNetworkElement != nullptr) {
4284 // disable shape edited flag
4285 myEditedNetworkElement->setShapeEdited(false);
4286 // reset editedNetworkElement
4287 myEditedNetworkElement = nullptr;
4288 // restore previous edit mode
4289 if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
4290 myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
4291 }
4292 }
4293}
4294
4295
4296void
4298 // save edited junction's shape
4299 if (myEditedNetworkElement != nullptr) {
4300 // stop edit custom shape
4301 stopEditCustomShape();
4302 }
4303}
4304
4305
4308 return myEditedNetworkElement;
4309}
4310
4311// ---------------------------------------------------------------------------
4312// GNEViewNetHelper::BlockIcon - methods
4313// ---------------------------------------------------------------------------
4314
4315void
4317 const GNEAttributeCarrier* AC, GUIGlObjectType type, const Position position, const double exaggeration,
4318 const double size, const double offsetx, const double offsety) {
4319 // first check if icon can be drawn
4320 if (checkDrawing(d, AC, type, exaggeration)) {
4321 // Start pushing matrix
4323 // Traslate to position
4324 glTranslated(position.x(), position.y(), GLO_LOCKICON);
4325 // Traslate depending of the offset
4326 glTranslated(offsetx, offsety, 0);
4327 // rotate to avoid draw invert
4328 glRotated(180, 0, 0, 1);
4329 // Set draw color
4330 glColor3d(1, 1, 1);
4331 // Draw lock icon
4333 // Pop matrix
4335 }
4336}
4337
4338
4340
4341
4342bool
4344 GUIGlObjectType type, const double exaggeration) {
4345 // check detail
4347 return false;
4348 }
4349 // get view net
4350 const auto viewNet = AC->getNet()->getViewNet();
4351 // check exaggeration
4352 if (exaggeration == 0) {
4353 return false;
4354 }
4355 // check supermodes
4356 if (viewNet->getEditModes().isCurrentSupermodeNetwork() &&
4358 return false;
4359 }
4360 if (viewNet->getEditModes().isCurrentSupermodeDemand() && (!AC->getTagProperty()->isDemandElement())) {
4361 return false;
4362 }
4363 if (viewNet->getEditModes().isCurrentSupermodeData() && (!AC->getTagProperty()->isDataElement())) {
4364 return false;
4365 }
4366 // check if is locked
4367 if (!viewNet->getLockManager().isObjectLocked(type, AC->isAttributeCarrierSelected())) {
4368 return false;
4369 }
4370 // all ok, then draw
4371 return true;
4372}
4373
4374// ---------------------------------------------------------------------------
4375// GNEViewNetHelper - methods
4376// ---------------------------------------------------------------------------
4377
4378const std::vector<RGBColor>&
4380 // if is empty, fill it
4381 if (myRainbowScaledColors.empty()) {
4382 // fill scale colors (10)
4383 myRainbowScaledColors.push_back(RGBColor(232, 35, 0, 255));
4384 myRainbowScaledColors.push_back(RGBColor(255, 165, 0, 255));
4385 myRainbowScaledColors.push_back(RGBColor(255, 255, 0, 255));
4386 myRainbowScaledColors.push_back(RGBColor(28, 215, 0, 255));
4387 myRainbowScaledColors.push_back(RGBColor(0, 181, 100, 255));
4388 myRainbowScaledColors.push_back(RGBColor(0, 255, 191, 255));
4389 myRainbowScaledColors.push_back(RGBColor(178, 255, 255, 255));
4390 myRainbowScaledColors.push_back(RGBColor(0, 112, 184, 255));
4391 myRainbowScaledColors.push_back(RGBColor(56, 41, 131, 255));
4392 myRainbowScaledColors.push_back(RGBColor(127, 0, 255, 255));
4393 }
4394 return myRainbowScaledColors;
4395}
4396
4397
4398const RGBColor&
4399GNEViewNetHelper::getRainbowScaledColor(const double min, const double max, const double value) {
4400 // check extremes
4401 if (value <= min) {
4402 return getRainbowScaledColors().front();
4403 } else if (value >= max) {
4404 return getRainbowScaledColors().back();
4405 } else {
4406 // calculate value procent between [min, max]
4407 const double procent = ((value - min) * 100) / (max - min);
4408 // check if is valid
4409 if (procent <= 0) {
4410 return getRainbowScaledColors().front();
4411 } else if (procent >= 100) {
4412 return getRainbowScaledColors().back();
4413 } else {
4414 // return scaled color
4415 return getRainbowScaledColors().at((int)(procent / 10.0));
4416 }
4417 }
4418}
4419
4420
4421std::vector<GUIGlObject*>
4422GNEViewNetHelper::filterElementsByLayer(const std::vector<GUIGlObject*>& GLObjects) {
4423 std::vector<GUIGlObject*> filteredGLObjects;
4424 if (GLObjects.size() > 0) {
4425 const auto firstLayer = GLObjects.front()->getType();
4426 for (const auto& GLObject : GLObjects) {
4427 if ((GLO_RIDE <= firstLayer) && (firstLayer <= GLO_TRANSHIP) &&
4428 (GLO_RIDE <= GLObject->getType()) && (GLObject->getType() <= GLO_TRANSHIP)) {
4429 filteredGLObjects.push_back(GLObject);
4430 } else if ((GLO_STOP <= firstLayer) && (firstLayer <= GLO_STOP_PLAN) &&
4431 (GLO_STOP <= GLObject->getType()) && (GLObject->getType() <= GLO_STOP_PLAN)) {
4432 filteredGLObjects.push_back(GLObject);
4433 } else if ((GLO_VEHICLE <= firstLayer) && (firstLayer <= GLO_ROUTEFLOW) &&
4434 (GLO_VEHICLE <= GLObject->getType()) && (GLObject->getType() <= GLO_ROUTEFLOW)) {
4435 filteredGLObjects.push_back(GLObject);
4436 } else if ((GLO_PERSON <= firstLayer) && (firstLayer <= GLO_PERSONFLOW) &&
4437 (GLO_PERSON <= GLObject->getType()) && (GLObject->getType() <= GLO_PERSONFLOW)) {
4438 filteredGLObjects.push_back(GLObject);
4439 } else if ((GLO_CONTAINER <= firstLayer) && (firstLayer <= GLO_CONTAINERFLOW) &&
4440 (GLO_CONTAINER <= GLObject->getType()) && (GLObject->getType() <= GLO_CONTAINERFLOW)) {
4441 filteredGLObjects.push_back(GLObject);
4442 } else if (GLObject->getType() == firstLayer) {
4443 filteredGLObjects.push_back(GLObject);
4444 }
4445 }
4446 }
4447 return filteredGLObjects;
4448}
4449
4450/****************************************************************************/
DataEditMode
enum for data edit modes
@ DATA_SELECT
mode for selecting data elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_DELETE
mode for deleting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
NetworkEditMode
@brie enum for network edit modes
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_WIRE
Mode for editing wires.
@ NETWORK_CREATE_EDGE
mode for creating new edges
@ NETWORK_TLS
mode for editing tls
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_PROHIBITION
Mode for editing connection prohibitions.
@ NETWORK_NONE
empty Network mode
@ NETWORK_CONNECT
mode for connecting lanes
DemandEditMode
@brie enum for demand edit modes
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_MOVE
mode for moving demand elements
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition GUIAppEnum.h:857
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition GUIAppEnum.h:204
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition GUIAppEnum.h:236
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:943
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:967
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:831
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:853
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:839
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:837
@ MID_GNE_INTERVALBAR_BEGIN
begin changed in InterbalBar
Definition GUIAppEnum.h:987
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:973
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:959
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:843
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:945
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition GUIAppEnum.h:75
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:933
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition GUIAppEnum.h:43
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:811
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:931
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:208
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition GUIAppEnum.h:117
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition GUIAppEnum.h:855
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:965
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition GUIAppEnum.h:53
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition GUIAppEnum.h:67
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition GUIAppEnum.h:939
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:961
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:851
@ MID_GNE_INTERVALBAR_END
end changed in InterbalBar
Definition GUIAppEnum.h:989
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:845
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition GUIAppEnum.h:841
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:947
@ MID_GNE_VIEW_DEFAULT
set default view
Definition GUIAppEnum.h:793
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:238
@ MID_GNE_VIEW_JUPEDSIM
set juPedSim view
Definition GUIAppEnum.h:795
@ MID_GNE_INTERVALBAR_PARAMETER
parameter changed in InterbalBar
Definition GUIAppEnum.h:991
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:65
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition GUIAppEnum.h:969
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWPOLYGONSYMBOLS
show polygon symbols
Definition GUIAppEnum.h:859
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:833
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition GUIAppEnum.h:210
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:937
@ MID_GNE_INTERVALBAR_GENERICDATATYPE
generic data selected
Definition GUIAppEnum.h:981
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:849
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:847
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:963
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition GUIAppEnum.h:971
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:829
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:935
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:951
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_INTERVALBAR_DATASET
data set selected
Definition GUIAppEnum.h:983
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition GUIAppEnum.h:234
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:949
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:835
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:941
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:827
@ MID_GNE_INTERVALBAR_LIMITED
enable/disable show data elements by interval
Definition GUIAppEnum.h:985
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition GUIAppEnum.h:61
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonPopup
checkable button placed in popup (for example, locate buttons)
Definition GUIDesigns.h:130
#define GUIDesignButtonToolbar
little button with icon placed in navigation toolbar
Definition GUIDesigns.h:144
#define GUIDesignButtonLeft
button extended over over Frame with thick and raise frame
Definition GUIDesigns.h:103
#define GUIDesignComboBoxFixed(customWidth)
comboBox with thick frame, fixed width
Definition GUIDesigns.h:307
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition GUIDesigns.h:92
#define GUIDesignTLSTableCheckableButtonIcon
checkable button only with icon used in TLSTable
Definition GUIDesigns.h:127
#define GUIDesignComboBoxVisibleItemsFixed
combo box size fixed
Definition GUIDesigns.h:67
#define GUIDesignTextColorBlack
black color (for correct text)
Definition GUIDesigns.h:38
#define GUIDesignTextFieldFixedRestricted(width, type)
text field with fixed width
Definition GUIDesigns.h:83
#define GUIDesignMFXCheckableButtonSquare
Definition GUIDesigns.h:158
#define GUIDesignButtonToolbarLocator
little checkable button with icon placed in navigation toolbar used specify for Locator
Definition GUIDesigns.h:150
#define GUIDesignMFXCheckableButtonSupermode
checkable button with icon placed in navigation toolbar for supermodes
Definition GUIDesigns.h:161
#define GUIDesignCheckButtonAttribute
checkButton without thick extended over the frame used for attributes
Definition GUIDesigns.h:203
#define GUIDesignLabelThickedFixed(width)
label thicked, icon before text, text centered and custom width
Definition GUIDesigns.h:254
GUIGlObjectType
@ GLO_EDGERELDATA
edge relation data
@ GLO_TAZRELDATA
TAZ relation data.
@ GLO_WALKINGAREA
a walkingArea
@ GLO_JPS_WALKABLEAREA
walkable area
@ GLO_TESTELEMENT
test element (used in netedit)
@ GLO_TRANSHIP
a container tranship
@ GLO_STOPPING_PLACE_LAST
reserved GLO type for packing all StoppingPlace elements
@ GLO_STOP_PLAN
a stop plan stop
@ GLO_ACCESS
a Acces
@ GLO_ROUTEFLOW
a routeFlow
@ GLO_WALK
a walk
@ GLO_ROUTE
a route
@ GLO_WIRE
reserved GLO type for packing all wire elements
@ GLO_JUNCTION
a junction
@ GLO_LANE
a lane
@ GLO_RIDE
a ride
@ GLO_TAZ
Traffic Assignment Zones (TAZs)
@ GLO_CONTAINER
a container
@ GLO_JPS_OBSTACLE
obstacles
@ GLO_EDGEDATA
edge data
@ GLO_CONNECTION
a connection
@ GLO_ADDITIONALELEMENT
reserved GLO type for packing all additionals elements
@ GLO_PERSONTRIP
a person trip
@ GLO_EDGE
an edge
@ GLO_STOPPING_PLACE
reserved GLO type for packing all StoppingPlace elements
@ GLO_VEHICLE
a vehicle
@ GLO_PERSON
a person
@ GLO_TRANSPORT
a container transport
@ GLO_POI
poi (over view, geo and lane)
@ GLO_RECTANGLESELECTION
rectangle selection shape (used in netedit)
@ GLO_STOP
a stop
@ GLO_CONTAINERFLOW
a person flow
@ GLO_POLYGON
polygon
@ GLO_TLLOGIC
a tl-logic
@ GLO_CROSSING
a tl-logic
@ GLO_PERSONFLOW
a person flow
@ GLO_TRACTIONSUBSTATION
a segment of an overhead line
@ GLO_ROUTE_DISTRIBUTION
route distribution
@ GLO_LOCKICON
Lock icon (used in netedit)
GUIViewObjectsHandler gViewObjectsHandler
@ DATAMODE_CHECKBOX_SHOWADDITIONALS
@ SAVE_NETEDITCONFIG
@ SAVE_DATAELEMENTS
@ NETWORKMODE_CHECKBOX_BUBBLES
@ SAVE_NETWORKELEMENTS
@ DATAMODE_CHECKBOX_TAZRELONLYFROM
@ MODEPERSONPLAN
@ NETWORKMODE_CHECKBOX_SHOWPOLYGONSYMBOLS
@ MODECROSSING
@ MODEMEANDATA
@ MODEADDITIONAL
@ MODEEDGERELDATA
@ SUPERMODEDEMAND
@ MODEPROHIBITION
@ SAVE_ADDITIONALELEMENTS
@ DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS
@ NETWORKMODE_CHECKBOX_HIDECONNECTIONS
@ DEMANDMODE_CHECKBOX_SHOWTRIPS
@ COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE
@ DATAMODE_CHECKBOX_SHOWSHAPES
@ NETWORKMODE_CHECKBOX_SELECTEDGES
@ COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS
@ DEMANDMODE_CHECKBOX_LOCKPERSON
@ NETWORKMODE_CHECKBOX_MERGEAUTOMATICALLY
@ NETWORKMODE_CHECKBOX_APPLYTOALLPHASES
@ MODECREATEEDGE
@ DATAMODE_CHECKBOX_TAZRELONLYTO
@ NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS
@ SAVE_MEANDATAELEMENTS
@ DATAMODE_CHECKBOX_TAZRELDRAWING
@ NETWORKMODE_CHECKBOX_SHOWCONNECTIONS
@ DEMANDMODE_CHECKBOX_SHOWPERSONPLANS
@ MODECONTAINER
@ DEMANDMODE_CHECKBOX_HIDESHAPES
@ DATAMODE_CHECKBOX_TAZDRAWFILL
@ MODEEDGEDATA
@ NETWORKMODE_CHECKBOX_ELEVATION
@ SUPERMODENETWORK
@ COMMONMODE_CHECKBOX_SPREADVEHICLE
@ SAVE_DEMANDELEMENTS
@ DEMANDMODE_CHECKBOX_LOCKCONTAINER
@ NETWORKMODE_CHECKBOX_SHOWSUBADDITIONALS
@ NETWORKMODE_CHECKBOX_SHOWTAZELEMENTS
@ SUPERMODEDATA
@ MODECONNECTION
@ MODECONTAINERPLAN
@ SAVE_MULTIPLE
@ NETWORKMODE_CHECKBOX_CHAIN
@ DEMANDMODE_CHECKBOX_SHOWOVERLAPPEDROUTES
@ SAVE_SUMOCONFIG
@ VIEWJUPEDSIM
@ MODETYPEDISTRIBUTION
@ COMMONMODE_CHECKBOX_TOGGLEGRID
@ MODEROUTEDISTRIBUTION
@ MODETAZRELDATA
@ DEMANDMODE_CHECKBOX_SHOWCONTAINERPLANS
@ NETWORKMODE_CHECKBOX_TWOWAY
#define WRITE_ERRORF(...)
Definition MsgHandler.h:296
#define TL(string)
Definition MsgHandler.h:304
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_EDGEREL
a relation between two edges
@ SUMO_TAG_TAZ
a traffic assignment zone
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ GNE_TAG_EDGEREL_SINGLE
@ SUMO_TAG_CONNECTION
connectioon between two lanes
@ SUMO_TAG_WALKINGAREA
walking area for pedestrians
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_CROSSING
crossing between edges for pedestrians
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ GNE_ATTR_SELECTED
element is selected
bool gHumanReadableTime
Definition StdDefs.cpp:31
const double INVALID_DOUBLE
invalid double
Definition StdDefs.h:68
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
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:75
PositionVector getShape(const bool closeShape) const
get position vector (shape) based on this boundary
Definition Boundary.cpp:444
void addParentID(const SumoXMLTag tag, const std::string &ID)
add parent (string) attribute into current SumoBaseObject node
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition GLHelper.cpp:649
static void popMatrix()
pop matrix
Definition GLHelper.cpp:131
static void pushMatrix()
push matrix
Definition GLHelper.cpp:118
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
bool isMarkedForDrawingFront() const
check if this AC is marked for drawing front
virtual GNEMoveElement * getMoveElement() const =0
get GNEMoveElement associated with this AttributeCarrier
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
void unmarkForDrawingFront()
unmark for drawing front
GNENet * getNet() const
get pointer to net
An Element which don't belong to GNENet but has influence in the simulation.
Definition GNEEdgeData.h:32
bool isConvexAngle() const
check if edge makes a convex angle [0 - 180) degrees
Definition GNEEdge.cpp:1749
NBEdge * getNBEdge() const
returns the internal NBEdge
Definition GNEEdge.cpp:773
An Element which don't belong to GNENet but has influence in the simulation.
const GNEHierarchicalContainerParents< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
const GNEHierarchicalContainerChildren< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
static void commitMove(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const GNEMoveOffset &offset, GNEUndoList *undoList)
commit move element for the given offset
static void moveElement(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const GNEMoveOffset &offset)
move element the for given offset (note: offset can be X-Y-0, 0-0-Z or X-Y-Z)
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:174
GNEViewNet * getViewNet() const
get view net (used for simplify code)
Definition GNENet.cpp:144
void setShapeEdited(const bool value)
set shape edited
An Element which don't belong to GNENet but has influence in the simulation.
bool isNetworkElement() const
network elements
bool isDataElement() const
return true if tag correspond to a data element
bool isDemandElement() const
return true if tag correspond to a demand element
bool isAdditionalElement() const
return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
bool isInspectingElements() const
check if we're inspecting at least one element
void inspectAC(GNEAttributeCarrier *AC)
void inspectACs(const std::vector< GNEAttributeCarrier * > &ACs)
inspect multiple ACs
bool isACInspected(GNEAttributeCarrier *AC) const
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all inspected ACs
GNEAttributeCarrier * getFirstAC() const
void uninspectAC(GNEAttributeCarrier *AC)
uninspect AC
bool isInspectingSingleElement() const
check if we're inspecting exactly one element
bool isInspectingMultipleElements() const
check if we're inspecting more than one elements
void clearInspectedElements()
clear inspected AC
std::string getParameter() const
get parameter
void hideIntervalBar()
hide all options menu checks
void setGenericDataType()
set generic data type
double getBegin() const
get begin
void showIntervalBar()
show interval option bar
void disableIntervalBar()
disable interval bar
void updateIntervalBar()
update interval bar
void buildIntervalBarElements()
build interval bar elements
GNEDataSet * getDataSet() const
get dataSet
IntervalBar(GNEViewNet *viewNet)
default constructor
void enableIntervalBar()
enable interval bar
void setInterval()
update limit by interval
SumoXMLTag getGenericDataType() const
get generic data type
void updateLockMenuBar()
update lock inspect menuBar
bool isObjectLocked(GUIGlObjectType objectType, const bool selected) const
check if given GLObject is locked for inspect, select, delete and move
LockManager(GNEViewNet *viewNet)
constructor
std::map< GUIGlObjectType, OperationLocked > myLockedElements
map with locked elements
GNEViewNet * myViewNet
pointer to viewNet
void unmarkAC(GNEAttributeCarrier *AC)
unmark AC for drawing front
void markAC(GNEAttributeCarrier *AC)
mark AC as drawing front
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
std::vector< GNEConnection * > connections
vector with the connections
std::vector< GNEGenericData * > genericDatas
vector with the generic datas
std::vector< GNEPOI * > POIs
vector with the POIs
std::vector< GNEInternalLane * > internalLanes
vector with the internal lanes
std::vector< GUIGlObject * > GUIGlObjects
vector with the GUIGlObjects
std::vector< GNELane * > lanes
vector with the lanes
std::vector< GNETAZRelData * > TAZRelDatas
vector with the TAZ relation datas
void reserve(int size)
reseve memory for all elements
std::vector< GNECrossing * > crossings
vector with the crossings
std::vector< GNEPoly * > polys
vector with the polys
std::vector< GNETAZ * > TAZs
vector with the TAZ elements
std::vector< GNEAdditional * > additionals
vector with the additional elements
std::vector< GNEAttributeCarrier * > attributeCarriers
vector with the attribute carriers
std::vector< GNENetworkElement * > networkElements
vector with the network elements
std::vector< GNEEdgeData * > edgeDatas
vector with the edge datas
std::vector< GNEEdgeRelData * > edgeRelDatas
vector with the edge relation datas
std::vector< GNEEdge * > edges
vector with the edges
void filterElements(const std::vector< const GUIGlObject * > &objects)
filter elements
std::vector< GNEJunction * > junctions
vector with the junctions
std::vector< GNEWalkingArea * > walkingAreas
vector with the walkingAreas
std::vector< GNEDemandElement * > demandElements
vector with the demand elements
GNEEdgeRelData * getEdgeRelDataElementFront() const
get edge rel data element or a pointer to nullptr
void updateObjects()
update objects (using gViewObjectsHandler)
void filterConnections()
filter (remove) connections
void filterAllExcept(GUIGlObjectType exception)
filter all elements except the given GLO type
GNEEdgeData * getEdgeDataElementFront() const
get edge data element or a pointer to nullptr
const std::vector< const GNEJunction * > & getMergingJunctions() const
get merging junctions
void updateShapeElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update shape elements
void updateMergingJunctions()
update merging junctions
GNEConnection * getConnectionFront() const
get front connection or a pointer to nullptr
const std::vector< GNEAttributeCarrier * > & getAttributeCarriers() const
get vector with ACs
void filterEdges()
filter (remove) edges
GNEPoly * getPolyFront() const
get front Poly or a pointer to nullptr
void updateDemandElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update demand elements
void filterLockedElements(const std::vector< GUIGlObjectType > ignoreFilter={})
filter locked elements (except the ignoreFilter)
void filterCrossings()
filter (remove) crossings
GNEPOI * getPOIFront() const
get front POI or a pointer to nullptr
GNEInternalLane * getInternalLaneFront() const
get front internal lane or a pointer to nullptr
void filterNetworkElements()
filter (remove) network elements
void processGUIGlObjects(const GUIViewObjectsHandler::GLObjectsSortedContainer &objectsContainer)
process GL objects
const std::vector< GNETAZ * > & getTAZs() const
get vector with TAZs
GNEWalkingArea * getWalkingAreaFront() const
get front walkingArea or a pointer to nullptr
void filterBySuperMode()
filter by supermode
GNEEdge * getEdgeFront() const
get front edge or a pointer to nullptr
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
void updateAdditionalElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update additional elements
void updateGenericDataElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update generic data elements
void filterDemandElements(const bool includeRoutes)
filter (remove) demand elements
void updateTAZElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update TAZ elements
const std::vector< GNEDemandElement * > & getDemandElements() const
get vector with Demand Elements
void filterWalkingAreas()
filter (remove) walkingAreas
GNETAZ * getTAZFront() const
get front TAZ or a pointer to nullptr
void filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs)
filter (remove) additionals
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
void updateNetworkElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update network elements
GNEGenericData * getGenericDataElementFront() const
get generic data element or a pointer to nullptr
void fillSumoBaseObject(CommonXMLStructure::SumoBaseObject *baseObjet) const
fill the given SUMO base object with the current single objects
GNEAdditional * getAdditionalFront() const
get front additional element or a pointer to nullptr
GNELane * getLaneFrontNonLocked() const
get front lane or a pointer to nullptr checking if is locked
const GUIGlObject * getGUIGlObjectFront() const
get front GUIGLObject or a pointer to nullptr
GNENetworkElement * getNetworkElementFront() const
get front network element or a pointer to nullptr
const std::vector< GNEEdge * > & getEdges() const
get vector with edges
GNECrossing * getCrossingFront() const
get front crossing or a pointer to nullptr
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
void filterLanes()
filter (remove) lanes
void filterJunctions()
filter (remove) junctions
GNETAZRelData * getTAZRelDataElementFront() const
get TAZ rel data element or a pointer to nullptr
const std::vector< GUIGlObject * > & getGLObjects() const
get vector with GL objects
void filterShapes()
filter (remove) polys and POIs
const std::vector< GNEJunction * > & getJunctions() const
get vector with junctions
GNEDemandElement * getDemandElementFront() const
get front demand element or a pointer to nullptr
void filterDataElements()
filter (remove) datga elements
const std::vector< GNELane * > & getLanes() const
get lanes
const std::vector< GNEAdditional * > & getAdditionals() const
get vector with additionals
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
virtual bool isGLObjectLocked() const
check if element is locked (Currently used only in netedit)
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
int getNumberOfSelectedObjects() const
get number of selected objects
std::map< double, ObjectContainerLayer > GLObjectsSortedContainer
typedef for pack elements sorted by layer
const GLObjectsSortedContainer & getSelectedObjects() const
get all elements under cursor sorted by layer
const std::vector< const GNEJunction * > & getMergingJunctions() const
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
const PositionVector & getGeometry() const
Returns the geometry of the edge.
Definition NBEdge.h:789
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
C++ TraCI client API implementation.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double x() const
Returns the x-position.
Definition Position.h:52
double y() const
Returns the y-position.
Definition Position.h:57
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
static const RGBColor BLUE
Definition RGBColor.h:200
static const RGBColor YELLOW
Definition RGBColor.h:201
static const RGBColor MAGENTA
Definition RGBColor.h:203
#define UNUSED_PARAMETER(x)
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
MFXMenuCheckIcon * menuCheckLockPersonTrips
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
MFXMenuCheckIcon * menuCheckLockWalks
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
CommonCheckableButtons(GNEViewNet *viewNet)
default constructor
void buildCommonCheckableButtons()
build checkable buttons
void updateCommonCheckableButtons()
update Common checkable buttons
void disableCommonCheckableButtons()
hide all options menu checks
void hideCommonCheckableButtons()
hide all Common Checkable Buttons
void showCommonCheckableButtons()
show all Common Checkable Buttons
void hideDataCheckableButtons()
hide all Data Checkable Buttons
void showDataCheckableButtons()
show all Data Checkable Buttons
void disableDataCheckableButtons()
hide all options menu checks
void buildDataCheckableButtons()
build checkable buttons
void updateDataCheckableButtons()
update Data checkable buttons
DataCheckableButtons(GNEViewNet *viewNet)
default constructor
DataViewOptions(GNEViewNet *viewNet)
default constructor
bool TAZRelOnlyTo() const
check if toggle TAZRel only to checkbox is enabled
void hideDataViewOptionsMenuChecks()
hide all options menu checks
bool showAdditionals() const
check if additionals has to be drawn
bool showDemandElements() const
check if show demand elements checkbox is enabled
bool TAZRelOnlyFrom() const
check if toggle TAZRel only from checkbox is enabled
bool TAZDrawFill() const
check if toggle TAZ draw fill checkbox is enabled
void buildDataViewOptionsMenuChecks()
build menu checks
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
bool showShapes() const
check if shapes has to be drawn
bool TAZRelDrawing() const
check if toggle TAZRel drawing checkbox is enabled
void hideDemandCheckableButtons()
hide all Demand Checkable Buttons
DemandCheckableButtons(GNEViewNet *viewNet)
default constructor
void buildDemandCheckableButtons()
build checkable buttons
void showDemandCheckableButtons()
show all Demand Checkable Buttons
void updateDemandCheckableButtons()
update Demand checkable buttons
void disableDemandCheckableButtons()
hide all options menu checks
void lockPerson(const GNEDemandElement *person)
lock person
bool showAllPersonPlans() const
check all person plans has to be show
void lockContainer(const GNEDemandElement *container)
lock container
void buildDemandViewOptionsMenuChecks()
build menu checks
const GNEDemandElement * getLockedPerson() const
get locked person
const GNEDemandElement * getLockedContainer() const
get locked container
bool showShapes() const
check if shapes has to be drawn
void hideDemandViewOptionsMenuChecks()
hide all options menu checks
bool showAllContainerPlans() const
check all container plans has to be show
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool showNonInspectedDemandElements(const GNEDemandElement *demandElement) const
check if non inspected element has to be hidden
DemandViewOptions(GNEViewNet *viewNet)
default constructor
bool showOverlappedRoutes() const
show overlapped routes
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
bool showAllTrips() const
check if trips has to be drawn
void buildSuperModeButtons()
build checkable buttons
bool isDefaultView() const
check if default view is enabled
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
void setDemandEditMode(DemandEditMode demandMode, const bool force=false)
set Demand edit mode
bool isCurrentSupermodeData() const
@check if current supermode is Data
void setView(FXSelector sel)
set view
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
void setSupermode(Supermode supermode, const bool force)
set supermode
void setNetworkEditMode(NetworkEditMode networkMode, const bool force=false)
set Network edit mode
EditModes(GNEViewNet *viewNet)
constructor
void setDataEditMode(DataEditMode dataMode, const bool force=false)
set Data edit mode
GNENetworkElement * getEditedNetworkElement() const
pointer to edited network element
EditNetworkElementShapes(GNEViewNet *viewNet)
default constructor
void startEditCustomShape(GNENetworkElement *element)
start edit custom shape
static bool checkDrawing(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, GUIGlObjectType type, const double exaggeration)
check if icon can be drawn
static void drawLockIcon(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, GUIGlObjectType type, const Position position, const double exaggeration, const double size=0.5, const double offsetx=0, const double offsety=0)
draw lock icon
bool shiftKeyPressed() const
check if SHIFT is pressed during current event
bool altKeyPressed() const
check if ALT is pressed during current event
void update(void *eventData)
update status of MouseButtonKeyPressed during current event
bool mouseRightButtonPressed() const
check if mouse right button is pressed during current event
bool controlKeyPressed() const
check if CONTROL is pressed during current event
bool mouseLeftButtonPressed() const
check if mouse left button is pressed during current event
void moveSelection(const bool mouseLeftButtonPressed)
move selection
void calculateEdgeSelection(const GNEEdge *clickedEdge)
calculate edge selection
const GNEMoveOffset calculateMoveOffset() const
calculate move offset
bool isCurrentlyMovingMultipleElements() const
check if there are moving elements
void finishMoveSelection()
finish moving selection
bool isMovingSelection() const
check if currently there is element being moved
void resetMovingSelectedEdge()
reset flag for moving edge
void calculateJunctionSelection()
calculate junction selection
MoveMultipleElementModul(GNEViewNet *viewNet)
constructor
bool isMovingSelectedEdge() const
flag for moving edge
const GNEMoveOffset calculateMoveOffset() const
calculate offset
MoveSingleElementModul(GNEViewNet *viewNet)
constructor
bool beginMoveSingleElementDemandMode()
begin move single element in Demand mode
void moveSingleElement(const bool mouseLeftButtonPressed)
move single element in Network AND Demand mode
GNEMoveElement * getMovedElement() const
get moved element
bool isCurrentlyMovingSingleElement() const
check if there are moving elements
bool beginMoveSingleElementNetworkMode()
begin move single element in Network mode
bool beginMoveNetworkElementShape()
begin move network elementshape
void finishMoveSingleElement()
finish moving single elements in Network AND Demand mode
void updateNetworkCheckableButtons()
update network checkable buttons
void showNetworkCheckableButtons()
show all Network Checkable Buttons
void buildNetworkCheckableButtons()
build checkable buttons
NetworkCheckableButtons(GNEViewNet *viewNet)
default constructor
void hideNetworkCheckableButtons()
hide all Network Checkable Buttons
void disableNetworkCheckableButtons()
hide all options menu checks
bool showConnections() const
check if select show connections checkbox is enabled
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool editingElevation() const
check if we're editing elevation
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
bool showDemandElements() const
check if show demand elements checkbox is enabled
bool showSubAdditionals() const
check if show sub-additionals
bool showPolygonSymbols() const
check if draw polygon symbols
bool selectEdges() const
check if select edges checkbox is enabled
bool showTAZElements() const
check if show TAZ Elements
NetworkViewOptions(GNEViewNet *viewNet)
default constructor
void hideNetworkViewOptionsMenuChecks()
hide all options menu checks
void buildNetworkViewOptionsMenuChecks()
build menu checks
SaveElements(GNEViewNet *viewNet)
default constructor
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void buildSaveElementsButtons()
build save buttons
void finishRectangleSelection()
finish rectangle selection
void drawRectangleSelection(const RGBColor &color) const
draw rectangle selection
void beginRectangleSelection()
begin rectangle selection
void moveRectangleSelection()
move rectangle selection
void processBoundarySelection(const Boundary &boundary)
Process boundary Selection.
void processRectangleSelection()
process rectangle Selection
std::vector< GNEEdge * > processEdgeRectangleSelection()
process rectangle Selection (only limited to Edges)
SelectingArea(GNEViewNet *viewNet)
default constructor
void drawTestingElements(GUIMainWindow *mainWindow)
draw testing element
TestingMode(GNEViewNet *viewNet)
default constructor
void initTestingMode()
init testing mode
void buildTimeFormatButtons()
build time format buttons
TimeFormat(GNEViewNet *viewNet)
default constructor
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label
void buildVehicleOptionsMenuChecks()
build menu checks
VehicleOptions(GNEViewNet *viewNet)
constructor
void hideVehicleOptionsMenuChecks()
hide all options menu checks
VehicleTypeOptions(GNEViewNet *viewNet)
constructor
void buildVehicleTypeOptionsMenuChecks()
build menu checks
void hideVehicleTypeOptionsMenuChecks()
hide all options menu checks
static std::vector< RGBColor > myRainbowScaledColors
scale (rainbow) colors
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color
static std::vector< GUIGlObject * > filterElementsByLayer(const std::vector< GUIGlObject * > &GLObjects)
filter elements based on the layer
static const std::vector< RGBColor > & getRainbowScaledColors()
get scaled rainbow colors