Eclipse SUMO - Simulation of Urban MObility
GUIVisualizationSettings.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2022 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 /****************************************************************************/
20 // Stores the information about how to visualize structures
21 /****************************************************************************/
22 #include <config.h>
23 
24 #include <map>
25 #include <vector>
27 
29 #include "GUIPropertyScheme.h"
30 
31 // ===========================================================================
32 // static members
33 // ===========================================================================
34 
36 
37 // -------------------------------------------------------------------------
38 // color constants for link states
39 // -------------------------------------------------------------------------
40 
43 const RGBColor SUMO_color_TL_RED(255, 0, 0);
44 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
49 const RGBColor SUMO_color_MAJOR(255, 255, 255);
50 const RGBColor SUMO_color_MINOR(51, 51, 51);
51 const RGBColor SUMO_color_EQUAL(128, 128, 128);
52 const RGBColor SUMO_color_STOP(128, 0, 128);
54 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
56 
57 // -------------------------------------------------------------------------
58 // color constants for other objects
59 // -------------------------------------------------------------------------
60 
67 
68 
69 // -------------------------------------------------------------------------
70 // color constants for other objects
71 // -------------------------------------------------------------------------
72 
74 const RGBColor GUIVisualizationCandidateColorSettings::source(0, 255, 255, 255); // Cyan
75 const RGBColor GUIVisualizationCandidateColorSettings::target(0, 255, 0, 255); // Green
76 const RGBColor GUIVisualizationCandidateColorSettings::special(255, 0, 255, 255); // Magenta
77 const RGBColor GUIVisualizationCandidateColorSettings::conflict(255, 255, 0, 255); // Yellow
78 
79 // -------------------------------------------------------------------------
80 // Netedit size values
81 // -------------------------------------------------------------------------
82 
93 
94 // -------------------------------------------------------------------------
95 // additional values
96 // -------------------------------------------------------------------------
97 
99 
100 // -------------------------------------------------------------------------
101 // additional values
102 // -------------------------------------------------------------------------
103 
120 
121 // -------------------------------------------------------------------------
122 // detector values
123 // -------------------------------------------------------------------------
124 
138 
139 // -------------------------------------------------------------------------
140 // StoppingPlace values
141 // -------------------------------------------------------------------------
142 
148 
149 // -------------------------------------------------------------------------
150 // Dotted contour values
151 // -------------------------------------------------------------------------
152 
159 
160 // -------------------------------------------------------------------------
161 // widths of certain NETEDIT objects
162 // -------------------------------------------------------------------------
163 
166 
167 // -------------------------------------------------------------------------
168 // details of certain NETEDIT objects (0 = drawn always)
169 // -------------------------------------------------------------------------
170 
172 const double GUIVisualizationDetailSettings::laneTextures(20); // originally 10
174 const double GUIVisualizationDetailSettings::additionalTextures(20); // originally 10
191 
192 // -------------------------------------------------------------------------
193 // scheme names
194 // -------------------------------------------------------------------------
195 
196 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL("by param (numerical, streetwise)");
197 const std::string GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL("by param (numerical, lanewise)");
198 const std::string GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL("by param (numerical)");
199 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL("by edgeData (numerical, streetwise)");
200 const std::string GUIVisualizationSettings::SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL("by attribute (numerical)");
201 const std::string GUIVisualizationSettings::SCHEME_NAME_SELECTION("by selection");
202 const std::string GUIVisualizationSettings::SCHEME_NAME_TYPE("by type");
203 const std::string GUIVisualizationSettings::SCHEME_NAME_PERMISSION_CODE("by permission code");
204 
205 const double GUIVisualizationSettings::MISSING_DATA(std::numeric_limits<double>::max());
206 
207 // color constants for scheme background
208 #define COL_SCHEME_EMISSION RGBColor(255,255,210)
209 #define COL_SCHEME_MISC RGBColor(210,220,255)
210 #define COL_SCHEME_STATIC RGBColor(230,230,230)
211 #define COL_SCHEME_DYNAMIC RGBColor(220,255,220)
212 
213 // ===========================================================================
214 // member method definitions
215 // ===========================================================================
216 
217 // ---------------------------------------------------------------------------
218 // GUIVisualizationTextSettings - methods
219 // ---------------------------------------------------------------------------
220 
221 GUIVisualizationTextSettings::GUIVisualizationTextSettings(bool _showText, double _size, RGBColor _color, RGBColor _bgColor, bool _constSize, bool _onlySelected) :
222  showText(_showText),
223  size(_size),
224  color(_color),
225  bgColor(_bgColor),
226  constSize(_constSize),
227  onlySelected(_onlySelected) {
228 }
229 
230 
231 bool
233  return (showText == other.showText) &&
234  (size == other.size) &&
235  (color == other.color) &&
236  (bgColor == other.bgColor) &&
237  (constSize == other.constSize) &&
238  (onlySelected == other.onlySelected);
239 }
240 
241 
242 bool
244  return (showText != other.showText) ||
245  (size != other.size) ||
246  (color != other.color) ||
247  (bgColor != other.bgColor) ||
248  (constSize != other.constSize) ||
249  (onlySelected != other.onlySelected);
250 }
251 
252 
253 void
254 GUIVisualizationTextSettings::print(OutputDevice& dev, const std::string& name) const {
255  dev.writeAttr(name + "_show", showText);
256  dev.writeAttr(name + "_size", size);
257  dev.writeAttr(name + "_color", color);
258  dev.writeAttr(name + "_bgColor", bgColor);
259  dev.writeAttr(name + "_constantSize", constSize);
260  dev.writeAttr(name + "_onlySelected", onlySelected);
261 }
262 
263 
264 double
265 GUIVisualizationTextSettings::scaledSize(double scale, double constFactor) const {
266  return constSize ? (size / scale) : (size * constFactor);
267 }
268 
269 
270 bool
272  return showText && (!onlySelected || o == nullptr || gSelected.isSelected(o));
273 }
274 
275 // ---------------------------------------------------------------------------
276 // GUIVisualizationSizeSettings - methods
277 // ---------------------------------------------------------------------------
278 
279 GUIVisualizationSizeSettings::GUIVisualizationSizeSettings(double _minSize, double _exaggeration, bool _constantSize, bool _constantSizeSelected) :
280  minSize(_minSize),
281  exaggeration(_exaggeration),
282  constantSize(_constantSize),
283  constantSizeSelected(_constantSizeSelected) {
284 }
285 
286 
287 double
289  // declare exaggeration final
290  double exaggerationFinal;
292  if (constantSize && (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o))) {
293  exaggerationFinal = MAX2(exaggeration, exaggeration * factor / s.scale);
294  } else if (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o)) {
295  exaggerationFinal = exaggeration;
296  } else {
297  exaggerationFinal = 1;
298  }
299  // add selectorFrameScale
300  if ((o != nullptr) && gSelected.isSelected(o)) {
301  return (exaggerationFinal * s.selectorFrameScale);
302  } else {
303  return exaggerationFinal;
304  }
305 }
306 
307 
308 bool
310  return (constantSize == other.constantSize) &&
312  (minSize == other.minSize) &&
313  (exaggeration == other.exaggeration);
314 }
315 
316 
317 bool
319  return (constantSize != other.constantSize) ||
321  (minSize != other.minSize) ||
322  (exaggeration != other.exaggeration);
323 }
324 
325 
326 void
327 GUIVisualizationSizeSettings::print(OutputDevice& dev, const std::string& name) const {
328  dev.writeAttr(name + "_minSize", minSize);
329  dev.writeAttr(name + "_exaggeration", exaggeration);
330  dev.writeAttr(name + "_constantSize", constantSize);
331  dev.writeAttr(name + "_constantSizeSelected", constantSizeSelected);
332 }
333 
334 // ---------------------------------------------------------------------------
335 // GUIVisualizationColorSettings - methods
336 // ---------------------------------------------------------------------------
337 
339  selectionColor(0, 0, 204, 255),
340  selectedEdgeColor(0, 0, 204, 255),
341  selectedLaneColor(0, 0, 128, 255),
342  selectedConnectionColor(0, 0, 100, 255),
343  selectedProhibitionColor(0, 0, 120, 255),
344  selectedCrossingColor(0, 100, 196, 255),
345  selectedAdditionalColor(0, 0, 150, 255),
346  selectedRouteColor(0, 0, 150, 255),
347  selectedVehicleColor(0, 0, 100, 255),
348  selectedPersonColor(0, 0, 120, 255),
349  selectedPersonPlanColor(0, 0, 130, 255),
350  selectedContainerColor(0, 0, 120, 255),
351  selectedContainerPlanColor(0, 0, 130, 255),
352  selectedEdgeDataColor(0, 0, 150, 255),
353  busStopColor(76, 170, 50),
354  busStopColorSign(255, 235, 0),
355  trainStopColor(76, 170, 50),
356  trainStopColorSign(255, 235, 0),
357  containerStopColor(83, 89, 172),
358  containerStopColorSign(177, 184, 186, 171),
359  chargingStationColor(114, 210, 252),
360  chargingStationColorSign(255, 235, 0),
361  chargingStationColorCharge(255, 180, 0),
362  parkingAreaColor(83, 89, 172),
363  parkingAreaColorSign(177, 184, 186),
364  parkingSpaceColorContour(0, 255, 0),
365  parkingSpaceColor(255, 200, 200),
366  stopColor(220, 20, 30),
367  vehicleTripColor(255, 128, 0),
368  stopPersonColor(255, 0, 0),
369  personTripColor(200, 0, 255),
370  walkColor(0, 255, 0),
371  rideColor(0, 0, 255),
372  stopContainerColor(255, 0, 0),
373  transportColor(100, 200, 0),
374  transhipColor(100, 0, 200) {
375 }
376 
377 
378 bool
380  return (selectionColor == v2.selectionColor) &&
393  (busStopColor == v2.busStopColor) &&
395  (trainStopColor == v2.trainStopColor) &&
406  (stopColor == v2.stopColor) &&
410  (walkColor == v2.walkColor) &&
411  (rideColor == v2.rideColor) &&
413  (transportColor == v2.transportColor) &&
415 }
416 
417 
418 bool
420  return (selectionColor != v2.selectionColor) ||
433  (busStopColor != v2.busStopColor) ||
435  (trainStopColor != v2.trainStopColor) ||
446  (stopColor != v2.stopColor) ||
450  (walkColor != v2.walkColor) ||
451  (rideColor != v2.rideColor) ||
453  (transportColor != v2.transportColor) ||
455 }
456 
457 // ---------------------------------------------------------------------------
458 // GUIVisualizationWidthSettings - methods
459 // ---------------------------------------------------------------------------
460 
462  tripWidth(0.2),
463  personTripWidth(0.25),
464  walkWidth(0.25),
465  rideWidth(0.25),
466  transportWidth(0.25),
467  transhipWidth(0.25) {
468 }
469 
470 
471 bool
473  return (tripWidth == v2.tripWidth) &&
475  (walkWidth == v2.walkWidth) &&
476  (rideWidth == v2.rideWidth) &&
477  (transportWidth == v2.transportWidth) &&
479 }
480 
481 
482 bool
484  return (tripWidth != v2.tripWidth) ||
486  (walkWidth != v2.walkWidth) ||
487  (rideWidth != v2.rideWidth) ||
488  (transportWidth != v2.transportWidth) ||
490 }
491 
492 // ---------------------------------------------------------------------------
493 // GUIVisualizationWidthSettings - methods
494 // ---------------------------------------------------------------------------
495 
497  name(""),
498  netedit(_netedit),
499  angle(0),
500  dither(false),
501  fps(false),
502  backgroundColor(RGBColor::WHITE),
503  showGrid(false), gridXSize(100), gridYSize(100),
504  laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
505  realisticLinkRules(false),
506  showLinkRules(true), showRails(true),
507  edgeName(false, 60, RGBColor(255, 128, 0, 255)),
508  internalEdgeName(false, 45, RGBColor(128, 64, 0, 255)),
509  cwaEdgeName(false, 60, RGBColor::MAGENTA),
510  streetName(false, 60, RGBColor::YELLOW),
511  edgeValue(false, 100, RGBColor::CYAN),
512  hideConnectors(false),
513  laneWidthExaggeration(1),
514  laneMinSize(0),
515  showLaneDirection(false),
516  showSublanes(true),
517  spreadSuperposed(false),
518  edgeParam("EDGE_KEY"),
519  laneParam("LANE_KEY"),
520  vehicleParam("PARAM_NUMERICAL"),
521  vehicleScaleParam("PARAM_NUMERICAL"),
522  vehicleTextParam("PARAM_TEXT"),
523  edgeData("speed"),
524  edgeValueHideCheck(false),
525  edgeValueHideThreshold(0),
526  vehicleQuality(0), showBlinker(true),
527  drawLaneChangePreference(false),
528  drawMinGap(false),
529  drawBrakeGap(false),
530  showBTRange(false),
531  showRouteIndex(false),
532  scaleLength(true),
533  showParkingInfo(false),
534  vehicleSize(1),
535  vehicleName(false, 60, RGBColor(204, 153, 0, 255)),
536  vehicleValue(false, 80, RGBColor::CYAN),
537  vehicleScaleValue(false, 80, RGBColor::GREY),
538  vehicleText(false, 80, RGBColor::RED),
539  personQuality(0),
540  personSize(1),
541  personName(false, 60, RGBColor(0, 153, 204, 255)),
542  personValue(false, 80, RGBColor::CYAN),
543  containerQuality(0),
544  containerSize(1),
545  containerName(false, 60, RGBColor(0, 153, 204, 255)),
546  drawLinkTLIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
547  drawLinkJunctionIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
548  junctionID(false, 60, RGBColor(0, 255, 128, 255)),
549  junctionName(false, 60, RGBColor(192, 255, 128, 255)),
550  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
551  tlsPhaseIndex(false, 150, RGBColor::YELLOW),
552  tlsPhaseName(false, 150, RGBColor::ORANGE),
553  showLane2Lane(false),
554  drawJunctionShape(true),
555  drawCrossingsAndWalkingareas(true),
556  junctionSize(1),
557  addMode(0),
558  addSize(1),
559  addName(false, 60, RGBColor(255, 0, 128, 255)),
560  addFullName(false, 60, RGBColor(255, 0, 128, 255)),
561  poiSize(0),
562  poiDetail(16),
563  poiName(false, 50, RGBColor(255, 0, 128, 255)),
564  poiType(false, 60, RGBColor(255, 0, 128, 255)),
565  poiText(false, 80, RGBColor(140, 0, 255, 255)),
566  poiTextParam("PARAM_TEXT"),
567  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
568  polyType(false, 60, RGBColor(255, 0, 128, 255)),
569  dataValue(false, 100, RGBColor::CYAN),
570  tazRelWidthExaggeration(1),
571  edgeRelWidthExaggeration(1),
572  relDataAttr("count"),
573  dataValueHideCheck(false),
574  dataValueHideThreshold(0),
575  showSizeLegend(true),
576  showColorLegend(false),
577  showVehicleColorLegend(false),
578  gaming(false),
579  drawBoundaries(false),
580  selectorFrameScale(1.),
581  drawForPositionSelection(false),
582  drawForRectangleSelection(false),
583  forceDrawForPositionSelection(false),
584  forceDrawForRectangleSelection(false),
585  lefthand(false),
586  disableLaneIcons(false) {
587  // init defaults depending of NETEDIT or SUMO-GUI
588  if (netedit) {
590  } else {
592  }
593 }
594 
595 
596 void
599  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true, 0);
600  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
601  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
602  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
603  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
604  scheme.addColor(RGBColor::BLACK, 5, "railway");
605  scheme.addColor(RGBColor(64, 0, 64), 6, "rails on road");
606  scheme.addColor(RGBColor(92, 92, 92), 7, "no passenger"); // paths, service roads etc
607  scheme.addColor(RGBColor::RED, 8, "closed"); // road closing
608  scheme.addColor(RGBColor::GREEN, 9, "connector"); // macro-connector
609  scheme.addColor(RGBColor::ORANGE, 10, "forbidden"); // forbidden road
610  laneColorer.addScheme(scheme);
611  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
612  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
613  laneColorer.addScheme(scheme);
614  scheme = GUIColorScheme(SCHEME_NAME_PERMISSION_CODE, RGBColor(240, 240, 240), "nobody");
615  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
616  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
617  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
618  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
619  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
620  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
621  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
622  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
623  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
624  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
625  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
626  laneColorer.addScheme(scheme);
627  // ... traffic states ...
628  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
629  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
630  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
631  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
632  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
633  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
634  laneColorer.addScheme(scheme);
635  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
636  scheme.addColor(RGBColor::GREEN, 0.25);
637  scheme.addColor(RGBColor::YELLOW, 0.5);
638  scheme.addColor(RGBColor::ORANGE, 0.75);
639  scheme.addColor(RGBColor::RED, 1.0);
640  laneColorer.addScheme(scheme);
641  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
642  scheme.addColor(RGBColor::GREEN, 0.25);
643  scheme.addColor(RGBColor::YELLOW, 0.5);
644  scheme.addColor(RGBColor::ORANGE, 0.75);
645  scheme.addColor(RGBColor::RED, 1.0);
646  laneColorer.addScheme(scheme);
647  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
648  scheme.addColor(RGBColor::CYAN, 30.);
649  scheme.addColor(RGBColor::GREEN, 100.);
650  scheme.addColor(RGBColor::YELLOW, 200.);
651  scheme.addColor(RGBColor::RED, 300.);
652  laneColorer.addScheme(scheme);
653  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
654  scheme.addColor(RGBColor::BLUE, 5.);
655  laneColorer.addScheme(scheme);
656  // ... emissions ...
657  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
658  scheme.addColor(RGBColor::CYAN, 450);
659  scheme.addColor(RGBColor::GREEN, 900);
660  scheme.addColor(RGBColor::YELLOW, 1350);
661  scheme.addColor(RGBColor::ORANGE, 1800);
662  scheme.addColor(RGBColor::RED, 2250);
663  scheme.addColor(RGBColor::MAGENTA, 3000);
664  laneColorer.addScheme(scheme);
665  scheme = GUIColorScheme("by CO emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
666  scheme.addColor(RGBColor::CYAN, 30);
667  scheme.addColor(RGBColor::GREEN, 60);
668  scheme.addColor(RGBColor::YELLOW, 90);
669  scheme.addColor(RGBColor::ORANGE, 120);
670  scheme.addColor(RGBColor::RED, 150);
671  scheme.addColor(RGBColor::MAGENTA, 200);
672  laneColorer.addScheme(scheme);
673  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
674  scheme.addColor(RGBColor::CYAN, 0.3);
675  scheme.addColor(RGBColor::GREEN, 0.5);
676  scheme.addColor(RGBColor::YELLOW, 0.8);
677  scheme.addColor(RGBColor::ORANGE, 1);
678  scheme.addColor(RGBColor::RED, 1.3);
679  scheme.addColor(RGBColor::MAGENTA, 1.6);
680  laneColorer.addScheme(scheme);
681  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
682  scheme.addColor(RGBColor::CYAN, 6);
683  scheme.addColor(RGBColor::GREEN, 12);
684  scheme.addColor(RGBColor::YELLOW, 18);
685  scheme.addColor(RGBColor::ORANGE, 24);
686  scheme.addColor(RGBColor::RED, 30);
687  scheme.addColor(RGBColor::MAGENTA, 40);
688  laneColorer.addScheme(scheme);
689  scheme = GUIColorScheme("by HC emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
690  scheme.addColor(RGBColor::CYAN, 8);
691  scheme.addColor(RGBColor::GREEN, 16);
692  scheme.addColor(RGBColor::YELLOW, 24);
693  scheme.addColor(RGBColor::ORANGE, 32);
694  scheme.addColor(RGBColor::RED, 40);
695  scheme.addColor(RGBColor::MAGENTA, 50);
696  laneColorer.addScheme(scheme);
697  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
698  scheme.addColor(RGBColor::CYAN, 0.2);
699  scheme.addColor(RGBColor::GREEN, 0.4);
700  scheme.addColor(RGBColor::YELLOW, 0.6);
701  scheme.addColor(RGBColor::ORANGE, 0.8);
702  scheme.addColor(RGBColor::RED, 1);
703  scheme.addColor(RGBColor::MAGENTA, 1.3);
704  laneColorer.addScheme(scheme);
705  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
706  scheme.addColor(RGBColor::CYAN, 1.3);
707  scheme.addColor(RGBColor::GREEN, 1.4);
708  scheme.addColor(RGBColor::YELLOW, 1.6);
709  scheme.addColor(RGBColor::ORANGE, 1.7);
710  scheme.addColor(RGBColor::RED, 1.9);
711  scheme.addColor(RGBColor::MAGENTA, 2.4);
712  laneColorer.addScheme(scheme);
713  // ... weights (experimental) ...
714  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
715  scheme.addColor(RGBColor::RED, 100.);
716  scheme.setAllowsNegativeValues(true);
717  laneColorer.addScheme(scheme);
718  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
719  scheme.addColor(RGBColor::YELLOW, 50.);
720  scheme.addColor(RGBColor::GREEN, 100.);
721  scheme.setAllowsNegativeValues(true);
722  laneColorer.addScheme(scheme);
723  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
724  scheme.addColor(RGBColor::ORANGE, 0.25);
725  scheme.addColor(RGBColor::YELLOW, 0.5);
726  scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
727  scheme.addColor(RGBColor::GREEN, 2.);
728  scheme.addColor(RGBColor::CYAN, 4.);
729  scheme.addColor(RGBColor::BLUE, 100.);
730  laneColorer.addScheme(scheme);
731  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
732  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
733  scheme.addColor(RGBColor::RED, 100.);
734  scheme.setAllowsNegativeValues(true);
735  laneColorer.addScheme(scheme);
736  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
737  scheme.addColor(RGBColor::RED, -20.);
738  scheme.addColor(RGBColor::GREEN, 20.);
739  scheme.setAllowsNegativeValues(true);
740  laneColorer.addScheme(scheme);
741  scheme = GUIColorScheme("by height at start", RGBColor::GREY);
742  scheme.addColor(RGBColor::BLUE, -10.);
743  scheme.addColor(RGBColor::RED, 10.);
744  scheme.addColor(RGBColor::YELLOW, 50.);
745  scheme.addColor(RGBColor::GREEN, 100.);
746  scheme.addColor(RGBColor::MAGENTA, 200.);
747  scheme.setAllowsNegativeValues(true);
748  laneColorer.addScheme(scheme);
749  scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::GREY);
750  scheme.addColor(RGBColor::BLUE, -10.);
751  scheme.addColor(RGBColor::RED, 10.);
752  scheme.addColor(RGBColor::YELLOW, 50.);
753  scheme.addColor(RGBColor::GREEN, 100.);
754  scheme.addColor(RGBColor::MAGENTA, 200.);
755  scheme.setAllowsNegativeValues(true);
756  laneColorer.addScheme(scheme);
757  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
758  scheme.addColor(RGBColor::YELLOW, 0.1);
759  scheme.addColor(RGBColor::RED, 0.3);
760  scheme.addColor(RGBColor::GREEN, -0.1);
761  scheme.addColor(RGBColor::BLUE, -0.3);
762  scheme.setAllowsNegativeValues(true);
763  laneColorer.addScheme(scheme);
764  scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
765  scheme.addColor(RGBColor::YELLOW, 0.1);
766  scheme.addColor(RGBColor::RED, 0.3);
767  scheme.addColor(RGBColor::GREEN, -0.1);
768  scheme.addColor(RGBColor::BLUE, -0.3);
769  scheme.setAllowsNegativeValues(true);
770  laneColorer.addScheme(scheme);
771  scheme = GUIColorScheme("by average speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
772  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
773  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
774  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
775  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
776  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
777  laneColorer.addScheme(scheme);
778  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
779  scheme.addColor(RGBColor::YELLOW, 0.25);
780  scheme.addColor(RGBColor::GREEN, 0.5);
781  scheme.addColor(RGBColor::CYAN, 0.75);
782  scheme.addColor(RGBColor::BLUE, 1.);
783  scheme.addColor(RGBColor::MAGENTA, 1.25);
784  laneColorer.addScheme(scheme);
785  scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
786  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
787  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
788  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
789  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
790  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
791  laneColorer.addScheme(scheme);
792  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
793  scheme.addColor(RGBColor::CYAN, 0.2);
794  scheme.addColor(RGBColor::GREEN, 0.4);
795  scheme.addColor(RGBColor::YELLOW, 0.6);
796  scheme.addColor(RGBColor::ORANGE, 0.8);
797  scheme.addColor(RGBColor::RED, 1.0);
798  scheme.addColor(RGBColor::MAGENTA, 2.0);
799  laneColorer.addScheme(scheme);
800  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
801  scheme.addColor(RGBColor::GREEN, 1.);
802  scheme.addColor(RGBColor::YELLOW, 10.);
803  scheme.addColor(RGBColor::RED, 100.);
804  laneColorer.addScheme(scheme);
805  scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
806  laneColorer.addScheme(scheme);
807  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
808  scheme.setAllowsNegativeValues(true);
809  laneColorer.addScheme(scheme);
810  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
811  scheme.setAllowsNegativeValues(true);
812  laneColorer.addScheme(scheme);
813  scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
814  scheme.setAllowsNegativeValues(true);
815  laneColorer.addScheme(scheme);
816  scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
817  scheme.addColor(RGBColor(255, 204, 204), 1.);
818  scheme.addColor(RGBColor::RED, 10000.);
819  scheme.addColor(RGBColor(204, 204, 255), -1.);
820  scheme.addColor(RGBColor::BLUE, -10000.);
821  scheme.setAllowsNegativeValues(true);
822  laneColorer.addScheme(scheme);
823  scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
824  scheme.addColor(RGBColor::RED, 1.);
825  scheme.setAllowsNegativeValues(false);
826  laneColorer.addScheme(scheme);
827  scheme = GUIColorScheme("by reachability (traveltime)", RGBColor(204, 204, 204));
828  scheme.addColor(RGBColor::RED, 1.);
829  scheme.setAllowsNegativeValues(true);
830  laneColorer.addScheme(scheme);
831  scheme = GUIColorScheme("by thread index", RGBColor(204, 204, 204));
832  scheme.addColor(RGBColor::RED, 1.);
833  laneColorer.addScheme(scheme);
834  scheme = GUIColorScheme("free parking spaces", RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
835  scheme.addColor(RGBColor::RED, 1.);
836  scheme.addColor(RGBColor::YELLOW, 10.);
837  scheme.addColor(RGBColor::GREEN, 100.);
838  scheme.addColor(RGBColor::BLUE, 1000.);
839  laneColorer.addScheme(scheme);
840 
842  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
844  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
845  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
846  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
847  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
848  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
849  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
850  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
851  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
852  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
853  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
854  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
855  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
856  scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
857  scheme.addColor(RGBColor::RED, -1); // stopped on road
858  scheme.addColor(RGBColor::GREY, -2); // stopped off-road (parking)
859  vehicleColorer.addScheme(scheme);
860  scheme = GUIColorScheme("by action step", RGBColor::GREY, "no action", true, 0, COL_SCHEME_DYNAMIC);
861  scheme.addColor(RGBColor(0, 255, 0, 255), 1., "action in next step");
862  scheme.addColor(RGBColor(80, 160, 80, 255), 2., "had action step");
863  vehicleColorer.addScheme(scheme);
864  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
865  scheme.addColor(RGBColor::CYAN, 30.);
866  scheme.addColor(RGBColor::GREEN, 100.);
867  scheme.addColor(RGBColor::YELLOW, 200.);
868  scheme.addColor(RGBColor::RED, 300.);
869  vehicleColorer.addScheme(scheme);
870  scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
871  scheme.addColor(RGBColor::CYAN, 25.);
872  scheme.addColor(RGBColor::GREEN, 50.);
873  scheme.addColor(RGBColor::YELLOW, 75.);
874  scheme.addColor(RGBColor::RED, 100.);
875  vehicleColorer.addScheme(scheme);
876  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
877  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
878  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
879  scheme.addColor(RGBColor(255, 0, 0, 255), -0.01);
880  scheme.addColor(RGBColor(0, 0, 255, 255), 0.01);
881  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
882  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
883  scheme.setAllowsNegativeValues(true);
884  vehicleColorer.addScheme(scheme);
885  scheme = GUIColorScheme("by max speed", RGBColor::RED);
886  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
887  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
888  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
889  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
890  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
891  vehicleColorer.addScheme(scheme);
892  // ... emissions ...
893  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
894  scheme.addColor(RGBColor::CYAN, 23000);
895  scheme.addColor(RGBColor::GREEN, 46000);
896  scheme.addColor(RGBColor::YELLOW, 69000);
897  scheme.addColor(RGBColor::ORANGE, 92000);
898  scheme.addColor(RGBColor::RED, 115000);
899  scheme.addColor(RGBColor::MAGENTA, 150000);
900  vehicleColorer.addScheme(scheme);
901  scheme = GUIColorScheme("by CO emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
902  scheme.addColor(RGBColor::CYAN, 1500);
903  scheme.addColor(RGBColor::GREEN, 3000);
904  scheme.addColor(RGBColor::YELLOW, 4500);
905  scheme.addColor(RGBColor::ORANGE, 6000);
906  scheme.addColor(RGBColor::RED, 7500);
907  scheme.addColor(RGBColor::MAGENTA, 10000);
908  vehicleColorer.addScheme(scheme);
909  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
910  scheme.addColor(RGBColor::CYAN, 12);
911  scheme.addColor(RGBColor::GREEN, 24);
912  scheme.addColor(RGBColor::YELLOW, 36);
913  scheme.addColor(RGBColor::ORANGE, 48);
914  scheme.addColor(RGBColor::RED, 60);
915  scheme.addColor(RGBColor::MAGENTA, 80);
916  vehicleColorer.addScheme(scheme);
917  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
918  scheme.addColor(RGBColor::CYAN, 300);
919  scheme.addColor(RGBColor::GREEN, 600);
920  scheme.addColor(RGBColor::YELLOW, 900);
921  scheme.addColor(RGBColor::ORANGE, 1200);
922  scheme.addColor(RGBColor::RED, 1500);
923  scheme.addColor(RGBColor::MAGENTA, 2000);
924  vehicleColorer.addScheme(scheme);
925  scheme = GUIColorScheme("by HC emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
926  scheme.addColor(RGBColor::CYAN, 400);
927  scheme.addColor(RGBColor::GREEN, 800);
928  scheme.addColor(RGBColor::YELLOW, 1200);
929  scheme.addColor(RGBColor::ORANGE, 1600);
930  scheme.addColor(RGBColor::RED, 2000);
931  scheme.addColor(RGBColor::MAGENTA, 2500);
932  vehicleColorer.addScheme(scheme);
933  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
934  scheme.addColor(RGBColor::CYAN, 10);
935  scheme.addColor(RGBColor::GREEN, 20);
936  scheme.addColor(RGBColor::YELLOW, 30);
937  scheme.addColor(RGBColor::ORANGE, 40);
938  scheme.addColor(RGBColor::RED, 50);
939  scheme.addColor(RGBColor::MAGENTA, 60);
940  vehicleColorer.addScheme(scheme);
941  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
942  scheme.addColor(RGBColor::CYAN, 60);
943  scheme.addColor(RGBColor::GREEN, 70);
944  scheme.addColor(RGBColor::YELLOW, 80);
945  scheme.addColor(RGBColor::ORANGE, 90);
946  scheme.addColor(RGBColor::RED, 100);
947  scheme.addColor(RGBColor::MAGENTA, 120);
948  vehicleColorer.addScheme(scheme);
949  scheme = GUIColorScheme("by reroute number", RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
950  scheme.addColor(RGBColor::YELLOW, 1.);
951  scheme.addColor(RGBColor::RED, 10.);
952  vehicleColorer.addScheme(scheme);
953  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
954  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
955  vehicleColorer.addScheme(scheme);
956  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
957  scheme.addColor(RGBColor(255, 0, 255, 255), -100, "opposite lane");
958  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
959  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
960  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
961  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
962  scheme.setAllowsNegativeValues(true);
963  vehicleColorer.addScheme(scheme);
964  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
965  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
966  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
967  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
968  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
969  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
970  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
971  scheme.setAllowsNegativeValues(true);
972  vehicleColorer.addScheme(scheme);
973  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
974  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
975  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
976  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
977  scheme.setAllowsNegativeValues(true);
978  vehicleColorer.addScheme(scheme);
979  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
980  scheme.addColor(RGBColor::CYAN, 30.);
981  scheme.addColor(RGBColor::GREEN, 100.);
982  scheme.addColor(RGBColor::YELLOW, 200.);
983  scheme.addColor(RGBColor::RED, 300.);
984  vehicleColorer.addScheme(scheme);
985  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
986  scheme.addColor(RGBColor::CYAN, 10);
987  scheme.addColor(RGBColor::GREEN, 20);
988  scheme.addColor(RGBColor::YELLOW, 30);
989  scheme.addColor(RGBColor::ORANGE, 40);
990  scheme.addColor(RGBColor::RED, 60);
991  scheme.addColor(RGBColor::MAGENTA, 100);
992  vehicleColorer.addScheme(scheme);
993  scheme = GUIColorScheme("by time loss", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
994  scheme.addColor(RGBColor::CYAN, 10.);
995  scheme.addColor(RGBColor::GREEN, 60.);
996  scheme.addColor(RGBColor::YELLOW, 180.);
997  scheme.addColor(RGBColor::RED, 900.);
998  vehicleColorer.addScheme(scheme);
999  scheme = GUIColorScheme("by stop delay", RGBColor::GREY, "", false, -1, COL_SCHEME_DYNAMIC);
1000  scheme.addColor(RGBColor::BLUE, 0.);
1001  scheme.addColor(RGBColor::CYAN, 10.);
1002  scheme.addColor(RGBColor::GREEN, 60.);
1003  scheme.addColor(RGBColor::YELLOW, 120.);
1004  scheme.addColor(RGBColor::ORANGE, 300.);
1005  scheme.addColor(RGBColor::RED, 900.);
1006  scheme.setAllowsNegativeValues(true);
1007  vehicleColorer.addScheme(scheme);
1008  scheme = GUIColorScheme("by stop arrival delay", RGBColor::GREY, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1009  scheme.addColor(RGBColor::MAGENTA, -10.);
1010  scheme.addColor(RGBColor::BLUE, 0.);
1011  scheme.addColor(RGBColor::CYAN, 10.);
1012  scheme.addColor(RGBColor::GREEN, 60.);
1013  scheme.addColor(RGBColor::YELLOW, 120.);
1014  scheme.addColor(RGBColor::ORANGE, 300.);
1015  scheme.addColor(RGBColor::RED, 900.);
1016  scheme.setAllowsNegativeValues(true);
1017  vehicleColorer.addScheme(scheme);
1018  scheme = GUIColorScheme("by lateral speed", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1019  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");
1020  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");
1021  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");
1022  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");
1023  scheme.setAllowsNegativeValues(true);
1024  vehicleColorer.addScheme(scheme);
1025  scheme = GUIColorScheme(SCHEME_NAME_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1026  scheme.setAllowsNegativeValues(true);
1027  vehicleColorer.addScheme(scheme);
1029  vehicleColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1030 
1032  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::BLUE, "", true));
1033  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLUE, "", true));
1034  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::BLUE, "", true));
1035  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::BLUE, "", true));
1036  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1037  scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1038  scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1039  scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1040  scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1041  scheme.addColor(RGBColor::GREY, -1.); // stop stage
1042  scheme.addColor(RGBColor::GREY, -2.); // stop stage (departure)
1043  personColorer.addScheme(scheme);
1044  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
1045  scheme.addColor(RGBColor::RED, 1., "stopped");
1046  scheme.addColor(RGBColor::GREEN, 2., "walking");
1047  scheme.addColor(RGBColor::BLUE, 3., "riding");
1048  scheme.addColor(RGBColor::CYAN, 4., "accessing trainStop");
1049  scheme.addColor(RGBColor::YELLOW, 5., "waiting for ride");
1050  personColorer.addScheme(scheme);
1051  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1052  scheme.addColor(RGBColor::CYAN, 30.);
1053  scheme.addColor(RGBColor::GREEN, 100.);
1054  scheme.addColor(RGBColor::YELLOW, 200.);
1055  scheme.addColor(RGBColor::RED, 300.);
1056  personColorer.addScheme(scheme);
1057  scheme = GUIColorScheme("by jammed state", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1058  scheme.addColor(RGBColor::RED, 1.);
1059  personColorer.addScheme(scheme);
1060  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1061  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1062  personColorer.addScheme(scheme);
1063  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1065 
1067  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
1069  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
1070  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
1071  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1072  scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1073  scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1074  scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1075  containerColorer.addScheme(scheme);
1076  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
1077  scheme.addColor(RGBColor::RED, 1., "stopped");
1078  scheme.addColor(RGBColor::GREEN, 2., "tranship"); // walking
1079  scheme.addColor(RGBColor::BLUE, 3., "transport");
1080  scheme.addColor(RGBColor::CYAN, 4., "accessing trainStop");
1081  scheme.addColor(RGBColor::YELLOW, 5., "waiting for transport");
1082  containerColorer.addScheme(scheme);
1083  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1084  scheme.addColor(RGBColor::CYAN, 30.);
1085  scheme.addColor(RGBColor::GREEN, 100.);
1086  scheme.addColor(RGBColor::YELLOW, 200.);
1087  scheme.addColor(RGBColor::RED, 300.);
1088  containerColorer.addScheme(scheme);
1089  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1090  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1091  containerColorer.addScheme(scheme);
1094 
1096  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
1097  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
1098  scheme.addColor(RGBColor(0, 0, 0, 0), 2, "railway");
1099  junctionColorer.addScheme(scheme);
1100  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1101  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1102  junctionColorer.addScheme(scheme);
1103  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1104  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1105  scheme.addColor(RGBColor::YELLOW, 2, "priority");
1106  scheme.addColor(RGBColor::RED, 3, "priority_stop");
1107  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1108  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1109  scheme.addColor(RGBColor::GREY, 6, "district");
1110  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1111  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1112  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1113  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1114  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
1115  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1116  junctionColorer.addScheme(scheme);
1117  scheme = GUIColorScheme("by height", RGBColor::GREY);
1118  scheme.addColor(RGBColor::BLUE, -10.);
1119  scheme.addColor(RGBColor::RED, 10.);
1120  scheme.addColor(RGBColor::YELLOW, 50.);
1121  scheme.addColor(RGBColor::GREEN, 100.);
1122  scheme.addColor(RGBColor::MAGENTA, 200.);
1123  scheme.setAllowsNegativeValues(true);
1124  junctionColorer.addScheme(scheme);
1125 
1127  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
1128  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1129  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1130  poiColorer.addScheme(scheme);
1131  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
1132 
1134  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
1135  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1136  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1137  polyColorer.addScheme(scheme);
1138  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
1139 
1141  {
1142  GUIScaleScheme laneScheme = GUIScaleScheme("default", 1, "uniform", true);
1143  laneScaler.addScheme(laneScheme);
1144  laneScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, "unselected", true, 0, COL_SCHEME_MISC);
1145  laneScheme.addColor(5, 1, "selected");
1146  laneScaler.addScheme(laneScheme);
1147  // ... traffic states ...
1148  laneScheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
1149  laneScheme.addColor(10, 150. / 3.6);
1150  laneScaler.addScheme(laneScheme);
1151  laneScheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1152  laneScheme.addColor(10, 0.95);
1153  laneScaler.addScheme(laneScheme);
1154  laneScheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1155  laneScheme.addColor(10, 0.95);
1156  laneScaler.addScheme(laneScheme);
1157  laneScheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1158  laneScheme.addColor(10, 300.);
1159  laneScaler.addScheme(laneScheme);
1160  laneScheme = GUIScaleScheme("by lane number (streetwise)", 1);
1161  laneScheme.addColor(10, 5.);
1162  laneScaler.addScheme(laneScheme);
1163  // ... emissions ...
1164  laneScheme = GUIScaleScheme("by CO2 emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1165  laneScheme.addColor(10, 10. / 7.5 / 5.);
1166  laneScaler.addScheme(laneScheme);
1167  laneScheme = GUIScaleScheme("by CO emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1168  laneScheme.addColor(10, 0.05 / 7.5 / 2.);
1169  laneScaler.addScheme(laneScheme);
1170  laneScheme = GUIScaleScheme("by PMx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1171  laneScheme.addColor(10, .005 / 7.5 / 5.);
1172  laneScaler.addScheme(laneScheme);
1173  laneScheme = GUIScaleScheme("by NOx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1174  laneScheme.addColor(10, .125 / 7.5 / 5.);
1175  laneScaler.addScheme(laneScheme);
1176  laneScheme = GUIScaleScheme("by HC emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1177  laneScheme.addColor(10, .02 / 7.5 / 4.);
1178  laneScaler.addScheme(laneScheme);
1179  laneScheme = GUIScaleScheme("by fuel consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
1180  laneScheme.addColor(10, .005 / 7.5 * 100.);
1181  laneScaler.addScheme(laneScheme);
1182  laneScheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0, "", false, 0, COL_SCHEME_EMISSION);
1183  laneScheme.addColor(10, 100.);
1184  laneScaler.addScheme(laneScheme);
1185  // ... weights (experimental) ...
1186  laneScheme = GUIScaleScheme("by global travel time", 0);
1187  laneScheme.addColor(10, 100.);
1188  laneScheme.setAllowsNegativeValues(true);
1189  laneScaler.addScheme(laneScheme);
1190  laneScheme = GUIScaleScheme("by global speed percentage", 0);
1191  laneScheme.addColor(10, 100.);
1192  laneScheme.setAllowsNegativeValues(true);
1193  laneScaler.addScheme(laneScheme);
1194  laneScheme = GUIScaleScheme("by given length/geometrical length", 0);
1195  laneScheme.addColor(10, 10.);
1196  laneScaler.addScheme(laneScheme);
1197  laneScheme = GUIScaleScheme("by loaded weight", 0);
1198  laneScheme.addColor(-1000, -1000.);
1199  laneScheme.addColor(1000, 1000.);
1200  laneScheme.setAllowsNegativeValues(true);
1201  laneScaler.addScheme(laneScheme);
1202  laneScheme = GUIScaleScheme("by priority", 1);
1203  laneScheme.addColor(0.5, -20.);
1204  laneScheme.addColor(5, 20.);
1205  laneScheme.setAllowsNegativeValues(true);
1206  laneScaler.addScheme(laneScheme);
1207  laneScheme = GUIScaleScheme("by average speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1208  laneScheme.addColor(10, 150. / 3.6);
1209  laneScaler.addScheme(laneScheme);
1210  laneScheme = GUIScaleScheme("by average relative speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1211  laneScheme.addColor(0.5, 0.5);
1212  laneScheme.addColor(2, 1.);
1213  laneScheme.addColor(10, 2.);
1214  laneScaler.addScheme(laneScheme);
1215  laneScheme = GUIScaleScheme("by electricity consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
1216  laneScheme.addColor(10, 1. / 7.5 / 5.);
1217  laneScaler.addScheme(laneScheme);
1218  laneScheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1219  laneScheme.addColor(1, 1.);
1220  laneScheme.addColor(10, 10.);
1221  laneScheme.addColor(50, 100.);
1222  laneScaler.addScheme(laneScheme);
1223  }
1224 
1226  edgeColorer.addScheme(GUIColorScheme("uniform", RGBColor(0, 0, 0, 0), "", true));
1227  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1228  scheme.addColor(RGBColor(0, 80, 180, 255), 1., "selected");
1229  edgeColorer.addScheme(scheme);
1230  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
1231  scheme.addColor(RGBColor(128, 0, 128, 255), 1., "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
1232  scheme.addColor(RGBColor::BLUE, 2., "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
1233  edgeColorer.addScheme(scheme);
1234  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
1235  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1236  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1237  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1238  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1239  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1240  edgeColorer.addScheme(scheme);
1241  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1242  scheme.addColor(RGBColor::RED, 0.95);
1243  edgeColorer.addScheme(scheme);
1244  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1245  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1246  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1247  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1248  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1249  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1250  edgeColorer.addScheme(scheme);
1251  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1252  scheme.addColor(RGBColor::RED, 5000.);
1253  edgeColorer.addScheme(scheme);
1254  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1255  scheme.addColor(RGBColor::YELLOW, 0.25);
1256  scheme.addColor(RGBColor::GREEN, 0.5);
1257  scheme.addColor(RGBColor::CYAN, 0.75);
1258  scheme.addColor(RGBColor::BLUE, 1.);
1259  scheme.addColor(RGBColor::MAGENTA, 1.25);
1260  edgeColorer.addScheme(scheme);
1261  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1262  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1263  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1264  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1265  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1266  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1267  edgeColorer.addScheme(scheme);
1268  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1269  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
1270  scheme.addColor(RGBColor::RED, 1., "even");
1271  edgeColorer.addScheme(scheme);
1272  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true, 0, COL_SCHEME_DYNAMIC);
1273  scheme.addColor(RGBColor::YELLOW, 1., "limitedControl");
1274  scheme.addColor(RGBColor::RED, 2., "jammed");
1275  edgeColorer.addScheme(scheme);
1276  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1277  scheme.addColor(RGBColor::RED, 0.95);
1278  edgeColorer.addScheme(scheme);
1279  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1280  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1281  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1282  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1283  scheme.addColor(RGBColor::BLUE, 120 / 3.6);
1284  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1285  edgeColorer.addScheme(scheme);
1286  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1287  scheme.addColor(RGBColor::RED, 5000.);
1288  edgeColorer.addScheme(scheme);
1289  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1290  scheme.addColor(RGBColor::YELLOW, 0.25);
1291  scheme.addColor(RGBColor::GREEN, 0.5);
1292  scheme.addColor(RGBColor::CYAN, 0.75);
1293  scheme.addColor(RGBColor::BLUE, 1.);
1294  scheme.addColor(RGBColor::MAGENTA, 1.25);
1295  edgeColorer.addScheme(scheme);
1296  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1297  scheme.addColor(RGBColor::GREEN, 1.);
1298  scheme.addColor(RGBColor::YELLOW, 10.);
1299  scheme.addColor(RGBColor::RED, 100.);
1300  edgeColorer.addScheme(scheme);
1301  scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
1302  edgeColorer.addScheme(scheme);
1303  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1304  scheme.setAllowsNegativeValues(true);
1305  edgeColorer.addScheme(scheme);
1306  scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
1307  scheme.setAllowsNegativeValues(true);
1308  edgeColorer.addScheme(scheme);
1309 
1311  {
1312  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
1313  GUIScaleScheme edgeScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, "unselected", true, 0, COL_SCHEME_MISC);
1314  edgeScheme.addColor(5, 1., "selected");
1315  edgeScaler.addScheme(edgeScheme);
1316  edgeScheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
1317  edgeScheme.addColor(10, 150. / 3.6);
1318  edgeScaler.addScheme(edgeScheme);
1319  edgeScheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1320  edgeScheme.addColor(10, 0.95);
1321  edgeScaler.addScheme(edgeScheme);
1322  edgeScheme = GUIScaleScheme("by current speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1323  edgeScheme.addColor(10, 150. / 3.6);
1324  edgeScaler.addScheme(edgeScheme);
1325  edgeScheme = GUIScaleScheme("by current flow (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1326  edgeScheme.addColor(20, 5000.);
1327  edgeScaler.addScheme(edgeScheme);
1328  edgeScheme = GUIScaleScheme("by relative speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1329  edgeScheme.addColor(20, 1.);
1330  edgeScaler.addScheme(edgeScheme);
1331  edgeScheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1332  edgeScheme.addColor(1, 1.);
1333  edgeScheme.addColor(10, 10.);
1334  edgeScheme.addColor(50, 100.);
1335  edgeScaler.addScheme(edgeScheme);
1336  }
1337 
1339  {
1340  vehicleScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
1341  GUIScaleScheme vehScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 1, "unselected", true, 0, COL_SCHEME_MISC);
1342  vehScheme.addColor(5, 1., "selected");
1343  vehicleScaler.addScheme(vehScheme);
1344  vehScheme = GUIScaleScheme("by speed", 1, "", false, 1, COL_SCHEME_DYNAMIC);
1345  vehScheme.addColor(5, 150. / 3.6);
1346  vehScheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1347  vehScheme.addColor(1, -1.); // stopped on road
1348  vehScheme.addColor(0.5, -2.); // stopped off-road (parking)
1349  vehicleScaler.addScheme(vehScheme);
1350  vehScheme = GUIScaleScheme("by waiting time", 1, "", false, 1, COL_SCHEME_DYNAMIC);
1351  vehScheme.addColor(1, 30.);
1352  vehScheme.addColor(2, 100.);
1353  vehScheme.addColor(4, 200.);
1354  vehScheme.addColor(10, 300.);
1355  vehicleScaler.addScheme(vehScheme);
1356  vehScheme = GUIScaleScheme("by accumulated waiting time", 1, "", false, 1, COL_SCHEME_DYNAMIC);
1357  vehScheme.addColor(5, 100.);
1358  vehicleScaler.addScheme(vehScheme);
1359  vehScheme = GUIScaleScheme("by max speed", 1);
1360  vehScheme.addColor(1, 30. / 3.6);
1361  vehScheme.addColor(1, 55. / 3.6);
1362  vehScheme.addColor(1, 80. / 3.6);
1363  vehScheme.addColor(1, 120. / 3.6);
1364  vehScheme.addColor(1, 150. / 3.6);
1365  vehicleScaler.addScheme(vehScheme);
1366  vehScheme = GUIScaleScheme("by reroute number", 1, "", false, 0, COL_SCHEME_DYNAMIC);
1367  vehScheme.addColor(1, 1.);
1368  vehScheme.addColor(5, 10.);
1369  vehicleScaler.addScheme(vehScheme);
1370  vehScheme = GUIScaleScheme("by offset from best lane", 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1371  vehScheme.addColor(5, -100, "opposite lane");
1372  vehScheme.addColor(3, -3, "-3");
1373  vehScheme.addColor(1.5, -1, "-1");
1374  vehScheme.addColor(1.5, 1, "1");
1375  vehScheme.addColor(3, 3, "3");
1376  vehScheme.setAllowsNegativeValues(true);
1377  vehicleScaler.addScheme(vehScheme);
1378  vehScheme = GUIScaleScheme("by acceleration", 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1379  vehScheme.addColor(4, -9.0);
1380  vehScheme.addColor(2, -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
1381  vehScheme.addColor(1, -0.1);
1382  vehScheme.addColor(1, 0.1);
1383  vehScheme.addColor(1, 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
1384  vehScheme.addColor(3, 5.2);
1385  vehScheme.setAllowsNegativeValues(true);
1386  vehicleScaler.addScheme(vehScheme);
1387  vehScheme = GUIScaleScheme("by time gap on lane", 5, "0", false, 0, COL_SCHEME_DYNAMIC);
1388  vehScheme.addColor(1, -1);
1389  vehScheme.addColor(1, 1);
1390  vehScheme.addColor(0.5, 2);
1391  vehScheme.setAllowsNegativeValues(true);
1392  vehicleScaler.addScheme(vehScheme);
1393  vehScheme = GUIScaleScheme("by depart delay", 0.8);
1394  vehScheme.addColor(1, 10.);
1395  vehScheme.addColor(2, 100.);
1396  vehScheme.addColor(3, 200.);
1397  vehScheme.addColor(5, 300.);
1398  vehicleScaler.addScheme(vehScheme);
1399  vehScheme = GUIScaleScheme("by time loss", 1, "", false, 0, COL_SCHEME_DYNAMIC);
1400  vehScheme.addColor(1, 10.);
1401  vehScheme.addColor(2, 60.);
1402  vehScheme.addColor(3, 180.);
1403  vehScheme.addColor(10, 900.);
1404  vehicleScaler.addScheme(vehScheme);
1405  vehScheme = GUIScaleScheme("by stop delay", 0.1, "", false, -1, COL_SCHEME_DYNAMIC);
1406  vehScheme.addColor(1, 0.);
1407  vehScheme.addColor(2, 10.);
1408  vehScheme.addColor(3, 60.);
1409  vehScheme.addColor(4, 120.);
1410  vehScheme.addColor(5, 300.);
1411  vehScheme.addColor(10, 900.);
1412  vehScheme.setAllowsNegativeValues(true);
1413  vehicleScaler.addScheme(vehScheme);
1414  vehScheme = GUIScaleScheme("by stop arrival delay", 0.1, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1415  vehScheme.addColor(0.5, -10.);
1416  vehScheme.addColor(1, 0.);
1417  vehScheme.addColor(2, 10.);
1418  vehScheme.addColor(3, 60.);
1419  vehScheme.addColor(4, 120.);
1420  vehScheme.addColor(5, 300.);
1421  vehScheme.addColor(10, 900.);
1422  vehScheme.setAllowsNegativeValues(true);
1423  vehicleScaler.addScheme(vehScheme);
1425  vehScheme.setAllowsNegativeValues(true);
1426  vehicleScaler.addScheme(vehScheme);
1427  }
1428 }
1429 
1430 
1431 void
1433  // init color schemes
1434  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
1435  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
1436  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
1437  scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
1438  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
1439  scheme.addColor(RGBColor::BLACK, 5, "railway");
1440  scheme.addColor(RGBColor(64, 0, 64), 6, "rails on road");
1441  scheme.addColor(RGBColor(92, 92, 92), 7, "no passenger"); // paths, service roads etc
1442  scheme.addColor(RGBColor::RED, 8, "closed"); // road closing
1443  scheme.addColor(RGBColor::GREEN, 9, "connector"); // macro-connector
1444  scheme.addColor(RGBColor::ORANGE, 10, "forbidden"); // forbidden road
1445  scheme.addColor(RGBColor(145, 145, 145), 11., "data mode");
1446  laneColorer.addScheme(scheme);
1447  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1448  scheme.addColor(RGBColor(0, 80, 180, 255), 1., "selected");
1449  laneColorer.addScheme(scheme);
1450  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
1451  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
1452  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
1453  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
1454  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
1455  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
1456  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
1457  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
1458  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
1459  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
1460  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
1461  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
1462  laneColorer.addScheme(scheme);
1463 
1464  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
1465  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1466  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1467  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1468  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1469  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1470  laneColorer.addScheme(scheme);
1471 
1472  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
1473  scheme.addColor(RGBColor::BLUE, 5.);
1474  laneColorer.addScheme(scheme);
1475 
1476  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
1477  scheme.addColor(RGBColor::ORANGE, 0.25);
1478  scheme.addColor(RGBColor::YELLOW, 0.5);
1479  scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
1480  scheme.addColor(RGBColor::GREEN, 2.);
1481  scheme.addColor(RGBColor::CYAN, 4.);
1482  scheme.addColor(RGBColor::BLUE, 100.);
1483  laneColorer.addScheme(scheme);
1484  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1485 
1486  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
1487  scheme.addColor(RGBColor::RED, -20.);
1488  scheme.addColor(RGBColor::GREEN, 20.);
1489  scheme.setAllowsNegativeValues(true);
1490  laneColorer.addScheme(scheme);
1491  scheme = GUIColorScheme("by height at start", RGBColor::RED);
1492  scheme.addColor(RGBColor::BLUE, -10.);
1493  scheme.addColor(RGBColor::YELLOW, 50.);
1494  scheme.addColor(RGBColor::GREEN, 100.);
1495  scheme.addColor(RGBColor::MAGENTA, 200.);
1496  scheme.setAllowsNegativeValues(true);
1497  laneColorer.addScheme(scheme);
1498  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
1499  scheme.addColor(RGBColor::BLUE, -10.);
1500  scheme.addColor(RGBColor::YELLOW, 50.);
1501  scheme.addColor(RGBColor::GREEN, 100.);
1502  scheme.addColor(RGBColor::MAGENTA, 200.);
1503  scheme.setAllowsNegativeValues(true);
1504  laneColorer.addScheme(scheme);
1505  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
1506  scheme.addColor(RGBColor::YELLOW, 0.1);
1507  scheme.addColor(RGBColor::RED, 0.3);
1508  scheme.addColor(RGBColor::GREEN, -0.1);
1509  scheme.addColor(RGBColor::BLUE, -0.3);
1510  scheme.setAllowsNegativeValues(true);
1511  laneColorer.addScheme(scheme);
1512  scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
1513  scheme.addColor(RGBColor::YELLOW, 0.1);
1514  scheme.addColor(RGBColor::RED, 0.3);
1515  scheme.addColor(RGBColor::GREEN, -0.1);
1516  scheme.addColor(RGBColor::BLUE, -0.3);
1517  scheme.setAllowsNegativeValues(true);
1518  laneColorer.addScheme(scheme);
1519  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1520  scheme.setAllowsNegativeValues(true);
1521  laneColorer.addScheme(scheme);
1522  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1523  scheme.setAllowsNegativeValues(true);
1524  laneColorer.addScheme(scheme);
1525  scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
1526  scheme.addColor(RGBColor::RED, 1.);
1527  scheme.addColor(RGBColor::RED, -1.);
1528  scheme.setAllowsNegativeValues(true);
1529  laneColorer.addScheme(scheme);
1530  scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
1531  scheme.addColor(RGBColor::RED, 1.);
1532  scheme.setAllowsNegativeValues(false);
1533  laneColorer.addScheme(scheme);
1534  scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
1535  scheme.setAllowsNegativeValues(true);
1536  laneColorer.addScheme(scheme);
1537 
1538  scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
1539  scheme.addColor(RGBColor(204, 0, 0), 1, "junction bubble");
1540  scheme.addColor(RGBColor(230, 100, 115), 2, "geometry points");
1541  scheme.addColor(GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW, 3, "connections missing");
1542  scheme.addColor(RGBColor::GREEN, 3, "custom shape");
1543  scheme.addColor(RGBColor(205, 180, 180), 4, "data mode");
1544  junctionColorer.addScheme(scheme);
1545  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1546  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1547  junctionColorer.addScheme(scheme);
1548  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1549  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1550  scheme.addColor(RGBColor::YELLOW, 2, "priority");
1551  scheme.addColor(RGBColor::RED, 3, "priority_stop");
1552  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1553  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1554  scheme.addColor(RGBColor::GREY, 6, "district");
1555  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1556  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1557  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1558  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1559  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
1560  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1561  junctionColorer.addScheme(scheme);
1562  scheme = GUIColorScheme("by height", RGBColor::GREY);
1563  scheme.addColor(RGBColor::BLUE, -10.);
1564  scheme.addColor(RGBColor::RED, 10.);
1565  scheme.addColor(RGBColor::YELLOW, 50.);
1566  scheme.addColor(RGBColor::GREEN, 100.);
1567  scheme.addColor(RGBColor::MAGENTA, 200.);
1568  scheme.setAllowsNegativeValues(true);
1569  junctionColorer.addScheme(scheme);
1570 
1572  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
1573  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1574  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1575  poiColorer.addScheme(scheme);
1576  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
1577 
1579  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
1580  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1581  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1582  polyColorer.addScheme(scheme);
1583  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
1584 
1586  {
1587  GUIScaleScheme edgeScheme = GUIScaleScheme("default", 1, "uniform", true);
1588  laneScaler.addScheme(edgeScheme);
1589  }
1590 
1592  dataColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
1593  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1594  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1595  dataColorer.addScheme(scheme);
1596  dataColorer.addScheme(GUIColorScheme("by origin taz", RGBColor::ORANGE, "", true));
1597  dataColorer.addScheme(GUIColorScheme("by destination taz", RGBColor::ORANGE, "", true));
1598  scheme = GUIColorScheme(SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
1599  scheme.setAllowsNegativeValues(true);
1600  dataColorer.addScheme(scheme);
1601 
1602  // dummy schemes
1604  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
1606  vehicleScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
1607 }
1608 
1609 
1610 int
1612  if (UseMesoSim) {
1613  return edgeColorer.getActive();
1614  }
1615  return laneColorer.getActive();
1616 }
1617 
1618 
1619 int
1621  if (UseMesoSim) {
1622  return edgeScaler.getActive();
1623  }
1624  return laneScaler.getActive();
1625 }
1626 
1627 
1630  if (UseMesoSim) {
1631  return edgeColorer.getScheme();
1632  }
1633  return laneColorer.getScheme();
1634 }
1635 
1636 
1639  if (UseMesoSim) {
1640  return edgeScaler.getScheme();
1641  }
1642  return laneScaler.getScheme();
1643 }
1644 
1645 
1646 void
1651  dev.writeAttr("dither", dither);
1652  dev.writeAttr("fps", fps);
1653  dev.writeAttr("drawBoundaries", drawBoundaries);
1654  dev.writeAttr("forceDrawPositionSelection", forceDrawForPositionSelection);
1655  dev.writeAttr("forceDrawRectangleSelection", forceDrawForRectangleSelection);
1656  dev.closeTag();
1658  dev.writeAttr("backgroundColor", backgroundColor);
1659  dev.writeAttr("showGrid", showGrid);
1660  dev.writeAttr("gridXSize", gridXSize);
1661  dev.writeAttr("gridYSize", gridYSize);
1662  dev.closeTag();
1663  // edges
1665  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
1666  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
1667  dev.writeAttr("laneShowBorders", laneShowBorders);
1668  dev.writeAttr("showBikeMarkings", showBikeMarkings);
1669  dev.writeAttr("showLinkDecals", showLinkDecals);
1670  dev.writeAttr("realisticLinkRules", realisticLinkRules);
1671  dev.writeAttr("showLinkRules", showLinkRules);
1672  dev.writeAttr("showRails", showRails);
1673  dev.writeAttr("hideConnectors", hideConnectors);
1674  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
1675  dev.writeAttr("minSize", laneMinSize);
1676  dev.writeAttr("showDirection", showLaneDirection);
1677  dev.writeAttr("showSublanes", showSublanes);
1678  dev.writeAttr("spreadSuperposed", spreadSuperposed);
1679  dev.writeAttr("edgeParam", edgeParam);
1680  dev.writeAttr("laneParam", laneParam);
1681  dev.writeAttr("vehicleParam", vehicleParam);
1682  dev.writeAttr("vehicleScaleParam", vehicleScaleParam);
1683  dev.writeAttr("vehicleTextParam", vehicleTextParam);
1684  dev.writeAttr("edgeData", edgeData);
1685  dev.writeAttr("edgeValueHideCheck", edgeValueHideCheck);
1686  dev.writeAttr("edgeValueHideThreshold", edgeValueHideThreshold);
1687  dev.lf();
1688  dev << " ";
1689  edgeName.print(dev, "edgeName");
1690  dev.lf();
1691  dev << " ";
1692  internalEdgeName.print(dev, "internalEdgeName");
1693  dev.lf();
1694  dev << " ";
1695  cwaEdgeName.print(dev, "cwaEdgeName");
1696  dev.lf();
1697  dev << " ";
1698  streetName.print(dev, "streetName");
1699  dev.lf();
1700  dev << " ";
1701  edgeValue.print(dev, "edgeValue");
1702  laneColorer.save(dev);
1703  laneScaler.save(dev);
1704  edgeColorer.save(dev, "meso:");
1705  edgeScaler.save(dev);
1706  dev.closeTag();
1707  // vehicles
1709  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
1710  dev.writeAttr("vehicleScaleMode", vehicleScaler.getActive());
1711  dev.writeAttr("vehicleQuality", vehicleQuality);
1712  vehicleSize.print(dev, "vehicle");
1713  dev.writeAttr("showBlinker", showBlinker);
1714  dev.writeAttr("drawMinGap", drawMinGap);
1715  dev.writeAttr("drawBrakeGap", drawBrakeGap);
1716  dev.writeAttr("showBTRange", showBTRange);
1717  dev.writeAttr("showRouteIndex", showRouteIndex);
1718  dev.writeAttr("scaleLength", scaleLength);
1719  dev.writeAttr("showParkingInfo", showParkingInfo);
1720  dev.lf();
1721  dev << " ";
1722  vehicleName.print(dev, "vehicleName");
1723  dev.lf();
1724  dev << " ";
1725  vehicleValue.print(dev, "vehicleValue");
1726  dev.lf();
1727  dev << " ";
1728  vehicleScaleValue.print(dev, "vehicleScaleValue");
1729  dev.lf();
1730  dev << " ";
1731  vehicleText.print(dev, "vehicleText");
1732  vehicleColorer.save(dev);
1733  vehicleScaler.save(dev);
1734  dev.closeTag();
1735  // persons
1737  dev.writeAttr("personMode", personColorer.getActive());
1738  dev.writeAttr("personQuality", personQuality);
1739  personSize.print(dev, "person");
1740  dev.lf();
1741  dev << " ";
1742  personName.print(dev, "personName");
1743  dev.lf();
1744  dev << " ";
1745  personValue.print(dev, "personValue");
1746  personColorer.save(dev);
1747  dev.closeTag();
1748  // containers
1750  dev.writeAttr("containerMode", containerColorer.getActive());
1751  dev.writeAttr("containerQuality", containerQuality);
1752  containerSize.print(dev, "container");
1753  dev.lf();
1754  dev << " ";
1755  containerName.print(dev, "containerName");
1756  containerColorer.save(dev);
1757  dev.closeTag();
1758  // junctions
1760  dev.writeAttr("junctionMode", junctionColorer.getActive());
1761  dev.lf();
1762  dev << " ";
1763  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
1764  dev.lf();
1765  dev << " ";
1766  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
1767  dev.lf();
1768  dev << " ";
1769  junctionID.print(dev, "junctionID");
1770  dev.lf();
1771  dev << " ";
1772  junctionName.print(dev, "junctionName");
1773  dev.lf();
1774  dev << " ";
1775  internalJunctionName.print(dev, "internalJunctionName");
1776  dev.lf();
1777  dev << " ";
1778  tlsPhaseIndex.print(dev, "tlsPhaseIndex");
1779  tlsPhaseName.print(dev, "tlsPhaseName");
1780  dev.lf();
1781  dev << " ";
1782  dev.writeAttr("showLane2Lane", showLane2Lane);
1783  dev.writeAttr("drawShape", drawJunctionShape);
1784  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
1785  junctionSize.print(dev, "junction");
1786  junctionColorer.save(dev);
1787  dev.closeTag();
1788  // additionals
1790  dev.writeAttr("addMode", addMode);
1791  addSize.print(dev, "add");
1792  addName.print(dev, "addName");
1793  addFullName.print(dev, "addFullName");
1794  // temporal (will be integrated in a schema)
1795  dev.writeAttr("busStopColor", colorSettings.busStopColor);
1796  dev.writeAttr("busStopColorSign", colorSettings.busStopColorSign);
1797  dev.writeAttr("chargingStationColor", colorSettings.chargingStationColor);
1798  dev.writeAttr("chargingStationColorCharge", colorSettings.chargingStationColorCharge);
1799  dev.writeAttr("chargingStationColorSign", colorSettings.chargingStationColorSign);
1800  dev.writeAttr("containerStopColor", colorSettings.containerStopColor);
1801  dev.writeAttr("containerStopColorSign", colorSettings.containerStopColorSign);
1802  dev.writeAttr("parkingAreaColor", colorSettings.parkingAreaColor);
1803  dev.writeAttr("parkingAreaColorSign", colorSettings.parkingAreaColorSign);
1804  dev.writeAttr("parkingSpaceColor", colorSettings.parkingSpaceColor);
1805  dev.writeAttr("parkingSpaceColorContour", colorSettings.parkingSpaceColorContour);
1806  dev.writeAttr("personTripColor", colorSettings.personTripColor);
1807  dev.writeAttr("personTripWidth", widthSettings.personTripWidth);
1808  dev.writeAttr("rideColor", colorSettings.rideColor);
1809  dev.writeAttr("rideWidth", widthSettings.rideWidth);
1810  dev.writeAttr("selectedAdditionalColor", colorSettings.selectedAdditionalColor);
1811  dev.writeAttr("selectedConnectionColor", colorSettings.selectedConnectionColor);
1812  dev.writeAttr("selectedContainerColor", colorSettings.selectedContainerColor);
1813  dev.writeAttr("selectedContainerPlanColor", colorSettings.selectedContainerPlanColor);
1814  dev.writeAttr("selectedCrossingColor", colorSettings.selectedCrossingColor);
1815  dev.writeAttr("selectedEdgeColor", colorSettings.selectedEdgeColor);
1816  dev.writeAttr("selectedEdgeDataColor", colorSettings.selectedEdgeDataColor);
1817  dev.writeAttr("selectedLaneColor", colorSettings.selectedLaneColor);
1818  dev.writeAttr("selectedPersonColor", colorSettings.selectedPersonColor);
1819  dev.writeAttr("selectedPersonPlanColor", colorSettings.selectedPersonPlanColor);
1820  dev.writeAttr("selectedProhibitionColor", colorSettings.selectedProhibitionColor);
1821  dev.writeAttr("selectedRouteColor", colorSettings.selectedRouteColor);
1822  dev.writeAttr("selectedVehicleColor", colorSettings.selectedVehicleColor);
1823  dev.writeAttr("selectionColor", colorSettings.selectionColor);
1824  dev.writeAttr("stopColor", colorSettings.stopColor);
1825  dev.writeAttr("stopContainerColor", colorSettings.stopContainerColor);
1826  dev.writeAttr("stopPersonColor", colorSettings.stopPersonColor);
1827  dev.writeAttr("trainStopColor", colorSettings.trainStopColor);
1828  dev.writeAttr("trainStopColorSign", colorSettings.trainStopColorSign);
1829  dev.writeAttr("transhipColor", colorSettings.transhipColor);
1830  dev.writeAttr("transhipWidth", widthSettings.transhipWidth);
1831  dev.writeAttr("transportColor", colorSettings.transportColor);
1832  dev.writeAttr("transportWidth", widthSettings.transportWidth);
1833  dev.writeAttr("tripWidth", widthSettings.tripWidth);
1834  dev.writeAttr("vehicleTripColor", colorSettings.personTripColor);
1835  dev.writeAttr("walkColor", colorSettings.walkColor);
1836  dev.writeAttr("walkWidth", widthSettings.walkWidth);
1837  dev.closeTag();
1838  // pois
1840  dev.writeAttr("poiTextParam", poiTextParam);
1841  poiSize.print(dev, "poi");
1842  dev.writeAttr("poiDetail", poiDetail);
1843  poiName.print(dev, "poiName");
1844  poiType.print(dev, "poiType");
1845  poiText.print(dev, "poiText");
1846  poiColorer.save(dev);
1847  dev.closeTag();
1848  // polys
1850  polySize.print(dev, "poly");
1851  polyName.print(dev, "polyName");
1852  polyType.print(dev, "polyType");
1853  polyColorer.save(dev);
1854  dev.closeTag();
1855  // legend
1857  dev.writeAttr("showSizeLegend", showSizeLegend);
1858  dev.writeAttr("showColorLegend", showColorLegend);
1859  dev.writeAttr("showVehicleColorLegend", showVehicleColorLegend);
1860  dev.closeTag();
1861 
1862  dev.closeTag();
1863 }
1864 
1865 
1866 bool
1868  if (dither != v2.dither) {
1869  return false;
1870  }
1871  if (fps != v2.fps) {
1872  return false;
1873  }
1874  if (drawBoundaries != v2.drawBoundaries) {
1875  return false;
1876  }
1878  return false;
1879  }
1881  return false;
1882  }
1883  if (backgroundColor != v2.backgroundColor) {
1884  return false;
1885  }
1886  if (colorSettings != v2.colorSettings) {
1887  return false;
1888  }
1889  if (showGrid != v2.showGrid) {
1890  return false;
1891  }
1892  if (gridXSize != v2.gridXSize) {
1893  return false;
1894  }
1895  if (gridYSize != v2.gridYSize) {
1896  return false;
1897  }
1898 
1899  if (!(edgeColorer == v2.edgeColorer)) {
1900  return false;
1901  }
1902  if (!(edgeScaler == v2.edgeScaler)) {
1903  return false;
1904  }
1905  if (!(laneColorer == v2.laneColorer)) {
1906  return false;
1907  }
1908  if (!(laneScaler == v2.laneScaler)) {
1909  return false;
1910  }
1911  if (laneShowBorders != v2.laneShowBorders) {
1912  return false;
1913  }
1914  if (showBikeMarkings != v2.showBikeMarkings) {
1915  return false;
1916  }
1917  if (showLinkDecals != v2.showLinkDecals) {
1918  return false;
1919  }
1921  return false;
1922  }
1923  if (showLinkRules != v2.showLinkRules) {
1924  return false;
1925  }
1926  if (showRails != v2.showRails) {
1927  return false;
1928  }
1929  if (edgeName != v2.edgeName) {
1930  return false;
1931  }
1932  if (internalEdgeName != v2.internalEdgeName) {
1933  return false;
1934  }
1935  if (cwaEdgeName != v2.cwaEdgeName) {
1936  return false;
1937  }
1938  if (streetName != v2.streetName) {
1939  return false;
1940  }
1941  if (edgeValue != v2.edgeValue) {
1942  return false;
1943  }
1944  if (hideConnectors != v2.hideConnectors) {
1945  return false;
1946  }
1948  return false;
1949  }
1950  if (laneMinSize != v2.laneMinSize) {
1951  return false;
1952  }
1954  return false;
1955  }
1956  if (showSublanes != v2.showSublanes) {
1957  return false;
1958  }
1959  if (spreadSuperposed != v2.spreadSuperposed) {
1960  return false;
1961  }
1962  if (edgeParam != v2.edgeParam) {
1963  return false;
1964  }
1965  if (laneParam != v2.laneParam) {
1966  return false;
1967  }
1968  if (vehicleParam != v2.vehicleParam) {
1969  return false;
1970  }
1972  return false;
1973  }
1974  if (vehicleTextParam != v2.vehicleTextParam) {
1975  return false;
1976  }
1977  if (edgeData != v2.edgeData) {
1978  return false;
1979  }
1981  return false;
1982  }
1984  return false;
1985  }
1986  if (!(vehicleColorer == v2.vehicleColorer)) {
1987  return false;
1988  }
1989  if (!(vehicleScaler == v2.vehicleScaler)) {
1990  return false;
1991  }
1992  if (vehicleQuality != v2.vehicleQuality) {
1993  return false;
1994  }
1995  if (vehicleSize != v2.vehicleSize) {
1996  return false;
1997  }
1998  if (showBlinker != v2.showBlinker) {
1999  return false;
2000  }
2002  return false;
2003  }
2004  if (drawMinGap != v2.drawMinGap) {
2005  return false;
2006  }
2007  if (drawBrakeGap != v2.drawBrakeGap) {
2008  return false;
2009  }
2010  if (showBTRange != v2.showBTRange) {
2011  return false;
2012  }
2013  if (showRouteIndex != v2.showRouteIndex) {
2014  return false;
2015  }
2016  if (scaleLength != v2.scaleLength) {
2017  return false;
2018  }
2019  if (showParkingInfo != v2.showParkingInfo) {
2020  return false;
2021  }
2022  if (vehicleName != v2.vehicleName) {
2023  return false;
2024  }
2025  if (vehicleValue != v2.vehicleValue) {
2026  return false;
2027  }
2029  return false;
2030  }
2031  if (vehicleText != v2.vehicleText) {
2032  return false;
2033  }
2034  if (!(personColorer == v2.personColorer)) {
2035  return false;
2036  }
2037  if (personQuality != v2.personQuality) {
2038  return false;
2039  }
2040  if (personSize != v2.personSize) {
2041  return false;
2042  }
2043  if (personName != v2.personName) {
2044  return false;
2045  }
2046  if (personValue != v2.personValue) {
2047  return false;
2048  }
2049  if (!(containerColorer == v2.containerColorer)) {
2050  return false;
2051  }
2052  if (containerQuality != v2.containerQuality) {
2053  return false;
2054  }
2055  if (containerSize != v2.containerSize) {
2056  return false;
2057  }
2058  if (containerName != v2.containerName) {
2059  return false;
2060  }
2061  if (!(junctionColorer == v2.junctionColorer)) {
2062  return false;
2063  }
2064  if (!(poiColorer == v2.poiColorer)) {
2065  return false;
2066  }
2067  if (!(polyColorer == v2.polyColorer)) {
2068  return false;
2069  }
2070  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
2071  return false;
2072  }
2074  return false;
2075  }
2076  if (junctionID != v2.junctionID) {
2077  return false;
2078  }
2079  if (junctionName != v2.junctionName) {
2080  return false;
2081  }
2083  return false;
2084  }
2085  if (tlsPhaseIndex != v2.tlsPhaseIndex) {
2086  return false;
2087  }
2088  if (tlsPhaseName != v2.tlsPhaseName) {
2089  return false;
2090  }
2091 
2092  if (showLane2Lane != v2.showLane2Lane) {
2093  return false;
2094  }
2095 
2097  return false;
2098  }
2099 
2101  return false;
2102  }
2103  if (junctionSize != v2.junctionSize) {
2104  return false;
2105  }
2106 
2107  if (addMode != v2.addMode) {
2108  return false;
2109  }
2110  if (addSize != v2.addSize) {
2111  return false;
2112  }
2113  if (addName != v2.addName) {
2114  return false;
2115  }
2116  if (addFullName != v2.addFullName) {
2117  return false;
2118  }
2119  if (poiSize != v2.poiSize) {
2120  return false;
2121  }
2122  if (poiDetail != v2.poiDetail) {
2123  return false;
2124  }
2125  if (poiName != v2.poiName) {
2126  return false;
2127  }
2128  if (poiType != v2.poiType) {
2129  return false;
2130  }
2131  if (poiText != v2.poiText) {
2132  return false;
2133  }
2134  if (poiTextParam != v2.poiTextParam) {
2135  return false;
2136  }
2137  if (polySize != v2.polySize) {
2138  return false;
2139  }
2140  if (polyName != v2.polyName) {
2141  return false;
2142  }
2143  if (polyType != v2.polyType) {
2144  return false;
2145  }
2146 
2147  if (showSizeLegend != v2.showSizeLegend) {
2148  return false;
2149  }
2150  if (showColorLegend != v2.showColorLegend) {
2151  return false;
2152  }
2154  return false;
2155  }
2156  if (!(dataColorer == v2.dataColorer)) {
2157  return false;
2158  }
2159  if (!(dataValue == v2.dataValue)) {
2160  return false;
2161  }
2163  return false;
2164  }
2166  return false;
2167  }
2168  if (!(relDataAttr == v2.relDataAttr)) {
2169  return false;
2170  }
2171  if (!(dataValueHideCheck == v2.dataValueHideCheck)) {
2172  return false;
2173  }
2175  return false;
2176  }
2177 
2178  return true;
2179 }
2180 
2181 
2182 const RGBColor&
2184  switch (ls) {
2189  case LINKSTATE_TL_RED:
2190  return SUMO_color_TL_RED;
2192  return SUMO_color_TL_REDYELLOW;
2201  case LINKSTATE_MAJOR:
2202  return realistic ? RGBColor::INVISIBLE : SUMO_color_MAJOR;
2203  case LINKSTATE_MINOR:
2204  return realistic ? SUMO_color_MAJOR : SUMO_color_MINOR;
2205  case LINKSTATE_EQUAL:
2206  return SUMO_color_EQUAL;
2207  case LINKSTATE_STOP:
2208  return realistic ? SUMO_color_MAJOR : SUMO_color_STOP;
2209  case LINKSTATE_ALLWAY_STOP:
2210  return realistic ? SUMO_color_MAJOR : SUMO_color_ALLWAY_STOP;
2211  case LINKSTATE_ZIPPER:
2212  return realistic ? RGBColor::INVISIBLE : SUMO_color_ZIPPER;
2213  case LINKSTATE_DEADEND:
2214  return SUMO_color_DEADEND;
2215  default:
2216  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
2217  }
2218 }
2219 
2220 
2221 double
2222 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
2223  double viewAngle = objectAngle - angle;
2224  while (viewAngle < 0) {
2225  viewAngle += 360;
2226  }
2227  // fmod round towards zero which is not want we want for negative numbers
2228  viewAngle = fmod(viewAngle, 360);
2229  if (viewAngle > 90 && viewAngle < 270) {
2230  // avoid reading text on it's head
2231  objectAngle -= 180;
2232  }
2233  return objectAngle;
2234 }
2235 
2236 bool
2238  double viewAngle = objectAngle - angle;
2239  while (viewAngle < 0) {
2240  viewAngle += 360;
2241  }
2242  // fmod round towards zero which is not want we want for negative numbers
2243  viewAngle = fmod(viewAngle, 360);
2244  return (viewAngle > 90 && viewAngle < 270);
2245 }
2246 
2247 
2248 
2249 bool
2250 GUIVisualizationSettings::drawAdditionals(const double exaggeration) const {
2251  return (scale * exaggeration) > 1.;
2252 }
2253 
2254 
2255 bool
2256 GUIVisualizationSettings::drawDetail(const double detail, const double exaggeration) const {
2257  if (detail <= 0) {
2258  return true;
2259  } else {
2260  return ((scale * exaggeration) >= detail);
2261  }
2262 }
2263 
2264 
2265 int
2268  return 8;
2269  } else if (scale >= 10) {
2270  return 32;
2271  } else if (scale >= 2) {
2272  return 16;
2273  } else {
2274  return 8;
2275  }
2276 }
2277 
2278 
2279 bool
2280 GUIVisualizationSettings::drawDottedContour(const double exaggeration) const {
2282  return false;
2283  } else {
2284  return (scale * exaggeration) > 3.;
2285  }
2286 }
2287 
2288 
2289 bool
2290 GUIVisualizationSettings::drawMovingGeometryPoint(const double exaggeration, const double radius) const {
2291  return (scale * radius * exaggeration > 10);
2292 }
2293 
2294 /****************************************************************************/
GUISelectedStorage gSelected
A global holder of selected objects.
GUIPropertyScheme< RGBColor > GUIColorScheme
GUIPropertyScheme< double > GUIScaleScheme
const RGBColor SUMO_color_EQUAL(128, 128, 128)
#define COL_SCHEME_DYNAMIC
const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192)
const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0)
const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255)
const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0)
const RGBColor SUMO_color_TL_RED(255, 0, 0)
const RGBColor SUMO_color_MAJOR(255, 255, 255)
const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0)
const RGBColor SUMO_color_ZIPPER(192, 128, 64)
#define COL_SCHEME_MISC
const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0)
#define COL_SCHEME_EMISSION
const RGBColor SUMO_color_DEADEND(0, 0, 0)
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0)
const RGBColor SUMO_color_MINOR(51, 51, 51)
const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0)
const RGBColor SUMO_color_STOP(128, 0, 128)
const SVCPermissions SVCAll
all VClasses are allowed
@ SVC_SHIP
is an arbitrary ship
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_NON_ROAD
classes which (normally) do not drive on normal roads
@ SVC_DELIVERY
vehicle is a small delivery vehicle
@ SVC_MOPED
vehicle is a moped
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
@ SVC_PEDESTRIAN
pedestrian
@ SUMO_TAG_VIEWSETTINGS_POIS
@ SUMO_TAG_VIEWSETTINGS_BACKGROUND
@ SUMO_TAG_VIEWSETTINGS_LEGEND
@ SUMO_TAG_VIEWSETTINGS_OPENGL
@ SUMO_TAG_VIEWSETTINGS_ADDITIONALS
@ SUMO_TAG_VIEWSETTINGS_PERSONS
@ SUMO_TAG_VIEWSETTINGS_JUNCTIONS
@ SUMO_TAG_VIEWSETTINGS_VEHICLES
@ SUMO_TAG_VIEWSETTINGS_EDGES
@ SUMO_TAG_VIEWSETTINGS_SCHEME
@ SUMO_TAG_VIEWSETTINGS_POLYS
@ SUMO_TAG_VIEWSETTINGS_CONTAINERS
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic,...
@ LINKSTATE_TL_REDYELLOW
The link has red light (must brake) but indicates upcoming green.
@ LINKSTATE_ALLWAY_STOP
This is an uncontrolled, all-way stop link.
@ LINKSTATE_MAJOR
This is an uncontrolled, major link, may pass.
@ LINKSTATE_STOP
This is an uncontrolled, minor link, has to stop.
@ LINKSTATE_TL_YELLOW_MAJOR
The link has yellow light, may pass.
@ LINKSTATE_TL_GREEN_MAJOR
The link has green light, may pass.
@ LINKSTATE_EQUAL
This is an uncontrolled, right-before-left link.
@ LINKSTATE_DEADEND
This is a dead end link.
@ LINKSTATE_ZIPPER
This is an uncontrolled, zipper-merge link.
@ LINKSTATE_TL_OFF_BLINKING
The link is controlled by a tls which is off and blinks, has to brake.
@ LINKSTATE_TL_YELLOW_MINOR
The link has yellow light, has to brake anyway.
@ LINKSTATE_TL_RED
The link has red light (must brake)
@ LINKSTATE_TL_GREEN_MINOR
The link has green light, has to brake.
@ LINKSTATE_MINOR
This is an uncontrolled, minor link, has to brake.
@ LINKSTATE_TL_OFF_NOSIGNAL
The link is controlled by a tls which is off, not blinking, may pass.
@ SUMO_ATTR_NAME
const double INVALID_DOUBLE
Definition: StdDefs.h:63
T MAX2(T a, T b)
Definition: StdDefs.h:80
void setAllowsNegativeValues(bool value)
int addColor(const T &color, const double threshold, const std::string &name="")
void save(OutputDevice &dev, const std::string &prefix="") const
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
Stores the information about how to visualize structures.
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings tlsPhaseIndex
GUIVisualizationTextSettings vehicleName
GUIVisualizationTextSettings junctionName
void initNeteditDefaults()
init default settings
bool operator==(const GUIVisualizationSettings &vs2)
Comparison operator.
RGBColor backgroundColor
The background color to use.
GUIVisualizationSettings(bool _netedit=false)
constructor
GUIVisualizationSizeSettings vehicleSize
GUIVisualizationSizeSettings containerSize
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings internalEdgeName
GUIVisualizationSizeSettings junctionSize
static const std::string SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL
bool drawBoundaries
enable or disable draw boundaries
bool dataValueHideCheck
value below which relation data value should not be rendered
static const std::string SCHEME_NAME_EDGEDATA_NUMERICAL
bool showBikeMarkings
Information whether bicycle lane marking shall be drawn.
GUIScaler laneScaler
The lane scaler.
bool dither
Information whether dithering shall be enabled.
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings personValue
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
GUIVisualizationTextSettings poiType
GUIVisualizationSizeSettings addSize
static const std::string SCHEME_NAME_SELECTION
std::string name
The name of this setting.
GUIColorer edgeColorer
The mesoscopic edge colorer.
int containerQuality
The quality of container drawing.
GUIVisualizationTextSettings internalJunctionName
GUIVisualizationTextSettings vehicleScaleValue
GUIVisualizationSizeSettings poiSize
bool drawJunctionShape
whether the shape of the junction should be drawn
std::string edgeData
key for coloring by edgeData
GUIVisualizationTextSettings dataValue
bool flippedTextAngle(double objectAngle) const
return wether the text was flipped for reading at the given angle
bool realisticLinkRules
Information whether link rules (colored bars) shall be drawn with a realistic color scheme.
int personQuality
The quality of person drawing.
GUIColorer poiColorer
The POI colorer.
GUIVisualizationWidthSettings widthSettings
width settings
GUIVisualizationTextSettings poiName
std::string vehicleScaleParam
key for scaling by vehicle parameter
bool showParkingInfo
Set whether parking related information should be shown.
GUIVisualizationTextSettings vehicleValue
GUIColorer polyColorer
The polygon colorer.
int vehicleQuality
The quality of vehicle drawing.
GUIVisualizationTextSettings drawLinkJunctionIndex
bool drawForPositionSelection
whether drawing is performed for the purpose of selecting objects with a single click
static const std::string SCHEME_NAME_LANE_PARAM_NUMERICAL
GUIVisualizationTextSettings addFullName
GUIVisualizationTextSettings edgeValue
bool fps
Information whether frames-per-second should be drawn.
std::string vehicleParam
key for coloring by vehicle parameter
bool showRails
Information whether rails shall be drawn.
GUIVisualizationSizeSettings personSize
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIVisualizationTextSettings cwaEdgeName
GUIVisualizationTextSettings junctionID
std::string vehicleTextParam
key for rendering vehicle textual parameter
bool drawAdditionals(const double exaggeration) const
check if additionals must be drawn
bool drawMovingGeometryPoint(const double exaggeration, const double radius) const
check if moving geometry point can be draw
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
GUIVisualizationColorSettings colorSettings
color settings
bool showSublanes
Whether to show sublane boundaries.
bool showGrid
Information whether a grid shall be shown.
bool scaleLength
Whether vehicle length shall be scaled with length/geometry factor.
static const std::string SCHEME_NAME_TYPE
bool showVehicleColorLegend
Information whether the vehicle color legend shall be drawn.
double edgeRelWidthExaggeration
The edgeRelation exaggeration (upscale thickness)
bool hideConnectors
flag to show or hidde connectors
GUIScaler vehicleScaler
The size scaling settings for vehicles.
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
bool drawDottedContour(const double exaggeration) const
check if dotted contour can be drawn
GUIColorer personColorer
The person colorer.
void save(OutputDevice &dev) const
Writes the settings into an output device.
GUIScaleScheme & getLaneEdgeScaleScheme()
Returns the current lane (edge) scaling schme.
static const RGBColor & getLinkColor(const LinkState &ls, bool realistic=false)
map from LinkState to color constants
int getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
double scale
information about a lane's width (temporary, used for a single view)
bool forceDrawForRectangleSelection
flag to force draw for rectangle selection (see drawForRectangleSelection)
bool netedit
Whether the settings are for Netedit.
bool showLaneDirection
Whether to show direction indicators for lanes.
bool edgeValueHideCheck
value below which edge data value should not be rendered
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
GUIScaler edgeScaler
The mesoscopic edge scaler.
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
bool drawMinGap
Information whether the minimum gap shall be drawn.
GUIVisualizationTextSettings streetName
GUIVisualizationTextSettings poiText
GUIVisualizationTextSettings vehicleText
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
GUIColorer laneColorer
The lane colorer.
GUIVisualizationTextSettings polyName
double tazRelWidthExaggeration
The tazRelation exaggeration (upscale thickness)
bool laneShowBorders
Information whether lane borders shall be drawn.
GUIVisualizationTextSettings tlsPhaseName
GUIVisualizationTextSettings edgeName
bool showSizeLegend
Information whether the size legend shall be drawn.
double laneMinSize
The minimum visual lane width for drawing.
GUIVisualizationTextSettings drawLinkTLIndex
GUIVisualizationTextSettings containerName
GUIVisualizationSizeSettings polySize
GUIColorer containerColorer
The container colorer.
double gridXSize
Information about the grid spacings.
bool showBTRange
Information whether the communication range shall be drawn.
bool forceDrawForPositionSelection
flag to force draw for position selection (see drawForPositionSelection)
GUIVisualizationTextSettings personName
bool showColorLegend
Information whether the edge color legend shall be drawn.
std::string poiTextParam
key for rendering poi textual parameter
int getCircleResolution() const
function to calculate circle resolution for all circles drawn in drawGL(...) functions
bool showRouteIndex
Information whether the route index should be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
static const std::string SCHEME_NAME_EDGE_PARAM_NUMERICAL
scheme names
double selectorFrameScale
the current selection scaling in NETEDIT (set in SelectorFrame)
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
int addMode
The additional structures visualization scheme.
std::string relDataAttr
key for coloring by edgeRelation / tazRelation attribute
GUIColorer junctionColorer
The junction colorer.
static const std::string SCHEME_NAME_PERMISSION_CODE
static const std::string SCHEME_NAME_PARAM_NUMERICAL
std::string edgeParam
key for coloring by edge parameter
bool drawBrakeGap
Information whether the brake gap shall be drawn.
bool drawLaneChangePreference
Information whether the lane change preference shall be drawn.
double getTextAngle(double objectAngle) const
return an angle that is suitable for reading text aligned with the given angle (degrees)
GUIVisualizationTextSettings polyType
int poiDetail
The detail level for drawing POIs.
double angle
The current view rotation angle.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
void lf()
writes a line feed if applicable
Definition: OutputDevice.h:236
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:248
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static const RGBColor BLUE
Definition: RGBColor.h:187
static const RGBColor GREY
Definition: RGBColor.h:194
static const RGBColor YELLOW
Definition: RGBColor.h:188
static const RGBColor INVISIBLE
Definition: RGBColor.h:195
static const RGBColor ORANGE
Definition: RGBColor.h:191
static const RGBColor CYAN
Definition: RGBColor.h:189
static const RGBColor GREEN
Definition: RGBColor.h:186
static const RGBColor BLACK
Definition: RGBColor.h:193
static const RGBColor MAGENTA
Definition: RGBColor.h:190
static const RGBColor RED
named colors
Definition: RGBColor.h:185
static const double routeProbeSize
RouteProbe size.
static const RGBColor calibratorColor
color for Calibrators
static const double calibratorWidth
Calibrator width.
static const double vaporizerSize
Vaporizer size.
static const double arrowLength
arrow length
static const double rerouterSize
rerouter size
static const double calibratorHeight
Calibrator height.
static const RGBColor VSSColor
color for VSS
static const double arrowWidth
arrow width
static const RGBColor connectionColor
connection color
static const double arrowOffset
arrow offset
static const RGBColor vaporizerColor
color for vaporizers
static const RGBColor rerouterColor
color for rerouters
static const RGBColor connectionColorSelected
connection color selected
static const RGBColor routeProbeColor
color for route probes
static const RGBColor special
color for selected special candidate element (Usually selected using shift+click)
static const RGBColor conflict
color for selected conflict candidate element (Usually selected using ctrl+click)
static const RGBColor target
color for selected candidate target
static const RGBColor possible
color for possible candidate element
static const RGBColor source
color for selected candidate source
RGBColor vehicleTripColor
color for vehicle trips
RGBColor parkingSpaceColorContour
color for parkingSpace contour
RGBColor selectionColor
basic selection color
static const RGBColor childConnectionColor
color for child connections between parents and child elements
RGBColor selectedEdgeColor
edge selection color
RGBColor selectedPersonPlanColor
person plan selection color (Rides, Walks, stopPersons...)
static const RGBColor SUMO_color_DEADEND_SHOW
color for highlighthing deadends
RGBColor stopPersonColor
color for stopPersons
RGBColor selectedCrossingColor
crossings selection color
static const RGBColor crossingPriorityColor
color for priority crossing
RGBColor chargingStationColor
color for chargingStations
RGBColor parkingSpaceColor
color for parkingSpace innen
RGBColor selectedLaneColor
lane selection color
static const RGBColor crossingInvalidColor
color for invalid crossing
RGBColor selectedRouteColor
route selection color (used for routes and vehicle stops)
RGBColor selectedEdgeDataColor
edge data selection color
bool operator==(const GUIVisualizationColorSettings &other)
equality comparator
RGBColor trainStopColorSign
color for trainStops signs
RGBColor transhipColor
color for tranships
static const RGBColor crossingColor
color for crossings
static const RGBColor editShapeColor
color for edited shapes (Junctions, crossings and connections)
RGBColor containerStopColor
color for containerStops
RGBColor selectedProhibitionColor
prohibition selection color
RGBColor selectedConnectionColor
connection selection color
RGBColor busStopColorSign
color for busStops signs
RGBColor selectedContainerColor
container selection color
RGBColor containerStopColorSign
color for containerStop signs
RGBColor selectedAdditionalColor
additional selection color (busStops, Detectors...)
RGBColor parkingAreaColorSign
color for parkingArea sign
RGBColor transportColor
color for transport
RGBColor busStopColor
color for busStops
bool operator!=(const GUIVisualizationColorSettings &other)
inequality comparator
RGBColor selectedVehicleColor
vehicle selection color
RGBColor chargingStationColorCharge
color for chargingStation during charging
RGBColor parkingAreaColor
color for parkingAreas
RGBColor selectedPersonColor
person selection color
RGBColor selectedContainerPlanColor
container plan selection color (Rides, Walks, containerStops...)
RGBColor personTripColor
color for stopPersons
RGBColor stopContainerColor
color for containerStops
RGBColor trainStopColor
color for trainStops
RGBColor chargingStationColorSign
color for chargingStation sign
static const double connectionWidth
connection width
static const double laneTextures
details for lane textures
static const double additionalTextures
details for additional textures
static const double lockIcon
lock icons
static const double vehicleTriangles
details for draw person as triangles
static const double vehicleShapes
details for draw person as shapes
static const double detectorDetails
details for detectors
static const double personShapes
details for draw person as person shapes
static const double stoppingPlaceDetails
details for stopping places
static const double connectionsDemandMode
draw connections in demand mode
static const double detectorText
details for detector texts
static const double stoppingPlaceText
details for stopping place texts
static const double stopsText
details for stop texts
static const double personTriangles
details for draw person as triangles
static const double stopsDetails
details for stops
static const double geometryPointsDetails
details for Geometry Points
static const double vehicleBoxes
details for draw person as boxes
static const double calibratorText
details for calibrator text
static const double personCircles
details for draw person as circles
static const double personExaggeration
Exaggeration for persons (only used in NETEDIT)
static const double geometryPointsText
details for Geometry Points Texts
static const double E3EntryExitWidth
E3 Entry/Exit detector width.
static const RGBColor E2Color
color for E2 detectors
static const double E1InstantHeight
E1 Instant detector heights.
static const double E2Width
E2 detector widths.
static const RGBColor E3ExitColor
color for Exits
static const double E3Size
E3 detector size.
static const RGBColor E1Color
color for E1 detectors
static const double E1Width
E1 detector widths.
static const RGBColor E3EntryColor
color for Entrys
static const double E1InstantWidth
E1 Instant detector widths.
static const double E3EntryExitHeight
E3 Entry/Exit detector height.
static const RGBColor E1InstantColor
color for E1 Instant detectors
static const double E1Height
E1 Instant detector heights.
static const RGBColor firstFrontColor
first color of dotted front contour
static const RGBColor firstInspectedColor
first color of dotted inspected contour
static const RGBColor secondFrontColor
second color of dotted front contour
static const double segmentWidth
width of dotted contour segments
static const RGBColor secondInspectedColor
second color of dotted inspectedcontour
static const double segmentLength
length of dotted contour segments
static const double crossingGeometryPointRadius
moving crossing geometry point radius
static const double polygonGeometryPointRadius
moving geometry point radius
static const double connectionGeometryPointRadius
moving connection geometry point radius
static const double additionalGeometryPointRadius
moving additional geometry point radius
static const double junctionGeometryPointRadius
moving junction geometry point radius
static const double laneGeometryPointRadius
moving lane geometry point radius
static const double junctionBubbleRadius
junction buuble radius
static const double polygonContourWidth
polygon contour width
static const double polylineWidth
poly line width
static const double edgeGeometryPointRadius
moving edge geometry point radius
bool operator!=(const GUIVisualizationSizeSettings &other)
inequality comparator
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
GUIVisualizationSizeSettings(double _minSize, double _exaggeration=1.0, bool _constantSize=false, bool _constantSizeSelected=false)
constructor
double exaggeration
The size exaggeration (upscale)
bool constantSize
whether the object shall be drawn with constant size regardless of zoom
void print(OutputDevice &dev, const std::string &name) const
print values in output device
double minSize
The minimum size to draw this object.
bool operator==(const GUIVisualizationSizeSettings &other)
equality comparator
bool constantSizeSelected
whether only selected objects shall be drawn with constant
static const double stoppingPlaceSignOffset
busStop offset
static const double chargingStationWidth
chargingStation width
static const double busStopWidth
busStop width
static const double containerStopWidth
containerStop width
static const double trainStopWidth
trainStop width
void print(OutputDevice &dev, const std::string &name) const
print values in output device
bool operator==(const GUIVisualizationTextSettings &other)
equality comparator
bool show(const GUIGlObject *o) const
whether to show the text
RGBColor bgColor
background text color
bool operator!=(const GUIVisualizationTextSettings &other)
inequality comparator
GUIVisualizationTextSettings(bool _show, double _size, RGBColor _color, RGBColor _bgColor=RGBColor(128, 0, 0, 0), bool _constSize=true, bool _onlySelected=false)
constructor
bool onlySelected
whether only selected objects shall have text drawn
double scaledSize(double scale, double constFactor=0.1) const
get scale size
bool constSize
@brif flag to avoid size changes
bool operator!=(const GUIVisualizationWidthSettings &other)
inequality comparator
bool operator==(const GUIVisualizationWidthSettings &other)
equality comparator
double personTripWidth
width for person trips
static const double embeddedRouteWidth
width for embeddedroutes
static const double routeWidth
width for routes