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