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-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
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_EMBEDDED)) {
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
335void
339
340
341void
343 if (myMarkedACs.size() > 0) {
344 auto it = myMarkedACs.find(AC);
345 if (it != myMarkedACs.end()) {
346 myMarkedACs.erase(it);
347 }
348 }
349}
350
351
352void
354 // make a copy because container is modified in every iteration
355 const auto copy = myMarkedACs;
356 for (auto& AC : copy) {
358 }
359}
360
361
362const std::unordered_set<GNEAttributeCarrier*>&
364 return myMarkedACs;
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 // isGLObjectLockedcheck also if we're in their correspoindient supermode
2071 if (!AC->getGUIGlObject()->isGLObjectLocked()) {
2072 const auto tagProperty = AC->getTagProperty();
2073 if (tagProperty->isNetworkElement() || tagProperty->isAdditionalElement()) {
2074 // filter edges and lanes
2075 if (((tagProperty->getTag() == SUMO_TAG_EDGE) && !selEdges) ||
2076 ((tagProperty->getTag() == SUMO_TAG_LANE) && selEdges)) {
2077 continue;
2078 } else {
2079 ACsFiltered.push_back(AC);
2080 }
2081 } else if (tagProperty->isDemandElement()) {
2082 ACsFiltered.push_back(AC);
2083 } else if (tagProperty->isGenericData()) {
2084 ACsFiltered.push_back(AC);
2085 }
2086 }
2087 }
2088 // declare two sets of attribute carriers, one for select and another for unselect
2089 std::vector<GNEAttributeCarrier*> ACToSelect;
2090 std::vector<GNEAttributeCarrier*> ACToUnselect;
2091 // reserve memory (we assume that in the worst case we're going to insert all elements of ACsInBoundaryFiltered
2092 ACToSelect.reserve(ACsFiltered.size());
2093 ACToUnselect.reserve(ACsFiltered.size());
2094 // in restrict AND replace mode all current selected attribute carriers will be unselected
2095 const auto modificationMode = myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode();
2097 // obtain selected ACs depending of current supermode
2098 const auto selectedAC = myViewNet->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(false);
2099 // add id into ACs to unselect
2100 for (const auto& AC : selectedAC) {
2101 ACToUnselect.push_back(AC);
2102 }
2103 }
2104 // iterate over AttributeCarriers obtained of boundary an place it in ACToSelect or ACToUnselect
2105 for (const auto& AC : ACsFiltered) {
2106 switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
2108 ACToUnselect.push_back(AC);
2109 break;
2111 if (std::find(ACToUnselect.begin(), ACToUnselect.end(), AC) != ACToUnselect.end()) {
2112 ACToSelect.push_back(AC);
2113 }
2114 break;
2115 default:
2116 ACToSelect.push_back(AC);
2117 break;
2118 }
2119 }
2120 // select junctions and their connections and crossings if Auto select junctions is enabled (note: only for "add mode")
2121 if (myViewNet->autoSelectNodes() && (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode() == GNESelectorFrame::ModificationMode::Operation::ADD)) {
2122 std::vector<GNEEdge*> edgesToSelect;
2123 // iterate over ACToSelect and extract edges
2124 for (const auto& AC : ACToSelect) {
2125 if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {
2126 edgesToSelect.push_back(dynamic_cast<GNEEdge*>(AC));
2127 }
2128 }
2129 // iterate over extracted edges
2130 for (const auto& edge : edgesToSelect) {
2131 // select junction source and all their connections and crossings
2132 ACToSelect.push_back(edge->getFromJunction());
2133 for (const auto& connection : edge->getFromJunction()->getGNEConnections()) {
2134 ACToSelect.push_back(connection);
2135 }
2136 for (const auto& crossing : edge->getFromJunction()->getGNECrossings()) {
2137 ACToSelect.push_back(crossing);
2138 }
2139 // select junction destination and all their connections crossings
2140 ACToSelect.push_back(edge->getToJunction());
2141 for (const auto& connection : edge->getToJunction()->getGNEConnections()) {
2142 ACToSelect.push_back(connection);
2143 }
2144 for (const auto& crossing : edge->getToJunction()->getGNECrossings()) {
2145 ACToSelect.push_back(crossing);
2146 }
2147 }
2148 }
2149 // only continue if there is ACs to select or unselect
2150 if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
2151 // first unselect AC of ACToUnselect and then selects AC of ACToSelect
2152 myViewNet->myUndoList->begin(GUIIcon::MODESELECT, TL("selection using rectangle"));
2153 for (const auto& AC : ACToUnselect) {
2154 AC->setAttribute(GNE_ATTR_SELECTED, "0", myViewNet->myUndoList);
2155 }
2156 for (const auto& AC : ACToSelect) {
2157 if (AC->getTagProperty()->isSelectable()) {
2158 AC->setAttribute(GNE_ATTR_SELECTED, "1", myViewNet->myUndoList);
2159 }
2160 }
2161 myViewNet->myUndoList->end();
2162 }
2163 myViewNet->makeNonCurrent();
2164}
2165
2166// ---------------------------------------------------------------------------
2167// GNEViewNetHelper::TestingMode - methods
2168// ---------------------------------------------------------------------------
2169
2171 myViewNet(viewNet) {
2172}
2173
2174
2175void
2177 // first check if testing mode is enabled and window size is correct
2178 if (OptionsCont::getOptions().getBool("gui-testing") && OptionsCont::getOptions().isSet("window-size")) {
2179 std::vector<std::string> windowSize = OptionsCont::getOptions().getStringVector("window-size");
2180 // make sure that given windows size has exactly two valid int values
2181 if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
2182 myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
2183 myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
2184 } else {
2185 WRITE_ERRORF(TL("Invalid windows size-format: %for option 'window-size'"), toString(windowSize));
2186 }
2187 }
2188}
2189
2190
2191void
2193 // first check if testing mode is enabled
2194 if (OptionsCont::getOptions().getBool("gui-testing")) {
2195 // check if main windows has to be resized
2196 if (myTestingWidth > 0) {
2197 mainWindow->resize(myTestingWidth, myTestingHeight);
2198 }
2199 //std::cout << " fixed: view=" << getWidth() << ", " << getHeight() << " app=" << mainWindow->getWidth() << ", " << mainWindow->getHeight() << "\n";
2200 // draw pink square in the upper left corner on top of everything
2201 const double size = myViewNet->p2m(32);
2202 Position center = myViewNet->screenPos2NetPos(8, 8);
2203 // magenta
2206 glTranslated(center.x(), center.y(), GLO_TESTELEMENT);
2207 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2208 glBegin(GL_QUADS);
2209 glVertex2d(0, 0);
2210 glVertex2d(0, -size);
2211 glVertex2d(size, -size);
2212 glVertex2d(size, 0);
2213 glEnd();
2215 // blue
2218 glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 1);
2219 glScaled(0.7, 0.7, 0);
2220 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2221 glBegin(GL_QUADS);
2222 glVertex2d(0, 0);
2223 glVertex2d(0, -size);
2224 glVertex2d(size, -size);
2225 glVertex2d(size, 0);
2226 glEnd();
2228 // yellow
2231 glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 2);
2232 glScaled(0.4, 0.4, 0);
2233 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
2234 glBegin(GL_QUADS);
2235 glVertex2d(0, 0);
2236 glVertex2d(0, -size);
2237 glVertex2d(size, -size);
2238 glVertex2d(size, 0);
2239 glEnd();
2241 }
2242}
2243
2244// ---------------------------------------------------------------------------
2245// GNEViewNetHelper::SaveElements - methods
2246// ---------------------------------------------------------------------------
2247
2249 myViewNet(viewNet) {
2250}
2251
2252
2254 delete mySaveIndividualFilesPopup;
2255}
2256
2257
2258void
2260 // get save element grip
2261 auto gripSaveElements = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements;
2262 // get tooltip menu
2263 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2264 // create save sumo config button
2265 mySaveNeteditConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2266 std::string("\t") + TL("Save Netedit Config") + std::string("\t") + TL("Save Netedit Config. (Ctrl+Shift+E)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG),
2267 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG, GUIDesignButtonToolbar);
2268 mySaveNeteditConfig->create();
2269 // create save sumo config button
2270 mySaveSumoConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2271 std::string("\t") + TL("Save Sumo Config") + std::string("\t") + TL("Save Sumo Config. (Ctrl+Shift+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG),
2272 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG, GUIDesignButtonToolbar);
2273 mySaveSumoConfig->create();
2274 // create save network button
2275 mySaveNetwork = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
2276 std::string("\t") + TL("Save network") + std::string("\t") + TL("Save network. (Ctrl+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS),
2277 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK, GUIDesignButtonToolbar);
2278 mySaveNetwork->create();
2279 // create popup for save individual files
2280 mySaveIndividualFilesPopup = new FXPopup(gripSaveElements, POPUP_VERTICAL);
2281 mySaveIndividualFilesPopup->create();
2282 // create save individual files button
2283 mySaveIndividualFiles = new MFXMenuButtonTooltip(gripSaveElements, tooltipMenu,
2284 std::string("\t") + TL("Save individual files") + std::string("\t") + TL("Save individual files."),
2285 GUIIconSubSys::getIcon(GUIIcon::SAVE_MULTIPLE), mySaveIndividualFilesPopup, nullptr, GUIDesignButtonToolbarLocator);
2286 mySaveIndividualFiles->create();
2287 // create save additional elements button
2288 mySaveAdditionalElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2289 std::string("\t") + TL("Save additional elements") + std::string("\t") + TL("Save additional elements. (Ctrl+Shift+A)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS),
2290 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS, GUIDesignButtonPopup);
2291 mySaveAdditionalElements->create();
2292 // create save demand elements button
2293 mySaveDemandElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2294 std::string("\t") + TL("Save demand elements") + std::string("\t") + TL("Save demand elements. (Ctrl+Shift+D)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS),
2295 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS, GUIDesignButtonPopup);
2296 mySaveDemandElements->create();
2297 // create save data elements button
2298 mySaveDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2299 std::string("\t") + TL("Save data elements") + std::string("\t") + TL("Save data elements. (Ctrl+Shift+B)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS),
2300 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS, GUIDesignButtonPopup);
2301 mySaveDataElements->create();
2302 // create save mean datas elements button
2303 mySaveMeanDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
2304 std::string("\t") + TL("Save mean data elements") + std::string("\t") + TL("Save mean data elements. (Ctrl+Shift+M)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS),
2305 myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS, GUIDesignButtonPopup);
2306 mySaveMeanDataElements->create();
2307 // recalc menu bar because there is new elements
2308 gripSaveElements->recalc();
2309 // show menu bar modes
2310 gripSaveElements->show();
2311}
2312
2313
2314void
2316 if (value) {
2317 mySaveIndividualFiles->enable();
2318 } else {
2319 mySaveIndividualFiles->disable();
2320 }
2321}
2322
2323// ---------------------------------------------------------------------------
2324// GNEViewNetHelper::TimeFormat - methods
2325// ---------------------------------------------------------------------------
2326
2328 myViewNet(viewNet) {
2329}
2330
2331
2332void
2334 // create save sumo config button
2335 mySwitchButton = new MFXButtonTooltip(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().timeSwitch,
2336 myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu(),
2337 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,
2338 myViewNet->getViewParent()->getGNEAppWindows(), MID_GNE_TOGGLE_TIMEFORMAT, GUIDesignButtonToolbar);
2339 mySwitchButton->create();
2340}
2341
2342
2343void
2353
2354
2355void
2357 if (gHumanReadableTime) {
2358 mySwitchButton->setText("H");
2359 } else {
2360 mySwitchButton->setText("S");
2361 }
2362}
2363
2364// ---------------------------------------------------------------------------
2365// GNEViewNetHelper::EditModes - methods
2366// ---------------------------------------------------------------------------
2367
2369 currentSupermode(Supermode::NETWORK),
2370 networkEditMode(NetworkEditMode::NETWORK_INSPECT),
2371 demandEditMode(DemandEditMode::DEMAND_INSPECT),
2372 dataEditMode(DataEditMode::DATA_INSPECT),
2373 myViewNet(viewNet) {
2374 auto& neteditOptions = OptionsCont::getOptions();
2375 // if new option is enabled, start in create edge mode
2376 if (neteditOptions.getBool("new")) {
2378 neteditOptions.resetWritable();
2379 neteditOptions.set("new", "false");
2380 }
2381}
2382
2383
2385 delete myNeteditViewsPopup;
2386}
2387
2388
2389void
2391 // grip supermodes
2392 auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2393 // static toolTip menu
2394 auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2395 // create network button
2396 networkButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2397 TL("Network") + std::string("\t") + TL("Edit network elements") + std::string("\t") + TL("Set mode for editing network elements. (F2)"),
2399 networkButton->create();
2400 // create demand button
2401 demandButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2402 TL("Demand") + std::string("\t") + TL("Edit traffic demand elements") + std::string("\t") + TL("Set mode for editing traffic demand. (F3)"),
2404 demandButton->create();
2405 // create data button
2406 dataButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2407 TL("Data") + std::string("\t") + TL("Edit data elements") + std::string("\t") + TL("Set mode for editing data demand. (F4)"),
2409 dataButton->create();
2410 // build the views popup
2411 myNeteditViewsPopup = new FXPopup(gripSupermodes, POPUP_VERTICAL);
2412 myNeteditViewsPopup->create();
2413 // build views button
2414 myNeteditViewsButton = new MFXMenuButtonTooltip(gripSupermodes, toolTipMenu,
2415 (std::string("\t") + TL("Change netedit view") + std::string("\t") + TL("Change netedit view.")).c_str(),
2417 myNeteditViewsButton->create();
2418 // build default view button
2419 myDefaultViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2420 (std::string("Default\t") + TL("Set default view") + std::string("\t") + TL("Set default view.")).c_str(),
2422 myDefaultViewButton->create();
2423 // build jupedsim view button
2424 myJuPedSimViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2425 (std::string("JuPedSim\t") + TL("Set JuPedSim view") + std::string("\t") + TL("Set JuPedSim view.")).c_str(),
2427 myJuPedSimViewButton->create();
2428 myNeteditViewsPopup->recalc();
2429 // set width (grip + 3 large buttons + icon button)
2430 gripSupermodes->setWidth(353);
2431 // show menu bar modes
2432 gripSupermodes->show();
2433}
2434
2435
2436void
2438 if (!force && (supermode == currentSupermode)) {
2439 myViewNet->setStatusBarText(TL("Mode already selected"));
2440 if (myViewNet->myCurrentFrame != nullptr) {
2441 myViewNet->myCurrentFrame->focusUpperElement();
2442 }
2443 } else {
2444 myViewNet->setStatusBarText("");
2445 // abort current operation
2446 myViewNet->abortOperation(false);
2447 // set super mode
2448 currentSupermode = supermode;
2449 // set supermodes
2450 if (supermode == Supermode::NETWORK) {
2451 // change buttons
2452 networkButton->setChecked(true);
2453 demandButton->setChecked(false);
2454 dataButton->setChecked(false);
2455 // show network buttons
2456 myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
2457 // hide demand buttons
2458 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2459 // hide data buttons
2460 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2461 // force update network mode
2462 setNetworkEditMode(networkEditMode, true);
2463 } else if (supermode == Supermode::DEMAND) {
2464 // change buttons
2465 networkButton->setChecked(false);
2466 demandButton->setChecked(true);
2467 dataButton->setChecked(false);
2468 // hide network buttons
2469 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2470 // show demand buttons
2471 myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
2472 // hide data buttons
2473 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2474 // force update demand mode
2475 setDemandEditMode(demandEditMode, true);
2476 // demand modes require ALWAYS a recomputing
2477 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2478 // check if update path calculator
2479 if (!myViewNet->myNet->getDemandPathManager()->getPathCalculator()->isPathCalculatorUpdated()) {
2480 // update path calculator of demand path manager
2481 myViewNet->myNet->getDemandPathManager()->getPathCalculator()->updatePathCalculator();
2482 // compute all demand elements
2483 myViewNet->myNet->computeDemandElements(myViewNet->myViewParent->getGNEAppWindows());
2484 }
2485 } else if (supermode == Supermode::DATA) {
2486 // change buttons
2487 networkButton->setChecked(false);
2488 demandButton->setChecked(false);
2489 dataButton->setChecked(true);
2490 // hide network buttons
2491 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2492 // hide demand buttons
2493 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2494 // show data buttons
2495 myViewNet->myDataCheckableButtons.showDataCheckableButtons();
2496 // force update data mode
2497 setDataEditMode(dataEditMode, true);
2498 // check if recompute
2499 if (myViewNet->getViewParent()->getGNEAppWindows()->getProcessingMenuCommands().menuCheckRecomputeDataMode->getCheck() == TRUE) {
2500 // demand modes require ALWAYS a recomputing
2501 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2502 }
2503 // reset TAZ contours (due filling)
2504 for (const auto& TAZ : myViewNet->getNet()->getAttributeCarriers()->getAdditionals().at(SUMO_TAG_TAZ)) {
2505 TAZ.second->resetAdditionalContour();
2506 }
2507 }
2508 // update buttons
2509 networkButton->update();
2510 demandButton->update();
2511 dataButton->update();
2512 // update Supermode CommandButtons in GNEAppWindows
2513 myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(currentSupermode);
2514 }
2515}
2516
2517
2518void
2520 if ((mode == networkEditMode) && !force) {
2521 myViewNet->setStatusBarText(TL("Network mode already selected"));
2522 if (myViewNet->myCurrentFrame != nullptr) {
2523 myViewNet->myCurrentFrame->focusUpperElement();
2524 }
2525 } else if (networkEditMode == NetworkEditMode::NETWORK_TLS && !myViewNet->myViewParent->getTLSEditorFrame()->isTLSSaved()) {
2526 myViewNet->setStatusBarText(TL("Save modifications in TLS before change mode"));
2527 myViewNet->myCurrentFrame->focusUpperElement();
2528 } else {
2529 myViewNet->setStatusBarText("");
2530 myViewNet->abortOperation(false);
2531 // stop editing of custom shapes
2532 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2533 // set new Network mode
2534 networkEditMode = mode;
2535 // for common modes (Inspect/Delete/Select/move) change also the other supermode
2536 if (networkEditMode == NetworkEditMode::NETWORK_INSPECT) {
2537 demandEditMode = DemandEditMode::DEMAND_INSPECT;
2538 dataEditMode = DataEditMode::DATA_INSPECT;
2539 } else if (networkEditMode == NetworkEditMode::NETWORK_DELETE) {
2540 demandEditMode = DemandEditMode::DEMAND_DELETE;
2541 dataEditMode = DataEditMode::DATA_DELETE;
2542 } else if (networkEditMode == NetworkEditMode::NETWORK_SELECT) {
2543 demandEditMode = DemandEditMode::DEMAND_SELECT;
2544 dataEditMode = DataEditMode::DATA_SELECT;
2545 } else if (networkEditMode == NetworkEditMode::NETWORK_MOVE) {
2546 demandEditMode = DemandEditMode::DEMAND_MOVE;
2547 }
2548 // certain modes require a recomputing
2549 switch (mode) {
2554 // modes which depend on computed data
2555 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2556 break;
2557 default:
2558 break;
2559 }
2560 // update cursors
2561 myViewNet->updateCursor();
2562 // update network mode specific controls
2563 myViewNet->updateNetworkModeSpecificControls();
2564 }
2565}
2566
2567
2568void
2570 if ((mode == demandEditMode) && !force) {
2571 myViewNet->setStatusBarText(TL("Demand mode already selected"));
2572 if (myViewNet->myCurrentFrame != nullptr) {
2573 myViewNet->myCurrentFrame->focusUpperElement();
2574 }
2575 } else {
2576 myViewNet->setStatusBarText("");
2577 myViewNet->abortOperation(false);
2578 // stop editing of custom shapes
2579 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2580 // set new Demand mode
2581 demandEditMode = mode;
2582 // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2583 if (demandEditMode == DemandEditMode::DEMAND_INSPECT) {
2584 networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2585 dataEditMode = DataEditMode::DATA_INSPECT;
2586 } else if (demandEditMode == DemandEditMode::DEMAND_DELETE) {
2587 networkEditMode = NetworkEditMode::NETWORK_DELETE;
2588 dataEditMode = DataEditMode::DATA_DELETE;
2589 } else if (demandEditMode == DemandEditMode::DEMAND_SELECT) {
2590 networkEditMode = NetworkEditMode::NETWORK_SELECT;
2591 dataEditMode = DataEditMode::DATA_SELECT;
2592 } else if (demandEditMode == DemandEditMode::DEMAND_MOVE) {
2593 networkEditMode = NetworkEditMode::NETWORK_MOVE;
2594 }
2595 // update cursors
2596 myViewNet->updateCursor();
2597 // update network mode specific controls
2598 myViewNet->updateDemandModeSpecificControls();
2599 }
2600}
2601
2602
2603void
2605 if ((mode == dataEditMode) && !force) {
2606 myViewNet->setStatusBarText(TL("Data mode already selected"));
2607 if (myViewNet->myCurrentFrame != nullptr) {
2608 myViewNet->myCurrentFrame->focusUpperElement();
2609 }
2610 } else {
2611 myViewNet->setStatusBarText("");
2612 myViewNet->abortOperation(false);
2613 // stop editing of custom shapes
2614 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2615 // set new Data mode
2616 dataEditMode = mode;
2617 // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2618 if (dataEditMode == DataEditMode::DATA_INSPECT) {
2619 networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2620 demandEditMode = DemandEditMode::DEMAND_INSPECT;
2621 } else if (dataEditMode == DataEditMode::DATA_DELETE) {
2622 networkEditMode = NetworkEditMode::NETWORK_DELETE;
2623 demandEditMode = DemandEditMode::DEMAND_DELETE;
2624 } else if (dataEditMode == DataEditMode::DATA_SELECT) {
2625 networkEditMode = NetworkEditMode::NETWORK_SELECT;
2626 demandEditMode = DemandEditMode::DEMAND_SELECT;
2627 }
2628 // update all datasets
2629 for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
2630 dataSet.second->updateAttributeColors();
2631 }
2632 // update cursors
2633 myViewNet->updateCursor();
2634 // update network mode specific controls
2635 myViewNet->updateDataModeSpecificControls();
2636 }
2637}
2638
2639
2640bool
2642 return (currentSupermode == Supermode::NETWORK);
2643}
2644
2645
2646bool
2648 return (currentSupermode == Supermode::DEMAND);
2649}
2650
2651
2652bool
2654 return (currentSupermode == Supermode::DATA);
2655}
2656
2657
2658void
2660 // grip supermodes
2661 auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2662 // file menu commands
2663 auto& fileMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getFileMenuCommands();
2664 // continue depending of selector
2665 if (sel == MID_GNE_VIEW_DEFAULT) {
2666 myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT));
2667 gripSupermodes->setWidth(353);
2668 // show menu commands
2669 fileMenuCommands.setDefaultView();
2670 } else if (sel == MID_GNE_VIEW_JUPEDSIM) {
2671 myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM));
2672 gripSupermodes->setWidth(250);
2673 // hide menu commands
2674 fileMenuCommands.setJuPedSimView();
2675 }
2676 // update viewNet
2677 myViewNet->viewUpdated();
2678}
2679
2680
2681bool
2683 return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT);
2684}
2685
2686
2687bool
2689 return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM);
2690}
2691
2692// ---------------------------------------------------------------------------
2693// GNEViewNetHelper::NetworkViewOptions - methods
2694// ---------------------------------------------------------------------------
2695
2699
2700
2701void
2703 // get grip modes
2704 auto gripModes = myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes;
2705 // static toolTip menu
2706 auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2707 // create menu checks
2708 menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, toolTipMenu,
2709 (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)")),
2712 menuCheckToggleGrid->setChecked(false);
2713 menuCheckToggleGrid->create();
2714
2715 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, toolTipMenu,
2716 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
2719 menuCheckToggleDrawJunctionShape->setChecked(false);
2720 menuCheckToggleDrawJunctionShape->create();
2721
2722 menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, toolTipMenu,
2723 (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.")),
2726 menuCheckDrawSpreadVehicles->setChecked(false);
2727 menuCheckDrawSpreadVehicles->create();
2728
2729 menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2730 (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
2733 menuCheckShowDemandElements->setChecked(false);
2734 menuCheckShowDemandElements->create();
2735
2736 menuCheckSelectEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2737 (std::string("\t") + TL("Clicks target lanes") + std::string("\t") + TL("Toggle whether clicking should inspect/select/delete lanes instead of edges.")),
2740 menuCheckSelectEdges->create();
2741
2742 menuCheckShowConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2743 (std::string("\t") + TL("Show connections over junctions") + std::string("\t") + TL("Toggle show connections over junctions.")),
2746 menuCheckShowConnections->setChecked(myViewNet->getVisualisationSettings().showLane2Lane);
2747 menuCheckShowConnections->create();
2748
2749 menuCheckHideConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2750 (std::string("\t") + TL("Hide connections") + std::string("\t") + TL("Toggle hide connections.")),
2753 menuCheckHideConnections->setChecked(false);
2754 menuCheckHideConnections->create();
2755
2756 menuCheckShowAdditionalSubElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2757 (std::string("\t") + TL("Show additional sub-elements") + std::string("\t") + TL("Toggle show additional sub-elements.")),
2760 menuCheckShowAdditionalSubElements->setChecked(false);
2761 menuCheckShowAdditionalSubElements->create();
2762
2763 menuCheckShowTAZElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2764 (std::string("\t") + TL("Show TAZ elements") + std::string("\t") + TL("Toggle show TAZ elements.")),
2767 menuCheckShowTAZElements->setChecked(false);
2768 menuCheckShowTAZElements->create();
2769
2770 menuCheckExtendSelection = new MFXCheckableButton(false, gripModes, toolTipMenu,
2771 (std::string("\t") + TL("Automatic select junctions") + std::string("\t") + TL("Toggle whether selecting multiple edges should automatically select their junctions.")),
2774 menuCheckExtendSelection->setChecked(true);
2775 menuCheckExtendSelection->create();
2776
2777 menuCheckChangeAllPhases = new MFXCheckableButton(false, gripModes, toolTipMenu,
2778 (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.")),
2781 menuCheckChangeAllPhases->setChecked(false);
2782 menuCheckChangeAllPhases->create();
2783
2784 menuCheckMergeAutomatically = new MFXCheckableButton(false, gripModes, toolTipMenu,
2785 (std::string("\t") + TL("Automatic merging junction") + std::string("\t") + TL("Toggle ask for confirmation before merging junction.")),
2788 menuCheckMergeAutomatically->create();
2789
2790 menuCheckChainEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2791 (std::string("\t") + TL("Edge chain mode") + std::string("\t") + TL("Create consecutive edges with a single click (hit ESC to cancel chain).")),
2794 menuCheckChainEdges->setChecked(false);
2795 menuCheckChainEdges->create();
2796
2797 menuCheckAutoOppositeEdge = new MFXCheckableButton(false, gripModes, toolTipMenu,
2798 (std::string("\t") + TL("Edge opposite direction") + std::string("\t") + TL("Automatically create an edge in the opposite direction.")),
2801 menuCheckAutoOppositeEdge->setChecked(false);
2802 menuCheckAutoOppositeEdge->create();
2803
2804 menuCheckMoveElevation = new MFXCheckableButton(false, gripModes, toolTipMenu,
2805 (std::string("\t") + TL("Move elevation") + std::string("\t") + TL("Apply mouse movement to elevation instead of x,y position.")),
2808 menuCheckMoveElevation->setChecked(false);
2809 menuCheckMoveElevation->create();
2810
2811 menuCheckShowJunctionBubble = new MFXCheckableButton(false, gripModes, toolTipMenu,
2812 (std::string("\t") + TL("Show bubbles") + std::string("\t") + TL("Toggle show bubbles over junctions shapes.")),
2815 menuCheckShowJunctionBubble->setChecked(false);
2816 menuCheckShowJunctionBubble->create();
2817
2818 // always recalc after creating new elements
2819 gripModes->recalc();
2820}
2821
2822
2823void
2825 menuCheckToggleGrid->hide();
2826 menuCheckToggleDrawJunctionShape->hide();
2827 menuCheckDrawSpreadVehicles->hide();
2828 menuCheckShowDemandElements->hide();
2829 menuCheckSelectEdges->hide();
2830 menuCheckShowConnections->hide();
2831 menuCheckHideConnections->hide();
2832 menuCheckShowAdditionalSubElements->hide();
2833 menuCheckShowTAZElements->hide();
2834 menuCheckExtendSelection->hide();
2835 menuCheckChangeAllPhases->hide();
2836 menuCheckMergeAutomatically->hide();
2837 menuCheckShowJunctionBubble->hide();
2838 menuCheckMoveElevation->hide();
2839 menuCheckChainEdges->hide();
2840 menuCheckAutoOppositeEdge->hide();
2841}
2842
2843
2844void
2845GNEViewNetHelper::NetworkViewOptions::getVisibleNetworkMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
2846 // save visible menu commands in commands vector
2847 if (menuCheckToggleGrid->shown()) {
2848 commands.push_back(menuCheckToggleGrid);
2849 }
2850 if (menuCheckToggleDrawJunctionShape->shown()) {
2851 commands.push_back(menuCheckToggleDrawJunctionShape);
2852 }
2853 if (menuCheckDrawSpreadVehicles->shown()) {
2854 commands.push_back(menuCheckDrawSpreadVehicles);
2855 }
2856 if (menuCheckShowDemandElements->shown()) {
2857 commands.push_back(menuCheckShowDemandElements);
2858 }
2859 if (menuCheckSelectEdges->shown()) {
2860 commands.push_back(menuCheckSelectEdges);
2861 }
2862 if (menuCheckShowConnections->shown()) {
2863 commands.push_back(menuCheckShowConnections);
2864 }
2865 if (menuCheckHideConnections->shown()) {
2866 commands.push_back(menuCheckHideConnections);
2867 }
2868 if (menuCheckShowAdditionalSubElements->shown()) {
2869 commands.push_back(menuCheckShowAdditionalSubElements);
2870 }
2871 if (menuCheckShowTAZElements->shown()) {
2872 commands.push_back(menuCheckShowTAZElements);
2873 }
2874 if (menuCheckExtendSelection->shown()) {
2875 commands.push_back(menuCheckExtendSelection);
2876 }
2877 if (menuCheckChangeAllPhases->shown()) {
2878 commands.push_back(menuCheckChangeAllPhases);
2879 }
2880 if (menuCheckMergeAutomatically->shown()) {
2881 commands.push_back(menuCheckMergeAutomatically);
2882 }
2883 if (menuCheckChainEdges->shown()) {
2884 commands.push_back(menuCheckChainEdges);
2885 }
2886 if (menuCheckAutoOppositeEdge->shown()) {
2887 commands.push_back(menuCheckAutoOppositeEdge);
2888 }
2889 if (menuCheckMoveElevation->shown()) {
2890 commands.push_back(menuCheckMoveElevation);
2891 }
2892 if (menuCheckShowJunctionBubble->shown()) {
2893 commands.push_back(menuCheckShowJunctionBubble);
2894 }
2895}
2896
2897
2898bool
2900 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2901}
2902
2903
2904bool
2906 if (menuCheckShowDemandElements->shown()) {
2907 return (menuCheckShowDemandElements->amChecked() == TRUE);
2908 } else {
2909 // by default, if menuCheckShowDemandElements isn't shown, always show demand elements
2910 return true;
2911 }
2912}
2913
2914
2915bool
2917 if (menuCheckSelectEdges->shown()) {
2918 return (menuCheckSelectEdges->amChecked() != TRUE);
2919 } else {
2920 // by default, if menuCheckSelectEdges isn't shown, always select edges
2921 return true;
2922 }
2923}
2924
2925
2926bool
2928 if (myViewNet->myEditModes.isCurrentSupermodeData()) {
2929 return false;
2930 } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_CONNECT) {
2931 // check if menu check hide connections ins shown
2932 return (menuCheckHideConnections->amChecked() == FALSE);
2933 } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_PROHIBITION) {
2934 return true;
2935 } else if (myViewNet->myEditModes.isCurrentSupermodeNetwork() && menuCheckShowConnections->shown() == false) {
2936 return false;
2937 } else {
2938 return (myViewNet->getVisualisationSettings().showLane2Lane);
2939 }
2940}
2941
2942
2943bool
2945 if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2946 return false;
2947 } else if (menuCheckShowAdditionalSubElements->shown() == false) {
2948 return false;
2949 } else {
2950 return menuCheckShowAdditionalSubElements->amChecked();
2951 }
2952}
2953
2954
2955bool
2957 if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2958 return false;
2959 } else if (menuCheckShowTAZElements->shown() == false) {
2960 return false;
2961 } else {
2962 return menuCheckShowTAZElements->amChecked();
2963 }
2964}
2965
2966
2967bool
2969 if (menuCheckMoveElevation->shown()) {
2970 return (menuCheckMoveElevation->amChecked() == TRUE);
2971 } else {
2972 return false;
2973 }
2974}
2975
2976// ---------------------------------------------------------------------------
2977// GNEViewNetHelper::DemandViewOptions - methods
2978// ---------------------------------------------------------------------------
2979
2981 myViewNet(viewNet) {
2982}
2983
2984
2985void
2987 // get grip modes
2988 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
2989 // get tooltip menu
2990 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2991 // create menu checks
2992 menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, tooltipMenu,
2993 (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)")),
2996 menuCheckToggleGrid->setChecked(false);
2997 menuCheckToggleGrid->create();
2998
2999 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
3000 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
3003 menuCheckToggleDrawJunctionShape->setChecked(false);
3004 menuCheckToggleDrawJunctionShape->create();
3005
3006 menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, tooltipMenu,
3007 (std::string("\t") + TL("Draw vehicles spread/depart position") + std::string("\t") + TL("Draw vehicles spread in lane or in depart position.")),
3010 menuCheckDrawSpreadVehicles->setChecked(false);
3011 menuCheckDrawSpreadVehicles->create();
3012
3013 menuCheckHideShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3014 (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
3017 menuCheckHideShapes->setChecked(false);
3018 menuCheckHideShapes->create();
3019
3020 menuCheckShowAllTrips = new MFXCheckableButton(false, gripModes, tooltipMenu,
3021 (std::string("\t") + TL("Show all trips") + std::string("\t") + TL("Toggle show all trips (requires updated demand - F5).")),
3024 menuCheckShowAllTrips->setChecked(false);
3025 menuCheckShowAllTrips->create();
3026
3027 menuCheckShowAllPersonPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
3028 (std::string("\t") + TL("Show all person plans") + std::string("\t") + TL("Toggle show all person plans.")),
3031 menuCheckShowAllPersonPlans->setChecked(false);
3032 menuCheckShowAllPersonPlans->create();
3033
3034 menuCheckLockPerson = new MFXCheckableButton(false, gripModes, tooltipMenu,
3035 (std::string("\t") + TL("Lock selected person") + std::string("\t") + TL("Toggle lock selected person.")),
3038 menuCheckLockPerson->setChecked(false);
3039 menuCheckLockPerson->create();
3040
3041 menuCheckShowAllContainerPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
3042 (std::string("\t") + TL("Show all containers plans") + std::string("\t") + TL("Toggle show all container plans.")),
3045 menuCheckShowAllContainerPlans->setChecked(false);
3046 menuCheckShowAllContainerPlans->create();
3047
3048 menuCheckLockContainer = new MFXCheckableButton(false, gripModes, tooltipMenu,
3049 (std::string("\t") + TL("Lock selected container") + std::string("\t") + TL("Toggle lock selected container.")),
3052 menuCheckLockContainer->setChecked(false);
3053 menuCheckLockContainer->create();
3054
3055 menuCheckHideNonInspectedDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
3056 (std::string("\t") + TL("Show non-inspected demand elements") + std::string("\t") + TL("Toggle show non-inspected demand elements.")),
3059 menuCheckHideNonInspectedDemandElements->setChecked(false);
3060 menuCheckHideNonInspectedDemandElements->create();
3061
3062 menuCheckShowOverlappedRoutes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3063 (std::string("\t") + TL("Show number of overlapped routes") + std::string("\t") + TL("Toggle show number of overlapped routes.")),
3066 menuCheckShowOverlappedRoutes->setChecked(false);
3067 menuCheckShowOverlappedRoutes->create();
3068
3069 // always recalc after creating new elements
3070 gripModes->recalc();
3071}
3072
3073
3074void
3076 menuCheckToggleGrid->hide();
3077 menuCheckToggleDrawJunctionShape->hide();
3078 menuCheckDrawSpreadVehicles->hide();
3079 menuCheckHideShapes->hide();
3080 menuCheckShowAllTrips->hide();
3081 menuCheckShowAllPersonPlans->hide();
3082 menuCheckLockPerson->hide();
3083 menuCheckShowAllContainerPlans->hide();
3084 menuCheckLockContainer->hide();
3085 menuCheckHideNonInspectedDemandElements->hide();
3086 menuCheckShowOverlappedRoutes->hide();
3087}
3088
3089
3090void
3091GNEViewNetHelper::DemandViewOptions::getVisibleDemandMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
3092 // save visible menu commands in commands vector
3093 if (menuCheckToggleGrid->shown()) {
3094 commands.push_back(menuCheckToggleGrid);
3095 }
3096 if (menuCheckToggleDrawJunctionShape->shown()) {
3097 commands.push_back(menuCheckToggleDrawJunctionShape);
3098 }
3099 if (menuCheckDrawSpreadVehicles->shown()) {
3100 commands.push_back(menuCheckDrawSpreadVehicles);
3101 }
3102 if (menuCheckHideShapes->shown()) {
3103 commands.push_back(menuCheckHideShapes);
3104 }
3105 if (menuCheckShowAllTrips->shown()) {
3106 commands.push_back(menuCheckShowAllTrips);
3107 }
3108 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
3109 commands.push_back(menuCheckShowAllPersonPlans);
3110 }
3111 if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
3112 commands.push_back(menuCheckLockPerson);
3113 }
3114 if (menuCheckShowAllContainerPlans->shown() && menuCheckShowAllContainerPlans->isEnabled()) {
3115 commands.push_back(menuCheckShowAllContainerPlans);
3116 }
3117 if (menuCheckLockContainer->shown() && menuCheckLockContainer->isEnabled()) {
3118 commands.push_back(menuCheckLockContainer);
3119 }
3120 if (menuCheckHideNonInspectedDemandElements->shown()) {
3121 commands.push_back(menuCheckHideNonInspectedDemandElements);
3122 }
3123 if (menuCheckShowOverlappedRoutes->shown()) {
3124 commands.push_back(menuCheckShowOverlappedRoutes);
3125 }
3126}
3127
3128
3129bool
3131 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
3132}
3133
3134
3135bool
3137 if (menuCheckHideNonInspectedDemandElements->shown()) {
3138 const auto& inspectedElements = myViewNet->getInspectedElements();
3139 // check conditions
3140 if ((menuCheckHideNonInspectedDemandElements->amChecked() == FALSE) || (inspectedElements.getFirstAC() == nullptr)) {
3141 // if checkbox is disabled or there isn't an inspected element, then return true
3142 return true;
3143 } else if (inspectedElements.getFirstAC() && inspectedElements.getFirstAC()->getTagProperty()->isDemandElement()) {
3144 if (inspectedElements.isACInspected(demandElement)) {
3145 // if inspected element correspond to demandElement, return true
3146 return true;
3147 } else {
3148 // if demandElement is a route, check if dottedAC is one of their children (Vehicle or Stop)
3149 for (const auto& demandElementChild : demandElement->getChildDemandElements()) {
3150 if (inspectedElements.isACInspected(demandElementChild)) {
3151 return true;
3152 }
3153 }
3154 // if demandElement is a vehicle, check if dottedAC is one of his route Parent
3155 for (const auto& demandElementParent : demandElement->getParentDemandElements()) {
3156 if (inspectedElements.isACInspected(demandElementParent)) {
3157 return true;
3158 }
3159 }
3160 // dottedAC isn't one of their parent, then return false
3161 return false;
3162 }
3163 } else {
3164 // we're inspecting a demand element, then return true
3165 return true;
3166 }
3167 } else {
3168 // we're inspecting a demand element, then return true
3169 return true;
3170 }
3171}
3172
3173
3174bool
3176 if (menuCheckHideShapes->shown()) {
3177 return (menuCheckHideShapes->amChecked() == FALSE);
3178 } else {
3179 return true;
3180 }
3181}
3182
3183
3184bool
3186 return (menuCheckShowAllTrips->amChecked() == TRUE);
3187}
3188
3189
3190bool
3192 if (menuCheckShowAllPersonPlans->isEnabled()) {
3193 return (menuCheckShowAllPersonPlans->amChecked() == TRUE);
3194 } else {
3195 return false;
3196 }
3197}
3198
3199
3200void
3202 myLockedPerson = person;
3203}
3204
3205
3206void
3208 myLockedPerson = nullptr;
3209}
3210
3211
3212const GNEDemandElement*
3214 return myLockedPerson;
3215}
3216
3217
3218bool
3220 if (menuCheckShowAllContainerPlans->isEnabled()) {
3221 return (menuCheckShowAllContainerPlans->amChecked() == TRUE);
3222 } else {
3223 return false;
3224 }
3225}
3226
3227
3228void
3230 myLockedContainer = container;
3231}
3232
3233
3234void
3236 myLockedContainer = nullptr;
3237}
3238
3239
3240bool
3242 if (menuCheckShowOverlappedRoutes->isEnabled()) {
3243 return (menuCheckShowOverlappedRoutes->amChecked() == TRUE);
3244 } else {
3245 return false;
3246 }
3247}
3248
3249
3250const GNEDemandElement*
3252 return myLockedContainer;
3253}
3254
3255// ---------------------------------------------------------------------------
3256// GNEViewNetHelper::DataViewOptions - methods
3257// ---------------------------------------------------------------------------
3258
3260 myViewNet(viewNet) {
3261}
3262
3263
3264void
3266 // get grip modes
3267 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3268 // get tooltip menu
3269 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3270 // create menu checks
3271 menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
3272 (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
3275 menuCheckToggleDrawJunctionShape->setChecked(false);
3276 menuCheckToggleDrawJunctionShape->create();
3277
3278 menuCheckShowAdditionals = new MFXCheckableButton(false, gripModes, tooltipMenu,
3279 (std::string("\t") + TL("Show additionals") + std::string("\t") + TL("Toggle show additionals.")),
3282 menuCheckShowAdditionals->create();
3283
3284 menuCheckShowShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
3285 (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
3288 menuCheckShowShapes->create();
3289
3290 menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
3291 (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
3294 menuCheckShowDemandElements->create();
3295
3296 menuCheckToggleTAZRelDrawing = new MFXCheckableButton(false, gripModes, tooltipMenu,
3297 (std::string("\t") + TL("Draw TAZREL drawing mode") + std::string("\t") + TL("Toggle draw TAZREL drawing mode.")),
3300 menuCheckToggleTAZRelDrawing->create();
3301
3302 menuCheckToggleTAZDrawFill = new MFXCheckableButton(false, gripModes, tooltipMenu,
3303 (std::string("\t") + TL("Toggle draw TAZ fill") + std::string("\t") + TL("Toggle draw TAZ fill")),
3306 menuCheckToggleTAZDrawFill->create();
3307
3308 menuCheckToggleTAZRelOnlyFrom = new MFXCheckableButton(false, gripModes, tooltipMenu,
3309 (std::string("\t") + TL("Toggle draw TAZRel only from") + std::string("\t") + TL("Toggle draw TAZRel only from")),
3312 menuCheckToggleTAZRelOnlyFrom->create();
3313
3314 menuCheckToggleTAZRelOnlyTo = new MFXCheckableButton(false, gripModes, tooltipMenu,
3315 (std::string("\t") + TL("Toggle draw TAZRel only to") + std::string("\t") + TL("Toggle draw TAZRel only to")),
3318 menuCheckToggleTAZRelOnlyTo->create();
3319
3320 // always recalc after creating new elements
3321 gripModes->recalc();
3322}
3323
3324
3325void
3327 menuCheckToggleDrawJunctionShape->hide();
3328 menuCheckShowAdditionals->hide();
3329 menuCheckShowShapes->hide();
3330 menuCheckShowDemandElements->hide();
3331 menuCheckToggleTAZRelDrawing->hide();
3332 menuCheckToggleTAZDrawFill->hide();
3333 menuCheckToggleTAZRelOnlyFrom->hide();
3334 menuCheckToggleTAZRelOnlyTo->hide();
3335}
3336
3337
3338void
3339GNEViewNetHelper::DataViewOptions::getVisibleDataMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
3340 // save visible menu commands in commands vector
3341 if (menuCheckToggleDrawJunctionShape->shown()) {
3342 commands.push_back(menuCheckToggleDrawJunctionShape);
3343 }
3344 if (menuCheckShowAdditionals->shown()) {
3345 commands.push_back(menuCheckShowAdditionals);
3346 }
3347 if (menuCheckShowShapes->shown()) {
3348 commands.push_back(menuCheckShowShapes);
3349 }
3350 if (menuCheckShowDemandElements->shown()) {
3351 commands.push_back(menuCheckShowDemandElements);
3352 }
3353 if (menuCheckToggleTAZRelDrawing->shown()) {
3354 commands.push_back(menuCheckToggleTAZRelDrawing);
3355 }
3356 if (menuCheckToggleTAZDrawFill->shown()) {
3357 commands.push_back(menuCheckToggleTAZDrawFill);
3358 }
3359 if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3360 commands.push_back(menuCheckToggleTAZRelOnlyFrom);
3361 }
3362 if (menuCheckToggleTAZRelOnlyTo->shown()) {
3363 commands.push_back(menuCheckToggleTAZRelOnlyTo);
3364 }
3365}
3366
3367
3368bool
3370 if (menuCheckShowAdditionals->shown()) {
3371 return (menuCheckShowAdditionals->amChecked() == TRUE);
3372 } else {
3373 return true;
3374 }
3375}
3376
3377
3378bool
3380 if (menuCheckShowShapes->shown()) {
3381 return (menuCheckShowShapes->amChecked() == TRUE);
3382 } else {
3383 return true;
3384 }
3385}
3386
3387
3388bool
3390 if (menuCheckShowDemandElements->shown()) {
3391 return (menuCheckShowDemandElements->amChecked() == TRUE);
3392 } else {
3393 return true;
3394 }
3395}
3396
3397
3398bool
3400 return (menuCheckToggleTAZRelDrawing->amChecked() != TRUE);
3401}
3402
3403
3404bool
3406 if (menuCheckToggleTAZDrawFill->shown()) {
3407 return (menuCheckToggleTAZDrawFill->amChecked() != TRUE);
3408 } else {
3409 return false;
3410 }
3411}
3412
3413
3414bool
3416 if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3417 return (menuCheckToggleTAZRelOnlyFrom->amChecked() != TRUE);
3418 } else {
3419 return false;
3420 }
3421}
3422
3423
3424bool
3426 if (menuCheckToggleTAZRelOnlyTo->shown()) {
3427 return (menuCheckToggleTAZRelOnlyTo->amChecked() != TRUE);
3428 } else {
3429 return false;
3430 }
3431}
3432
3433// ---------------------------------------------------------------------------
3434// GNEViewNetHelper::IntervalBar - methods
3435// ---------------------------------------------------------------------------
3436
3438 myViewNet(viewNet) {
3439}
3440
3441
3442void
3444 const auto staticTooltip = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3445 // create interval label
3446 FXLabel* genericDataLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3447 TL("Data type"), 0, GUIDesignLabelThickedFixed(100));
3448 genericDataLabel->create();
3449 // create combo box for generic datas
3450 myGenericDataTypesComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3451 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed, myViewNet,
3453 myGenericDataTypesComboBox->create();
3454 // fill combo box
3455 myGenericDataTypesComboBox->appendIconItem("<all>");
3456 myGenericDataTypesComboBox->appendIconItem(toString(GNE_TAG_EDGEREL_SINGLE).c_str());
3457 myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_EDGEREL).c_str());
3458 myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_TAZREL).c_str());
3459 // create dataSet label
3460 FXLabel* dataSetLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3461 TL("Data sets"), 0, GUIDesignLabelThickedFixed(100));
3462 dataSetLabel->create();
3463 // create combo box for sets
3464 myDataSetsComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3465 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed,
3467 myDataSetsComboBox->create();
3468 // create checkbutton for myLimitByInterval
3469 myIntervalCheckBox = new FXCheckButton(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3471 myIntervalCheckBox->create();
3472 // create textfield for begin
3473 myBeginTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3475 myBeginTextField->create();
3476 // create text field for end
3477 myEndTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3479 myEndTextField->create();
3480 // create parameter label
3481 FXLabel* parameterLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3482 TL("Parameter"), 0, GUIDesignLabelThickedFixed(100));
3483 parameterLabel->create();
3484 // create combo box for attributes
3485 myParametersComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3486 staticTooltip, false, GUIDesignComboBoxVisibleItemsFixed,
3488 myParametersComboBox->create();
3489 // always recalc after creating new elements
3490 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->recalc();
3491}
3492
3493
3494void
3496 // first update interval bar
3497 updateIntervalBar();
3498 // show toolbar grip
3499 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->show();
3500}
3501
3502
3503void
3505 // hide toolbar grip
3506 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->hide();
3507}
3508
3509
3510void
3512 // check if intervalBar has to be updated
3513 if (myUpdateInterval && myViewNet->getNet()) {
3514 // clear data sets
3515 myDataSets.clear();
3516 // declare intervals
3517 double begin = INVALID_DOUBLE;
3518 double end = INVALID_DOUBLE;
3519 // clear parameters
3520 myParameters.clear();
3521 // iterate over all data elements
3522 for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
3523 // add data set ID
3524 myDataSets.push_back(dataSet.second->getID());
3525 // iterate over all intervals
3526 for (const auto& interval : dataSet.second->getDataIntervalChildren()) {
3527 // set intervals
3528 if ((begin == INVALID_DOUBLE) || (interval.first < begin)) {
3529 begin = interval.first;
3530 }
3531 if ((end == INVALID_DOUBLE) || (interval.first > end)) {
3532 end = interval.first;
3533 }
3534 // iterate over all generic datas
3535 for (const auto& genericData : interval.second->getGenericDataChildren()) {
3536 // iterate over parameters
3537 for (const auto& parameter : genericData->getParametersMap()) {
3538 myParameters.insert(parameter.first);
3539 }
3540 }
3541 }
3542 }
3543 // get previous dataSet
3544 const std::string previousDataSet = myDataSetsComboBox->getText().text();
3545 // get previous interval
3546 const std::string previousBegin = (myIntervalCheckBox->getCheck() == TRUE) ? myBeginTextField->getText().text() : "";
3547 const std::string previousEnd = (myIntervalCheckBox->getCheck() == TRUE) ? myEndTextField->getText().text() : "";
3548 // get previous parameter
3549 const std::string previousParameter = myParametersComboBox->getText().text();
3550 // clear comboBoxes
3551 myDataSetsComboBox->clearItems();
3552 myParametersComboBox->clearItems();
3553 // add first item (all)
3554 myDataSetsComboBox->appendIconItem("<all>");
3555 myParametersComboBox->appendIconItem("<all>");
3556 // fill dataSet comboBox
3557 for (const auto& dataSet : myDataSets) {
3558 myDataSetsComboBox->appendIconItem(dataSet.c_str());
3559 }
3560 // set begin/end
3561 myBeginTextField->setText(toString(begin).c_str());
3562 myEndTextField->setText(toString(end).c_str());
3563 // fill parameter comboBox
3564 for (const auto& parameter : myParameters) {
3565 myParametersComboBox->appendIconItem(parameter.c_str());
3566 }
3567 // check previous dataSet
3568 myDataSetsComboBox->setCurrentItem(0, FALSE);
3569 for (int i = 0; i < myDataSetsComboBox->getNumItems(); i++) {
3570 if (myDataSetsComboBox->getItemText(i) == previousDataSet) {
3571 myDataSetsComboBox->setCurrentItem(i);
3572 }
3573 }
3574 // set previous interval
3575 if (myIntervalCheckBox->getCheck() == TRUE) {
3576 myBeginTextField->setText(previousBegin.c_str());
3577 myEndTextField->setText(previousEnd.c_str());
3578 }
3579 // check previous parameter
3580 myParametersComboBox->setCurrentItem(0, FALSE);
3581 for (int i = 0; i < myParametersComboBox->getNumItems(); i++) {
3582 if (myParametersComboBox->getItemText(i) == previousParameter) {
3583 myParametersComboBox->setCurrentItem(i);
3584 }
3585 }
3586 // check if enable or disable
3587 if ((myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_INSPECT) ||
3588 (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_SELECT) ||
3589 (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_DELETE)) {
3590 enableIntervalBar();
3591 } else {
3592 disableIntervalBar();
3593 }
3594 // intervalBar updated, then change flag
3595 myUpdateInterval = false;
3596 }
3597}
3598
3599
3600void
3602 myUpdateInterval = true;
3603}
3604
3605
3608 if (myGenericDataTypesComboBox->isEnabled() && (myGenericDataTypesComboBox->getTextColor() == GUIDesignTextColorBlack)) {
3609 if (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) {
3611 } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) {
3612 return SUMO_TAG_EDGEREL;
3613 } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str()) {
3614 return SUMO_TAG_TAZREL;
3615 }
3616 }
3617 return SUMO_TAG_NOTHING;
3618}
3619
3620
3623 if (!myDataSetsComboBox->isEnabled() ||
3624 (myDataSetsComboBox->getCurrentItem() == 0) ||
3625 (myDataSetsComboBox->getTextColor() == GUIDesignTextColorRed)) {
3626 return nullptr;
3627 } else {
3628 return myViewNet->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetsComboBox->getText().text());
3629 }
3630}
3631
3632
3633double
3635 if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3636 return INVALID_DOUBLE;
3637 } else {
3638 return GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
3639 }
3640}
3641
3642
3643double
3645 if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3646 return INVALID_DOUBLE;
3647 } else {
3648 return GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
3649 }
3650}
3651
3652
3653std::string
3655 if (!myParametersComboBox->isEnabled() ||
3656 (myParametersComboBox->getCurrentItem() == 0) ||
3657 (myParametersComboBox->getTextColor() == GUIDesignTextColorRed)) {
3658 return "";
3659 } else {
3660 return myParametersComboBox->getText().text();
3661 }
3662}
3663
3664
3665void
3667 if ((myGenericDataTypesComboBox->getText() == "<all>") ||
3668 (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) ||
3669 (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) ||
3670 (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str())) {
3671 myGenericDataTypesComboBox->setTextColor(GUIDesignTextColorBlack);
3672 } else {
3673 myGenericDataTypesComboBox->setTextColor(GUIDesignTextColorRed);
3674 }
3675 // update view net
3676 myViewNet->updateViewNet();
3677}
3678
3679
3680void
3682 // check if exist
3683 if (std::find(myDataSets.begin(), myDataSets.end(), myDataSetsComboBox->getText().text()) != myDataSets.end()) {
3684 myDataSetsComboBox->setTextColor(GUIDesignTextColorBlack);
3685 } else {
3686 myDataSetsComboBox->setTextColor(GUIDesignTextColorRed);
3687 }
3688 // update view net
3689 myViewNet->updateViewNet();
3690}
3691
3692
3693void
3695 // enable or disable text fields
3696 if (myIntervalCheckBox->isEnabled() && (myIntervalCheckBox->getCheck() == TRUE)) {
3697 myBeginTextField->enable();
3698 myEndTextField->enable();
3699 } else {
3700 myBeginTextField->disable();
3701 myEndTextField->disable();
3702 }
3703 // update view net
3704 myViewNet->updateViewNet();
3705}
3706
3707
3708void
3710 if (myBeginTextField->getText().empty()) {
3711 myBeginTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMinimumBegin()).c_str());
3712 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
3713 } else if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
3714 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
3715 } else {
3716 myBeginTextField->setTextColor(GUIDesignTextColorRed);
3717 }
3718 // update view net
3719 myViewNet->updateViewNet();
3720}
3721
3722
3723void
3725 if (myEndTextField->getText().empty()) {
3726 myEndTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMaximumEnd()).c_str());
3727 myEndTextField->setTextColor(GUIDesignTextColorBlack);
3728 } else if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
3729 myEndTextField->setTextColor(GUIDesignTextColorBlack);
3730 } else {
3731 myEndTextField->setTextColor(GUIDesignTextColorRed);
3732 }
3733 // update view net
3734 myViewNet->updateViewNet();
3735}
3736
3737
3738void
3740 // check if exist
3741 if (myParameters.count(myParametersComboBox->getText().text()) > 0) {
3742 myParametersComboBox->setTextColor(GUIDesignTextColorBlack);
3743 } else {
3744 myParametersComboBox->setTextColor(GUIDesignTextColorRed);
3745 }
3746 // update view net
3747 myViewNet->updateViewNet();
3748}
3749
3750
3751
3752void
3754 // enable elements
3755 myGenericDataTypesComboBox->enable();
3756 myDataSetsComboBox->enable();
3757 myIntervalCheckBox->enable();
3758 if (myIntervalCheckBox->getCheck() == TRUE) {
3759 myBeginTextField->enable();
3760 myEndTextField->enable();
3761 } else {
3762 myBeginTextField->disable();
3763 myEndTextField->disable();
3764 }
3765 myParametersComboBox->enable();
3766}
3767
3768
3769void
3771 // disable all elements
3772 myGenericDataTypesComboBox->disable();
3773 myDataSetsComboBox->disable();
3774 myIntervalCheckBox->disable();
3775 myBeginTextField->disable();
3776 myEndTextField->disable();
3777 myParametersComboBox->disable();
3778}
3779
3780// ---------------------------------------------------------------------------
3781// GNEViewNetHelper::CommonCheckableButtons - methods
3782// ---------------------------------------------------------------------------
3783
3787
3788
3789void
3791 // get grip modes
3792 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3793 // get tooltip menu
3794 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3795 // inspect button
3796 inspectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3797 std::string("\t") + TL("Inspect mode") + std::string("\t") + TL("Mode to inspect elements and change their attributes. (I)"),
3799 inspectButton->create();
3800 // delete button
3801 deleteButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3802 std::string("\t") + TL("Delete mode") + std::string("\t") + TL("Mode for deleting elements. (D)"),
3804 deleteButton->create();
3805 // select button
3806 selectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3807 std::string("\t") + TL("Select mode") + std::string("\t") + TL("Mode for selecting elements. (S)"),
3809 selectButton->create();
3810 // always recalc menu bar after creating new elements
3811 gripModes->recalc();
3812}
3813
3814
3815void
3817 inspectButton->show();
3818 deleteButton->show();
3819 selectButton->show();
3820}
3821
3822
3823void
3825 inspectButton->hide();
3826 deleteButton->hide();
3827 selectButton->hide();
3828}
3829
3830
3831void
3833 inspectButton->setChecked(false);
3834 deleteButton->setChecked(false);
3835 selectButton->setChecked(false);
3836}
3837
3838
3839void
3841 inspectButton->update();
3842 deleteButton->update();
3843 selectButton->update();
3844}
3845
3846// ---------------------------------------------------------------------------
3847// GNEViewNetHelper::NetworkCheckableButtons - methods
3848// ---------------------------------------------------------------------------
3849
3853
3854
3855void
3857 // get grip modes
3858 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3859 // get tooltip menu
3860 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3861 // move button
3862 moveNetworkElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3863 std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
3865 moveNetworkElementsButton->create();
3866 // create edge
3867 createEdgeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3868 std::string("\t") + TL("Edge mode") + std::string("\t") + TL("Mode for creating junctions and edges. (E)"),
3870 createEdgeButton->create();
3871 // traffic light mode
3872 trafficLightButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3873 std::string("\t") + TL("Traffic light mode") + std::string("\t") + TL("Mode for editing traffic lights over junctions. (T)"),
3875 trafficLightButton->create();
3876 // connection mode
3877 connectionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3878 std::string("\t") + TL("Connection mode") + std::string("\t") + TL("Mode for edit connections between lanes. (C)"),
3880 connectionButton->create();
3881 // prohibition mode
3882 prohibitionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3883 std::string("\t") + TL("Prohibition mode") + std::string("\t") + TL("Mode for editing connection prohibitions. (H)"),
3885 prohibitionButton->create();
3886 // crossing mode
3887 crossingButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3888 std::string("\t") + TL("Crossing mode") + std::string("\t") + TL("Mode for creating crossings between edges. (R)"),
3890 crossingButton->create();
3891 // additional mode
3892 additionalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3893 std::string("\t") + TL("Additional mode") + std::string("\t") + TL("Mode for creating additional elements. (A)"),
3895 additionalButton->create();
3896 // wire mode
3897 wireButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3898 std::string("\t") + TL("Wire mode") + std::string("\t") + TL("Mode for editing overhead wires. (W)"),
3900 wireButton->create();
3901 // TAZ Mode
3902 TAZButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3903 std::string("\t") + TL("TAZ mode") + std::string("\t") + TL("Mode for creating Traffic Assignment Zones. (Z)"),
3905 TAZButton->create();
3906 // shape mode
3907 shapeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3908 std::string("\t") + TL("Polygon mode") + std::string("\t") + TL("Mode for creating polygons and POIs. (P)"),
3910 shapeButton->create();
3911 // decal mode
3912 decalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3913 std::string("\t") + TL("Decal mode") + std::string("\t") + TL("Mode for editing decals. (U)"),
3915 decalButton->create();
3916 // always recalc after creating new elements
3917 gripModes->recalc();
3918}
3919
3920
3921void
3923 // continue depending of view
3924 if (myViewNet->getEditModes().isJuPedSimView()) {
3925 moveNetworkElementsButton->show();
3926 createEdgeButton->show();
3927 connectionButton->hide();
3928 trafficLightButton->hide();
3929 additionalButton->show();
3930 crossingButton->show();
3931 TAZButton->show();
3932 shapeButton->show();
3933 prohibitionButton->hide();
3934 wireButton->hide();
3935 decalButton->hide();
3936 } else {
3937 moveNetworkElementsButton->show();
3938 createEdgeButton->show();
3939 connectionButton->show();
3940 trafficLightButton->show();
3941 additionalButton->show();
3942 crossingButton->show();
3943 TAZButton->show();
3944 shapeButton->show();
3945 prohibitionButton->show();
3946 wireButton->show();
3947 decalButton->show();
3948 }
3949}
3950
3951
3952void
3954 moveNetworkElementsButton->hide();
3955 createEdgeButton->hide();
3956 connectionButton->hide();
3957 trafficLightButton->hide();
3958 additionalButton->hide();
3959 crossingButton->hide();
3960 TAZButton->hide();
3961 shapeButton->hide();
3962 prohibitionButton->hide();
3963 wireButton->hide();
3964 decalButton->hide();
3965}
3966
3967
3968void
3970 moveNetworkElementsButton->setChecked(false);
3971 createEdgeButton->setChecked(false);
3972 connectionButton->setChecked(false);
3973 trafficLightButton->setChecked(false);
3974 additionalButton->setChecked(false);
3975 crossingButton->setChecked(false);
3976 TAZButton->setChecked(false);
3977 shapeButton->setChecked(false);
3978 prohibitionButton->setChecked(false);
3979 wireButton->setChecked(false);
3980 decalButton->setChecked(false);
3981}
3982
3983
3984void
3986 moveNetworkElementsButton->update();
3987 createEdgeButton->update();
3988 connectionButton->update();
3989 trafficLightButton->update();
3990 additionalButton->update();
3991 crossingButton->update();
3992 TAZButton->update();
3993 shapeButton->update();
3994 prohibitionButton->update();
3995 wireButton->update();
3996 decalButton->update();
3997}
3998
3999// ---------------------------------------------------------------------------
4000// GNEViewNetHelper::DemandCheckableButtons - methods
4001// ---------------------------------------------------------------------------
4002
4006
4007
4008void
4010 // get grip modes
4011 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
4012 // get tooltip menu
4013 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
4014 // move button
4015 moveDemandElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4016 std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
4018 moveDemandElementsButton->create();
4019 // route mode
4020 routeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4021 std::string("\t") + TL("Route mode") + std::string("\t") + TL("Mode for creating routes. (R)"),
4023 routeButton->create();
4024 // rout distribution mode
4025 routeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4026 std::string("\t") + TL("Route distribution mode") + std::string("\t") + TL("Mode for creating and editing rout distributions. (W)"),
4028 routeDistributionButton->create();
4029 // vehicle mode
4030 vehicleButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4031 std::string("\t") + TL("Vehicle mode") + std::string("\t") + TL("Mode for creating vehicles. (V)"),
4033 vehicleButton->create();
4034 // type mode
4035 typeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4036 std::string("\t") + TL("Type mode") + std::string("\t") + TL("Mode for creating types (of vehicles, persons and containers). (T)"),
4038 typeButton->create();
4039 // type distribution mode
4040 typeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4041 std::string("\t") + TL("Type distribution mode") + std::string("\t") + TL("Mode for creating and editing type distribution. (U)"),
4043 typeDistributionButton->create();
4044 // stop mode
4045 stopButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4046 std::string("\t") + TL("Stop mode") + std::string("\t") + TL("Mode for creating stops. (A)"),
4048 stopButton->create();
4049 // person mode
4050 personButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4051 std::string("\t") + TL("Person mode") + std::string("\t") + TL("Mode for creating persons. (P)"),
4053 personButton->create();
4054 // person plan mode
4055 personPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4056 std::string("\t") + TL("Person plan mode") + std::string("\t") + TL("Mode for creating person plans. (L)"),
4058 personPlanButton->create();
4059 // container mode
4060 containerButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4061 std::string("\t") + TL("Container mode") + std::string("\t") + TL("Mode for creating containers. (C)"),
4063 containerButton->create();
4064 // container plan mode
4065 containerPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4066 std::string("\t") + TL("Container plan mode") + std::string("\t") + TL("Mode for creating container plans. (H)"),
4068 containerPlanButton->create();
4069 // always recalc after creating new elements
4070 gripModes->recalc();
4071}
4072
4073
4074void
4076 if (myViewNet->getEditModes().isJuPedSimView()) {
4077 moveDemandElementsButton->hide();
4078 routeButton->show();
4079 routeDistributionButton->show();
4080 vehicleButton->hide();
4081 typeButton->show();
4082 typeDistributionButton->show();
4083 stopButton->hide();
4084 personButton->show();
4085 personPlanButton->show();
4086 containerButton->hide();
4087 containerPlanButton->hide();
4088 } else {
4089 moveDemandElementsButton->show();
4090 routeButton->show();
4091 routeDistributionButton->show();
4092 vehicleButton->show();
4093 typeButton->show();
4094 typeDistributionButton->show();
4095 stopButton->show();
4096 personButton->show();
4097 personPlanButton->show();
4098 containerButton->show();
4099 containerPlanButton->show();
4100 }
4101}
4102
4103
4104void
4106 moveDemandElementsButton->hide();
4107 routeButton->hide();
4108 routeDistributionButton->hide();
4109 vehicleButton->hide();
4110 typeButton->hide();
4111 typeDistributionButton->hide();
4112 stopButton->hide();
4113 personButton->hide();
4114 personPlanButton->hide();
4115 containerButton->hide();
4116 containerPlanButton->hide();
4117}
4118
4119
4120void
4122 moveDemandElementsButton->setChecked(false);
4123 routeButton->setChecked(false);
4124 routeDistributionButton->setChecked(false);
4125 vehicleButton->setChecked(false);
4126 typeButton->setChecked(false);
4127 typeDistributionButton->setChecked(false);
4128 stopButton->setChecked(false);
4129 personButton->setChecked(false);
4130 personPlanButton->setChecked(false);
4131 containerButton->setChecked(false);
4132 containerPlanButton->setChecked(false);
4133}
4134
4135
4136void
4138 moveDemandElementsButton->update();
4139 routeButton->update();
4140 routeDistributionButton->update();
4141 vehicleButton->update();
4142 typeButton->update();
4143 typeDistributionButton->update();
4144 stopButton->update();
4145 personButton->update();
4146 personPlanButton->update();
4147 containerButton->update();
4148 containerPlanButton->update();
4149}
4150
4151// ---------------------------------------------------------------------------
4152// GNEViewNetHelper::DataCheckableButtons - methods
4153// ---------------------------------------------------------------------------
4154
4158
4159
4160void
4162 // get grip modes
4163 auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
4164 // get tooltip menu
4165 auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
4166 // edgeData mode
4167 edgeDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4168 std::string("\t") + TL("Edge data mode") + std::string("\t") + TL("Mode for creating edge datas. (E)"),
4170 edgeDataButton->create();
4171 // edgeRelData mode
4172 edgeRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4173 std::string("\t") + TL("Edge relation data mode") + std::string("\t") + TL("Mode for creating edge relation datas. (R)"),
4175 edgeRelDataButton->create();
4176 // TAZRelData mode
4177 TAZRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4178 std::string("\t") + TL("TAZ relation data mode") + std::string("\t") + TL("Mode for creating TAZ relation datas. (Z)"),
4180 TAZRelDataButton->create();
4181 // meanData button
4182 meanDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
4183 std::string("\t") + TL("MeanData mode") + std::string("\t") + TL("Mode for MeanData elements. (M)"),
4185 meanDataButton->create();
4186 // always recalc after creating new elements
4187 gripModes->recalc();
4188}
4189
4190
4191void
4193 edgeDataButton->show();
4194 edgeRelDataButton->show();
4195 TAZRelDataButton->show();
4196 meanDataButton->show();
4197}
4198
4199
4200void
4202 edgeDataButton->hide();
4203 edgeRelDataButton->hide();
4204 TAZRelDataButton->hide();
4205 meanDataButton->hide();
4206}
4207
4208
4209void
4211 edgeDataButton->setChecked(false);
4212 edgeRelDataButton->setChecked(false);
4213 TAZRelDataButton->setChecked(false);
4214 meanDataButton->setChecked(false);
4215}
4216
4217
4218void
4220 edgeDataButton->update();
4221 edgeRelDataButton->update();
4222 TAZRelDataButton->update();
4223 meanDataButton->update();
4224}
4225
4226// ---------------------------------------------------------------------------
4227// GNEViewNetHelper::EditNetworkElementShapes - methods
4228// ---------------------------------------------------------------------------
4229
4231 myViewNet(viewNet),
4232 myPreviousNetworkEditMode(NetworkEditMode::NETWORK_NONE) {
4233}
4234
4235
4236void
4238 if (element && (myEditedNetworkElement == nullptr)) {
4239 // save current edit mode before starting
4240 myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
4241 // set move mode
4242 myViewNet->myEditModes.setNetworkEditMode(NetworkEditMode::NETWORK_MOVE);
4243 //set editedNetworkElement
4244 myEditedNetworkElement = element;
4245 // enable shape edited flag
4246 myEditedNetworkElement->setShapeEdited(true);
4247 // update view net to show the new editedShapePoly
4248 myViewNet->updateViewNet();
4249 }
4250}
4251
4252
4253void
4255 // stop edit shape junction deleting editedShapePoly
4256 if (myEditedNetworkElement != nullptr) {
4257 // disable shape edited flag
4258 myEditedNetworkElement->setShapeEdited(false);
4259 // reset editedNetworkElement
4260 myEditedNetworkElement = nullptr;
4261 // restore previous edit mode
4262 if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
4263 myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
4264 }
4265 }
4266}
4267
4268
4269void
4271 // save edited junction's shape
4272 if (myEditedNetworkElement != nullptr) {
4273 // stop edit custom shape
4274 stopEditCustomShape();
4275 }
4276}
4277
4278
4281 return myEditedNetworkElement;
4282}
4283
4284// ---------------------------------------------------------------------------
4285// GNEViewNetHelper::BlockIcon - methods
4286// ---------------------------------------------------------------------------
4287
4288void
4290 const GNEAttributeCarrier* AC, GUIGlObjectType type, const Position position, const double exaggeration,
4291 const double size, const double offsetx, const double offsety) {
4292 // first check if icon can be drawn
4293 if (checkDrawing(d, AC, type, exaggeration)) {
4294 // Start pushing matrix
4296 // Traslate to position
4297 glTranslated(position.x(), position.y(), GLO_LOCKICON);
4298 // Traslate depending of the offset
4299 glTranslated(offsetx, offsety, 0);
4300 // rotate to avoid draw invert
4301 glRotated(180, 0, 0, 1);
4302 // Set draw color
4303 glColor3d(1, 1, 1);
4304 // Draw lock icon
4306 // Pop matrix
4308 }
4309}
4310
4311
4313
4314
4315bool
4317 GUIGlObjectType type, const double exaggeration) {
4318 // check detail
4320 return false;
4321 }
4322 // get view net
4323 const auto viewNet = AC->getNet()->getViewNet();
4324 // check exaggeration
4325 if (exaggeration == 0) {
4326 return false;
4327 }
4328 // check supermodes
4329 if (viewNet->getEditModes().isCurrentSupermodeNetwork() &&
4331 return false;
4332 }
4333 if (viewNet->getEditModes().isCurrentSupermodeDemand() && (!AC->getTagProperty()->isDemandElement())) {
4334 return false;
4335 }
4336 if (viewNet->getEditModes().isCurrentSupermodeData() && (!AC->getTagProperty()->isDataElement())) {
4337 return false;
4338 }
4339 // check if is locked
4340 if (!viewNet->getLockManager().isObjectLocked(type, AC->isAttributeCarrierSelected())) {
4341 return false;
4342 }
4343 // all ok, then draw
4344 return true;
4345}
4346
4347// ---------------------------------------------------------------------------
4348// GNEViewNetHelper - methods
4349// ---------------------------------------------------------------------------
4350
4351const std::vector<RGBColor>&
4353 // if is empty, fill it
4354 if (myRainbowScaledColors.empty()) {
4355 // fill scale colors (10)
4356 myRainbowScaledColors.push_back(RGBColor(232, 35, 0, 255));
4357 myRainbowScaledColors.push_back(RGBColor(255, 165, 0, 255));
4358 myRainbowScaledColors.push_back(RGBColor(255, 255, 0, 255));
4359 myRainbowScaledColors.push_back(RGBColor(28, 215, 0, 255));
4360 myRainbowScaledColors.push_back(RGBColor(0, 181, 100, 255));
4361 myRainbowScaledColors.push_back(RGBColor(0, 255, 191, 255));
4362 myRainbowScaledColors.push_back(RGBColor(178, 255, 255, 255));
4363 myRainbowScaledColors.push_back(RGBColor(0, 112, 184, 255));
4364 myRainbowScaledColors.push_back(RGBColor(56, 41, 131, 255));
4365 myRainbowScaledColors.push_back(RGBColor(127, 0, 255, 255));
4366 }
4367 return myRainbowScaledColors;
4368}
4369
4370
4371const RGBColor&
4372GNEViewNetHelper::getRainbowScaledColor(const double min, const double max, const double value) {
4373 // check extremes
4374 if (value <= min) {
4375 return getRainbowScaledColors().front();
4376 } else if (value >= max) {
4377 return getRainbowScaledColors().back();
4378 } else {
4379 // calculate value procent between [min, max]
4380 const double procent = ((value - min) * 100) / (max - min);
4381 // check if is valid
4382 if (procent <= 0) {
4383 return getRainbowScaledColors().front();
4384 } else if (procent >= 100) {
4385 return getRainbowScaledColors().back();
4386 } else {
4387 // return scaled color
4388 return getRainbowScaledColors().at((int)(procent / 10.0));
4389 }
4390 }
4391}
4392
4393
4394std::vector<GUIGlObject*>
4395GNEViewNetHelper::filterElementsByLayer(const std::vector<GUIGlObject*>& GLObjects) {
4396 std::vector<GUIGlObject*> filteredGLObjects;
4397 if (GLObjects.size() > 0) {
4398 const auto firstLayer = GLObjects.front()->getType();
4399 for (const auto& GLObject : GLObjects) {
4400 if ((GLO_RIDE <= firstLayer) && (firstLayer <= GLO_TRANSHIP) &&
4401 (GLO_RIDE <= GLObject->getType()) && (GLObject->getType() <= GLO_TRANSHIP)) {
4402 filteredGLObjects.push_back(GLObject);
4403 } else if ((GLO_STOP <= firstLayer) && (firstLayer <= GLO_STOP_PLAN) &&
4404 (GLO_STOP <= GLObject->getType()) && (GLObject->getType() <= GLO_STOP_PLAN)) {
4405 filteredGLObjects.push_back(GLObject);
4406 } else if ((GLO_VEHICLE <= firstLayer) && (firstLayer <= GLO_ROUTEFLOW) &&
4407 (GLO_VEHICLE <= GLObject->getType()) && (GLObject->getType() <= GLO_ROUTEFLOW)) {
4408 filteredGLObjects.push_back(GLObject);
4409 } else if ((GLO_PERSON <= firstLayer) && (firstLayer <= GLO_PERSONFLOW) &&
4410 (GLO_PERSON <= GLObject->getType()) && (GLObject->getType() <= GLO_PERSONFLOW)) {
4411 filteredGLObjects.push_back(GLObject);
4412 } else if ((GLO_CONTAINER <= firstLayer) && (firstLayer <= GLO_CONTAINERFLOW) &&
4413 (GLO_CONTAINER <= GLObject->getType()) && (GLObject->getType() <= GLO_CONTAINERFLOW)) {
4414 filteredGLObjects.push_back(GLObject);
4415 } else if (GLObject->getType() == firstLayer) {
4416 filteredGLObjects.push_back(GLObject);
4417 }
4418 }
4419 }
4420 return filteredGLObjects;
4421}
4422
4423/****************************************************************************/
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:849
@ 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:933
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:957
@ 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:823
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:845
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:831
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:829
@ MID_GNE_INTERVALBAR_BEGIN
begin changed in InterbalBar
Definition GUIAppEnum.h:977
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:963
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:949
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:835
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:935
@ 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:923
@ 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:803
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:921
@ 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:847
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:955
@ 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:929
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:951
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:843
@ MID_GNE_INTERVALBAR_END
end changed in InterbalBar
Definition GUIAppEnum.h:979
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:837
@ 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:833
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:937
@ MID_GNE_VIEW_DEFAULT
set default view
Definition GUIAppEnum.h:785
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:238
@ MID_GNE_VIEW_JUPEDSIM
set juPedSim view
Definition GUIAppEnum.h:787
@ MID_GNE_INTERVALBAR_PARAMETER
parameter changed in InterbalBar
Definition GUIAppEnum.h:981
@ 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:959
@ 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_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:825
@ 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:927
@ MID_GNE_INTERVALBAR_GENERICDATATYPE
generic data selected
Definition GUIAppEnum.h:971
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:841
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:839
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:953
@ 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:961
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:821
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:925
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:941
@ 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:973
@ 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:939
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:827
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:931
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:819
@ MID_GNE_INTERVALBAR_LIMITED
enable/disable show data elements by interval
Definition GUIAppEnum.h:975
@ 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_ROUTE_EMBEDDED
a route
@ 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_LOCKICON
Lock icon (used in netedit)
GUIViewObjectsHandler gViewObjectsHandler
@ DATAMODE_CHECKBOX_SHOWADDITIONALS
@ SAVE_NETEDITCONFIG
@ SAVE_DATAELEMENTS
@ NETWORKMODE_CHECKBOX_BUBBLES
@ SAVE_NETWORKELEMENTS
@ DATAMODE_CHECKBOX_TAZRELONLYFROM
@ MODEPERSONPLAN
@ 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:46
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition Boundary.cpp: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:1725
NBEdge * getNBEdge() const
returns the internal NBEdge
Definition GNEEdge.cpp:753
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:144
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2193
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:190
static const RGBColor YELLOW
Definition RGBColor.h:191
static const RGBColor MAGENTA
Definition RGBColor.h:193
#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 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