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.dev/sumo
3 // Copyright (C) 2001-2024 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>
28 
30 #include "GUIPropertyScheme.h"
31 
32 // ===========================================================================
33 // static members
34 // ===========================================================================
35 
37 
38 // -------------------------------------------------------------------------
39 // color constants for link states
40 // -------------------------------------------------------------------------
41 
44 const RGBColor SUMO_color_TL_RED(255, 0, 0);
45 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
46 const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 128);
50 const RGBColor SUMO_color_MAJOR(255, 255, 255);
51 const RGBColor SUMO_color_MINOR(51, 51, 51);
52 const RGBColor SUMO_color_EQUAL(128, 128, 128);
53 const RGBColor SUMO_color_STOP(128, 0, 128);
55 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
57 
58 // -------------------------------------------------------------------------
59 // color constants for other objects
60 // -------------------------------------------------------------------------
61 
68 
69 
70 // -------------------------------------------------------------------------
71 // color constants for other objects
72 // -------------------------------------------------------------------------
73 
75 const RGBColor GUIVisualizationCandidateColorSettings::source(0, 255, 255, 255); // Cyan
76 const RGBColor GUIVisualizationCandidateColorSettings::target(0, 255, 0, 255); // Green
77 const RGBColor GUIVisualizationCandidateColorSettings::special(255, 0, 255, 255); // Magenta
78 const RGBColor GUIVisualizationCandidateColorSettings::conflict(255, 255, 0, 255); // Yellow
79 const RGBColor GUIVisualizationCandidateColorSettings::invalid(128, 128, 128, 255); // Yellow
80 
81 // -------------------------------------------------------------------------
82 // Netedit size values
83 // -------------------------------------------------------------------------
84 
95 
96 // -------------------------------------------------------------------------
97 // additional values
98 // -------------------------------------------------------------------------
99 
101 
102 // -------------------------------------------------------------------------
103 // additional values
104 // -------------------------------------------------------------------------
105 
128 
129 // -------------------------------------------------------------------------
130 // detector values
131 // -------------------------------------------------------------------------
132 
146 
147 // -------------------------------------------------------------------------
148 // StoppingPlace values
149 // -------------------------------------------------------------------------
150 
159 
160 // -------------------------------------------------------------------------
161 // Dotted contour values
162 // -------------------------------------------------------------------------
163 
172 
173 // -------------------------------------------------------------------------
174 // 3D light presets
175 // -------------------------------------------------------------------------
176 const RGBColor OSG_color_AMBIENT(32, 32, 32, 255);
177 const RGBColor OSG_color_DIFFUSE(64, 64, 64, 255);
178 const RGBColor OSG_color_SKY(51, 51, 102, 255);
179 
180 // -------------------------------------------------------------------------
181 // widths of certain netedit objects
182 // -------------------------------------------------------------------------
183 
186 
187 // -------------------------------------------------------------------------
188 // details of certain netedit objects (0 = drawn always)
189 // -------------------------------------------------------------------------
190 
192 
193 // -------------------------------------------------------------------------
194 // scheme names
195 // -------------------------------------------------------------------------
196 
197 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL("by param (numerical, streetwise)");
198 const std::string GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL("by param (numerical, lanewise)");
199 const std::string GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL("by param (numerical)");
200 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL("by edgeData (numerical, streetwise)");
201 const std::string GUIVisualizationSettings::SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL("by attribute (numerical)");
202 const std::string GUIVisualizationSettings::SCHEME_NAME_SELECTION("by selection");
203 const std::string GUIVisualizationSettings::SCHEME_NAME_TYPE("by type");
204 const std::string GUIVisualizationSettings::SCHEME_NAME_PERMISSION_CODE("by permission code");
205 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_LIVE("by live edgeData");
206 
207 const double GUIVisualizationSettings::MISSING_DATA(std::numeric_limits<double>::max());
209 
210 std::map<std::string, std::vector<RGBColor> > GUIVisualizationSettings::RAINBOW_SCHEMES({
211  // cannot use predefined colors to avoid "static initialization order fiasco"
212  {"classic", std::vector<RGBColor>({RGBColor(255, 0, 0), RGBColor(255, 128, 0), RGBColor(255, 255, 0), RGBColor(0, 255, 0), RGBColor(0, 255, 255), RGBColor(0, 0, 255), RGBColor(255, 0, 255)})},
213  {"YlOrRd", std::vector<RGBColor>({RGBColor(255, 255, 178), RGBColor(254, 217, 118), RGBColor(254, 178, 76), RGBColor(253, 141, 60), RGBColor(252, 78, 42), RGBColor(227, 26, 28), RGBColor(177, 0, 38)})},
214  {"RdBu", std::vector<RGBColor>({RGBColor(178, 24, 43), RGBColor(239, 138, 98), RGBColor(253, 219, 199), RGBColor(247, 247, 247), RGBColor(209, 229, 240), RGBColor(103, 169, 207), RGBColor(33, 102, 172)})},
215 });
216 
217 // color constants for scheme background
218 #define COL_SCHEME_EMISSION RGBColor(255,255,210)
219 #define COL_SCHEME_MISC RGBColor(210,220,255)
220 #define COL_SCHEME_STATIC RGBColor(230,230,230)
221 #define COL_SCHEME_DYNAMIC RGBColor(220,255,220)
222 
223 // ===========================================================================
224 // member method definitions
225 // ===========================================================================
226 
227 // ---------------------------------------------------------------------------
228 // GUIVisualizationTextSettings - methods
229 // ---------------------------------------------------------------------------
230 
231 GUIVisualizationTextSettings::GUIVisualizationTextSettings(bool _showText, double _size, RGBColor _color, RGBColor _bgColor, bool _constSize, bool _onlySelected) :
232  showText(_showText),
233  size(_size),
234  color(_color),
235  bgColor(_bgColor),
236  constSize(_constSize),
237  onlySelected(_onlySelected) {
238 }
239 
240 
241 bool
243  return (showText == other.showText) &&
244  (size == other.size) &&
245  (color == other.color) &&
246  (bgColor == other.bgColor) &&
247  (constSize == other.constSize) &&
248  (onlySelected == other.onlySelected);
249 }
250 
251 
252 bool
254  return (showText != other.showText) ||
255  (size != other.size) ||
256  (color != other.color) ||
257  (bgColor != other.bgColor) ||
258  (constSize != other.constSize) ||
259  (onlySelected != other.onlySelected);
260 }
261 
262 
263 void
264 GUIVisualizationTextSettings::print(OutputDevice& dev, const std::string& name) const {
265  dev.writeAttr(name + "_show", showText);
266  dev.writeAttr(name + "_size", size);
267  dev.writeAttr(name + "_color", color);
268  dev.writeAttr(name + "_bgColor", bgColor);
269  dev.writeAttr(name + "_constantSize", constSize);
270  dev.writeAttr(name + "_onlySelected", onlySelected);
271 }
272 
273 
274 double
275 GUIVisualizationTextSettings::scaledSize(double scale, double constFactor) const {
276  return constSize ? (size / scale) : (size * constFactor);
277 }
278 
279 
280 bool
282  return showText && (!onlySelected || o == nullptr || gSelected.isSelected(o));
283 }
284 
285 // ---------------------------------------------------------------------------
286 // GUIVisualizationRainbowSettings - methods
287 // ---------------------------------------------------------------------------
288 
289 GUIVisualizationRainbowSettings::GUIVisualizationRainbowSettings(bool _hideMin, double _minThreshold, bool _hideMax, double _maxThreshold, bool _setNeutral, double _neutralThreshold, bool _fixRange) :
290  hideMin(_hideMin),
291  minThreshold(_minThreshold),
292  hideMax(_hideMax),
293  maxThreshold(_maxThreshold),
294  setNeutral(_setNeutral),
295  neutralThreshold(_neutralThreshold),
296  fixRange(_fixRange),
297  colors(GUIVisualizationSettings::RAINBOW_SCHEMES["classic"])
298 { }
299 
300 
301 bool
303  return (hideMin == other.hideMin) &&
304  (minThreshold == other.minThreshold) &&
305  (hideMin == other.hideMin) &&
306  (maxThreshold == other.maxThreshold) &&
307  (setNeutral == other.setNeutral) &&
308  (neutralThreshold == other.neutralThreshold) &&
309  (fixRange == other.fixRange);
310 }
311 
312 
313 bool
315  return !((*this) == other);
316 }
317 
318 
319 void
320 GUIVisualizationRainbowSettings::print(OutputDevice& dev, const std::string& name) const {
321  dev.writeAttr(name + "HideCheck", hideMin);
322  dev.writeAttr(name + "HideThreshold", minThreshold);
323  dev.writeAttr(name + "HideCheck2", hideMax);
324  dev.writeAttr(name + "HideThreshold2", maxThreshold);
325  dev.writeAttr(name + "SetNeutral", setNeutral);
326  dev.writeAttr(name + "NeutralThreshold", neutralThreshold);
327  dev.writeAttr(name + "FixRange", fixRange);
328 }
329 
330 
331 // ---------------------------------------------------------------------------
332 // GUIVisualizationSizeSettings - methods
333 // ---------------------------------------------------------------------------
334 
335 GUIVisualizationSizeSettings::GUIVisualizationSizeSettings(double _minSize, double _exaggeration, bool _constantSize, bool _constantSizeSelected) :
336  minSize(_minSize),
337  exaggeration(_exaggeration),
338  constantSize(_constantSize),
339  constantSizeSelected(_constantSizeSelected) {
340 }
341 
342 
343 double
345  // declare exaggeration final
346  double exaggerationFinal;
348  if (constantSize && (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o))) {
349  exaggerationFinal = MAX2(exaggeration, exaggeration * factor / s.scale);
350  } else if (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o)) {
351  exaggerationFinal = exaggeration;
352  } else {
353  exaggerationFinal = 1;
354  }
355  // add selectorFrameScale
356  if ((o != nullptr) && gSelected.isSelected(o)) {
357  return (exaggerationFinal * s.selectorFrameScale);
358  } else {
359  return exaggerationFinal;
360  }
361 }
362 
363 
364 bool
366  return (constantSize == other.constantSize) &&
368  (minSize == other.minSize) &&
369  (exaggeration == other.exaggeration);
370 }
371 
372 
373 bool
375  return (constantSize != other.constantSize) ||
377  (minSize != other.minSize) ||
378  (exaggeration != other.exaggeration);
379 }
380 
381 
382 void
383 GUIVisualizationSizeSettings::print(OutputDevice& dev, const std::string& name) const {
384  dev.writeAttr(name + "_minSize", minSize);
385  dev.writeAttr(name + "_exaggeration", exaggeration);
386  dev.writeAttr(name + "_constantSize", constantSize);
387  dev.writeAttr(name + "_constantSizeSelected", constantSizeSelected);
388 }
389 
390 // ---------------------------------------------------------------------------
391 // GUIVisualizationColorSettings - methods
392 // ---------------------------------------------------------------------------
393 
395  selectionColor(0, 0, 204, 255),
396  selectedEdgeColor(0, 0, 204, 255),
397  selectedLaneColor(0, 0, 128, 255),
398  selectedConnectionColor(0, 0, 100, 255),
399  selectedProhibitionColor(0, 0, 120, 255),
400  selectedCrossingColor(0, 100, 196, 255),
401  selectedAdditionalColor(0, 0, 150, 255),
402  selectedRouteColor(0, 0, 150, 255),
403  selectedVehicleColor(0, 0, 100, 255),
404  selectedPersonColor(0, 0, 120, 255),
405  selectedPersonPlanColor(0, 0, 130, 255),
406  selectedContainerColor(0, 0, 120, 255),
407  selectedContainerPlanColor(0, 0, 130, 255),
408  selectedEdgeDataColor(0, 0, 150, 255),
409  busStopColor(76, 170, 50),
410  busStopColorSign(255, 235, 0),
411  trainStopColor(76, 170, 50),
412  trainStopColorSign(255, 235, 0),
413  containerStopColor(83, 89, 172),
414  containerStopColorSign(177, 184, 186, 171),
415  chargingStationColor(114, 210, 252),
416  chargingStationColorSign(255, 235, 0),
417  chargingStationColorCharge(255, 180, 0),
418  parkingAreaColor(83, 89, 172),
419  parkingAreaColorSign(177, 184, 186),
420  parkingSpaceColorContour(0, 255, 0),
421  parkingSpaceColor(255, 200, 200),
422  stopColor(220, 20, 30),
423  waypointColor(0, 127, 14),
424  vehicleTripColor(255, 128, 0),
425  stopPersonColor(255, 0, 0),
426  personTripColor(200, 0, 255),
427  walkColor(0, 255, 0),
428  rideColor(0, 0, 255),
429  stopContainerColor(255, 0, 0),
430  transportColor(100, 200, 0),
431  transhipColor(100, 0, 200) {
432 }
433 
434 
435 bool
437  return (selectionColor == v2.selectionColor) &&
450  (busStopColor == v2.busStopColor) &&
452  (trainStopColor == v2.trainStopColor) &&
463  (stopColor == v2.stopColor) &&
464  (waypointColor == v2.waypointColor) &&
468  (walkColor == v2.walkColor) &&
469  (rideColor == v2.rideColor) &&
471  (transportColor == v2.transportColor) &&
473 }
474 
475 
476 bool
478  return (selectionColor != v2.selectionColor) ||
491  (busStopColor != v2.busStopColor) ||
493  (trainStopColor != v2.trainStopColor) ||
504  (stopColor != v2.stopColor) ||
505  (waypointColor != v2.waypointColor) ||
509  (walkColor != v2.walkColor) ||
510  (rideColor != v2.rideColor) ||
512  (transportColor != v2.transportColor) ||
514 }
515 
516 // ---------------------------------------------------------------------------
517 // GUIVisualizationWidthSettings - methods
518 // ---------------------------------------------------------------------------
519 
521  tripWidth(0.2),
522  personTripWidth(0.25),
523  walkWidth(0.25),
524  rideWidth(0.25),
525  transportWidth(0.25),
526  transhipWidth(0.25) {
527 }
528 
529 
530 bool
532  return (tripWidth == v2.tripWidth) &&
534  (walkWidth == v2.walkWidth) &&
535  (rideWidth == v2.rideWidth) &&
536  (transportWidth == v2.transportWidth) &&
538 }
539 
540 
541 bool
543  return (tripWidth != v2.tripWidth) ||
545  (walkWidth != v2.walkWidth) ||
546  (rideWidth != v2.rideWidth) ||
547  (transportWidth != v2.transportWidth) ||
549 }
550 
551 // ---------------------------------------------------------------------------
552 // GUIVisualizationWidthSettings - methods
553 // ---------------------------------------------------------------------------
554 
555 GUIVisualizationSettings::GUIVisualizationSettings(const std::string& _name, bool _netedit) :
556  name(_name),
557  netedit(_netedit),
558  angle(0),
559  dither(false),
560  fps(false),
561  trueZ(false),
562  backgroundColor(RGBColor::WHITE),
563  showGrid(false), gridXSize(100), gridYSize(100),
564  laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
565  realisticLinkRules(false),
566  showLinkRules(true),
567  showRails(true),
568  edgeName(false, 60, RGBColor::ORANGE),
569  internalEdgeName(false, 45, RGBColor(128, 64, 0, 255)),
570  cwaEdgeName(false, 60, RGBColor::MAGENTA),
571  streetName(false, 60, RGBColor::YELLOW),
572  edgeValue(false, 100, RGBColor::CYAN),
573  edgeScaleValue(false, 100, RGBColor::BLUE),
574  hideConnectors(false),
575  laneWidthExaggeration(1),
576  laneMinSize(0),
577  showLaneDirection(false),
578  showSublanes(true),
579  spreadSuperposed(false),
580  disableHideByZoom(false),
581  edgeParam("EDGE_KEY"),
582  laneParam("LANE_KEY"),
583  vehicleParam("PARAM_NUMERICAL"),
584  vehicleScaleParam("PARAM_NUMERICAL"),
585  vehicleTextParam("PARAM_TEXT"),
586  edgeData("speed"),
587  edgeDataID(""),
588  edgeDataScaling(""),
589  edgeValueRainBow(false, 0, false, 200, false, 0, false),
590  vehicleQuality(0), showBlinker(true),
591  drawLaneChangePreference(false),
592  drawMinGap(false),
593  drawBrakeGap(false),
594  showBTRange(false),
595  showRouteIndex(false),
596  scaleLength(true),
597  drawReversed(false),
598  showParkingInfo(false),
599  showChargingInfo(false),
600  vehicleSize(1),
601  vehicleName(false, 60, RGBColor(204, 153, 0, 255)),
602  vehicleValue(false, 80, RGBColor::CYAN),
603  vehicleScaleValue(false, 80, RGBColor::GREY),
604  vehicleText(false, 80, RGBColor::RED),
605  personQuality(netedit ? 2 : 0),
606  personSize(1),
607  personName(false, 60, RGBColor(0, 153, 204, 255)),
608  personValue(false, 80, RGBColor::CYAN),
609  showPedestrianNetwork(true),
610  pedestrianNetworkColor(RGBColor(179, 217, 255)),
611  containerQuality(0),
612  containerSize(1),
613  containerName(false, 60, RGBColor(0, 153, 204, 255)),
614  drawLinkTLIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
615  drawLinkJunctionIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
616  junctionID(false, 60, RGBColor(0, 255, 128, 255)),
617  junctionName(false, 60, RGBColor(192, 255, 128, 255)),
618  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
619  tlsPhaseIndex(false, 150, RGBColor::YELLOW),
620  tlsPhaseName(false, 150, RGBColor::ORANGE),
621  showLane2Lane(false),
622  drawJunctionShape(true),
623  drawCrossingsAndWalkingareas(true),
624  junctionSize(1),
625  junctionValueRainBow(false, 0, false, 100, false, 0, false),
626  addMode(0),
627  addSize(1),
628  addName(false, 60, RGBColor(255, 0, 128, 255)),
629  addFullName(false, 60, RGBColor(255, 0, 128, 255)),
630  poiSize(0),
631  poiDetail(16),
632  poiName(false, 50, RGBColor(0, 127, 70, 255)),
633  poiType(false, 60, RGBColor(0, 127, 70, 255)),
634  poiText(false, 80, RGBColor(140, 0, 255, 255)),
635  poiTextParam("PARAM_TEXT"),
636  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
637  polyType(false, 60, RGBColor(255, 0, 128, 255)),
638  dataValue(false, 100, RGBColor::CYAN),
639  tazRelWidthExaggeration(1),
640  edgeRelWidthExaggeration(1),
641  relDataAttr("count"),
642  dataValueRainBow(false, -100, false, 100, false, 0, false),
643  show3DTLSLinkMarkers(true),
644  show3DTLSDomes(true),
645  generate3DTLSModels(false),
646  show3DHeadUpDisplay(true),
647  ambient3DLight(OSG_color_AMBIENT),
648  diffuse3DLight(OSG_color_DIFFUSE),
649  skyColor(OSG_color_SKY),
650  showSizeLegend(true),
651  showColorLegend(false),
652  showVehicleColorLegend(false),
653  gaming(false),
654  drawBoundaries(false),
655  selectorFrameScale(1.),
656  drawForViewObjectsHandler(false),
657  drawForRectangleSelection(false),
658  forceDrawForRectangleSelection(false),
659  disableDottedContours(false),
660  geometryIndices(false, 50, RGBColor(255, 0, 128, 255)),
661  secondaryShape(false),
662  lefthand(false),
663  disableLaneIcons(false) {
664  // init defaults depending of netedit or SUMO-GUI
665  if (netedit) {
667  } else {
669  }
670 }
671 
672 
673 bool
674 GUIVisualizationSettings::checkDrawJunction(const Boundary& b, const bool selected) const {
676  return false;
677  } else if (junctionSize.constantSize) {
678  return true;
679  } else if (junctionSize.constantSizeSelected && selected) {
680  return true;
681  } else {
682  return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;
683  }
684 }
685 
686 
687 bool
688 GUIVisualizationSettings::checkDrawAdditional(const Detail d, const bool selected) const {
690  return false;
691  } else if (addSize.constantSize) {
692  return true;
693  } else if (addSize.constantSizeSelected && selected) {
694  return true;
695  } else {
697  }
698 }
699 
700 
701 bool
702 GUIVisualizationSettings::checkDrawPoly(const Boundary& b, const bool selected) const {
704  return false;
705  } else if (polySize.constantSize) {
706  return true;
707  } else if (polySize.constantSizeSelected && selected) {
708  return true;
709  } else {
710  return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;
711  }
712 }
713 
714 
715 bool
716 GUIVisualizationSettings::checkDrawPOI(const double w, const double h, const Detail d, const bool selected) const {
718  return false;
719  } else if (poiSize.constantSize) {
720  return true;
721  } else if (poiSize.constantSizeSelected && selected) {
722  return true;
723  } else if ((w > 0) && (h > 0)) {
724  return (scale * MAX2(w, h)) > BoundarySizeDrawing;
725  } else {
727  }
728 }
729 
730 
731 bool
732 GUIVisualizationSettings::checkDrawVehicle(const Detail d, const bool selected) const {
734  return false;
735  } else if (vehicleSize.constantSize) {
736  return true;
737  } else if (vehicleSize.constantSizeSelected && selected) {
738  return true;
739  } else {
741  }
742 }
743 
744 
745 bool
746 GUIVisualizationSettings::checkDrawPerson(const Detail d, const bool selected) const {
748  return false;
749  } else if (personSize.constantSize) {
750  return true;
751  } else if (personSize.constantSizeSelected && selected) {
752  return true;
753  } else {
755  }
756 }
757 
758 
759 bool
760 GUIVisualizationSettings::checkDrawContainer(const Detail d, const bool selected) const {
762  return false;
763  } else if (containerSize.constantSize) {
764  return true;
765  } else if (containerSize.constantSizeSelected && selected) {
766  return true;
767  } else {
769  }
770 }
771 
772 
773 void
775  // just copy. Note: By default = operator is disabled to avoid accidental copies)
776  *this = s;
777 }
778 
779 
780 void
783  GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true, 0);
784  scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));
785  scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));
786  scheme.addColor(RGBColor(0, 0, 0, 0), 3, TL("green verge"));
787  scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));
788  scheme.addColor(RGBColor::BLACK, 5, TL("railway"));
789  scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));
790  scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc
791  scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing
792  scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector
793  scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road
794  scheme.addColor(RGBColor(200, 240, 240), 11, TL("airway"));
795  laneColorer.addScheme(scheme);
796  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
797  scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
798  laneColorer.addScheme(scheme);
799  scheme = GUIColorScheme(SCHEME_NAME_PERMISSION_CODE, RGBColor(240, 240, 240), "nobody");
800  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
801  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
802  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
803  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
804  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
805  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
806  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
807  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
808  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
809  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
810  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
811  laneColorer.addScheme(scheme);
812  // ... traffic states ...
813  scheme = GUIColorScheme("by allowed speed (lanewise)", TL("by allowed speed (lanewise)"), RGBColor::RED);
814  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
815  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
816  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
817  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
818  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
819  laneColorer.addScheme(scheme);
820  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", TL("by current occupancy (lanewise, brutto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
821  scheme.addColor(RGBColor::GREEN, 0.25);
822  scheme.addColor(RGBColor::YELLOW, 0.5);
823  scheme.addColor(RGBColor::ORANGE, 0.75);
824  scheme.addColor(RGBColor::RED, 1.0);
825  laneColorer.addScheme(scheme);
826  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", TL("by current occupancy (lanewise, netto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
827  scheme.addColor(RGBColor::GREEN, 0.25);
828  scheme.addColor(RGBColor::YELLOW, 0.5);
829  scheme.addColor(RGBColor::ORANGE, 0.75);
830  scheme.addColor(RGBColor::RED, 1.0);
831  laneColorer.addScheme(scheme);
832  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", TL("by first vehicle waiting time (lanewise)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
833  scheme.addColor(RGBColor::CYAN, 30.);
834  scheme.addColor(RGBColor::GREEN, 100.);
835  scheme.addColor(RGBColor::YELLOW, 200.);
836  scheme.addColor(RGBColor::RED, 300.);
837  laneColorer.addScheme(scheme);
838  scheme = GUIColorScheme("by lane number (streetwise)", TL("by lane number (streetwise)"), RGBColor::RED);
839  scheme.addColor(RGBColor::BLUE, 5.);
840  laneColorer.addScheme(scheme);
841  // ... emissions ...
842  scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
843  scheme.addColor(RGBColor::CYAN, 450);
844  scheme.addColor(RGBColor::GREEN, 900);
845  scheme.addColor(RGBColor::YELLOW, 1350);
846  scheme.addColor(RGBColor::ORANGE, 1800);
847  scheme.addColor(RGBColor::RED, 2250);
848  scheme.addColor(RGBColor::MAGENTA, 3000);
849  laneColorer.addScheme(scheme);
850  scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
851  scheme.addColor(RGBColor::CYAN, 30);
852  scheme.addColor(RGBColor::GREEN, 60);
853  scheme.addColor(RGBColor::YELLOW, 90);
854  scheme.addColor(RGBColor::ORANGE, 120);
855  scheme.addColor(RGBColor::RED, 150);
856  scheme.addColor(RGBColor::MAGENTA, 200);
857  laneColorer.addScheme(scheme);
858  scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
859  scheme.addColor(RGBColor::CYAN, 0.3);
860  scheme.addColor(RGBColor::GREEN, 0.5);
861  scheme.addColor(RGBColor::YELLOW, 0.8);
862  scheme.addColor(RGBColor::ORANGE, 1);
863  scheme.addColor(RGBColor::RED, 1.3);
864  scheme.addColor(RGBColor::MAGENTA, 1.6);
865  laneColorer.addScheme(scheme);
866  scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
867  scheme.addColor(RGBColor::CYAN, 6);
868  scheme.addColor(RGBColor::GREEN, 12);
869  scheme.addColor(RGBColor::YELLOW, 18);
870  scheme.addColor(RGBColor::ORANGE, 24);
871  scheme.addColor(RGBColor::RED, 30);
872  scheme.addColor(RGBColor::MAGENTA, 40);
873  laneColorer.addScheme(scheme);
874  scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
875  scheme.addColor(RGBColor::CYAN, 8);
876  scheme.addColor(RGBColor::GREEN, 16);
877  scheme.addColor(RGBColor::YELLOW, 24);
878  scheme.addColor(RGBColor::ORANGE, 32);
879  scheme.addColor(RGBColor::RED, 40);
880  scheme.addColor(RGBColor::MAGENTA, 50);
881  laneColorer.addScheme(scheme);
882  scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
883  scheme.addColor(RGBColor::CYAN, 0.2);
884  scheme.addColor(RGBColor::GREEN, 0.4);
885  scheme.addColor(RGBColor::YELLOW, 0.6);
886  scheme.addColor(RGBColor::ORANGE, 0.8);
887  scheme.addColor(RGBColor::RED, 1);
888  scheme.addColor(RGBColor::MAGENTA, 1.3);
889  laneColorer.addScheme(scheme);
890  scheme = GUIColorScheme("by noise emissions (Harmonoise)", TL("by noise emissions (Harmonoise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
891  scheme.addColor(RGBColor::CYAN, 1.3);
892  scheme.addColor(RGBColor::GREEN, 1.4);
893  scheme.addColor(RGBColor::YELLOW, 1.6);
894  scheme.addColor(RGBColor::ORANGE, 1.7);
895  scheme.addColor(RGBColor::RED, 1.9);
896  scheme.addColor(RGBColor::MAGENTA, 2.4);
897  laneColorer.addScheme(scheme);
898  // ... weights (experimental) ...
899  scheme = GUIColorScheme("by global travel time", TL("by global travel time"), RGBColor::GREEN);
900  scheme.addColor(RGBColor::RED, 100.);
901  scheme.setAllowsNegativeValues(true);
902  laneColorer.addScheme(scheme);
903  scheme = GUIColorScheme("by global speed percentage", TL("by global speed percentage"), RGBColor::RED);
904  scheme.addColor(RGBColor::YELLOW, 50.);
905  scheme.addColor(RGBColor::GREEN, 100.);
906  scheme.setAllowsNegativeValues(true);
907  laneColorer.addScheme(scheme);
908  scheme = GUIColorScheme("by given length/geometrical length", TL("by given length/geometrical length"), RGBColor::RED);
909  scheme.addColor(RGBColor::ORANGE, 0.25);
910  scheme.addColor(RGBColor::YELLOW, 0.5);
911  scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
912  scheme.addColor(RGBColor::GREEN, 2.);
913  scheme.addColor(RGBColor::CYAN, 4.);
914  scheme.addColor(RGBColor::BLUE, 100.);
915  laneColorer.addScheme(scheme);
916  laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
917  scheme = GUIColorScheme("by loaded weight", TL("by loaded weight"), RGBColor::GREEN);
918  scheme.addColor(RGBColor::RED, 100.);
919  scheme.setAllowsNegativeValues(true);
920  laneColorer.addScheme(scheme);
921  scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);
922  scheme.addColor(RGBColor::RED, -20.);
923  scheme.addColor(RGBColor::GREEN, 20.);
924  scheme.setAllowsNegativeValues(true);
925  laneColorer.addScheme(scheme);
926  scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::GREY);
927  scheme.addColor(RGBColor::BLUE, -10.);
928  scheme.addColor(RGBColor::RED, 10.);
929  scheme.addColor(RGBColor::YELLOW, 50.);
930  scheme.addColor(RGBColor::GREEN, 100.);
931  scheme.addColor(RGBColor::MAGENTA, 200.);
932  scheme.setAllowsNegativeValues(true);
933  laneColorer.addScheme(scheme);
934  scheme = GUIColorScheme("by height at geometry-segment start", TL("by height at geometry-segment start"), RGBColor::GREY);
935  scheme.addColor(RGBColor::BLUE, -10.);
936  scheme.addColor(RGBColor::RED, 10.);
937  scheme.addColor(RGBColor::YELLOW, 50.);
938  scheme.addColor(RGBColor::GREEN, 100.);
939  scheme.addColor(RGBColor::MAGENTA, 200.);
940  scheme.setAllowsNegativeValues(true);
941  laneColorer.addScheme(scheme);
942  scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);
943  scheme.addColor(RGBColor::YELLOW, 0.1);
944  scheme.addColor(RGBColor::RED, 0.3);
945  scheme.addColor(RGBColor::GREEN, -0.1);
946  scheme.addColor(RGBColor::BLUE, -0.3);
947  scheme.setAllowsNegativeValues(true);
948  laneColorer.addScheme(scheme);
949  scheme = GUIColorScheme("by geometry-segment inclination", TL("by geometry-segment inclination"), RGBColor::GREY);
950  scheme.addColor(RGBColor::YELLOW, 0.1);
951  scheme.addColor(RGBColor::RED, 0.3);
952  scheme.addColor(RGBColor::GREEN, -0.1);
953  scheme.addColor(RGBColor::BLUE, -0.3);
954  scheme.setAllowsNegativeValues(true);
955  laneColorer.addScheme(scheme);
956  scheme = GUIColorScheme("by average speed", TL("by average speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
957  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
958  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
959  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
960  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
961  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
962  laneColorer.addScheme(scheme);
963  scheme = GUIColorScheme("by average relative speed ", TL("by average relative speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
964  scheme.addColor(RGBColor::YELLOW, 0.25);
965  scheme.addColor(RGBColor::GREEN, 0.5);
966  scheme.addColor(RGBColor::CYAN, 0.75);
967  scheme.addColor(RGBColor::BLUE, 1.);
968  scheme.addColor(RGBColor::MAGENTA, 1.25);
969  laneColorer.addScheme(scheme);
970  scheme = GUIColorScheme("by routing device assumed speed ", TL("by routing device assumed speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
971  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
972  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
973  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
974  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
975  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
976  laneColorer.addScheme(scheme);
977  scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
978  scheme.addColor(RGBColor::CYAN, 0.2);
979  scheme.addColor(RGBColor::GREEN, 0.4);
980  scheme.addColor(RGBColor::YELLOW, 0.6);
981  scheme.addColor(RGBColor::ORANGE, 0.8);
982  scheme.addColor(RGBColor::RED, 1.0);
983  scheme.addColor(RGBColor::MAGENTA, 2.0);
984  laneColorer.addScheme(scheme);
985  scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
986  scheme.addColor(RGBColor::GREEN, 1.);
987  scheme.addColor(RGBColor::YELLOW, 10.);
988  scheme.addColor(RGBColor::RED, 100.);
989  laneColorer.addScheme(scheme);
990  scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), "no TAZ", true);
991  laneColorer.addScheme(scheme);
992  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
993  scheme.setAllowsNegativeValues(true);
994  laneColorer.addScheme(scheme);
995  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
996  scheme.setAllowsNegativeValues(true);
997  laneColorer.addScheme(scheme);
999  scheme.setAllowsNegativeValues(true);
1000  laneColorer.addScheme(scheme);
1001  scheme = GUIColorScheme("by distance (kilometrage)", TL("by distance (kilometrage)"), RGBColor(204, 204, 204));
1002  scheme.addColor(RGBColor(255, 204, 204), 1.);
1003  scheme.addColor(RGBColor::RED, 10000.);
1004  scheme.addColor(RGBColor(204, 204, 255), -1.);
1005  scheme.addColor(RGBColor::BLUE, -10000.);
1006  scheme.setAllowsNegativeValues(true);
1007  laneColorer.addScheme(scheme);
1008  scheme = GUIColorScheme("by abs distance (kilometrage)", TL("by abs distance (kilometrage)"), RGBColor(204, 204, 204));
1009  scheme.addColor(RGBColor::RED, 1.);
1010  scheme.setAllowsNegativeValues(false);
1011  laneColorer.addScheme(scheme);
1012  scheme = GUIColorScheme("by reachability (traveltime)", TL("by reachability (traveltime)"), RGBColor::RED);
1013  scheme.addColor(RGBColor::GREY, INVALID_DOUBLE, "unreachable");
1014  scheme.setAllowsNegativeValues(true);
1015  laneColorer.addScheme(scheme);
1016  scheme = GUIColorScheme("by thread index", TL("by thread index"), RGBColor(204, 204, 204));
1017  scheme.addColor(RGBColor::RED, 1.);
1018  laneColorer.addScheme(scheme);
1019  scheme = GUIColorScheme("free parking spaces", TL("free parking spaces"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
1020  scheme.addColor(RGBColor::RED, 1.);
1021  scheme.addColor(RGBColor::YELLOW, 10.);
1022  scheme.addColor(RGBColor::GREEN, 100.);
1023  scheme.addColor(RGBColor::BLUE, 1000.);
1024  laneColorer.addScheme(scheme);
1026  scheme.setAllowsNegativeValues(true);
1027  laneColorer.addScheme(scheme);
1028 
1030  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", TL("given vehicle/type/route color"), RGBColor::YELLOW, "", true));
1031  vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1032  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", TL("given/assigned vehicle color"), RGBColor::YELLOW, "", true));
1033  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));
1034  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", TL("given/assigned route color"), RGBColor::YELLOW, "", true));
1035  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", TL("depart position as HSV"), RGBColor::YELLOW, "", true));
1036  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", TL("arrival position as HSV"), RGBColor::YELLOW, "", true));
1037  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", TL("direction/distance as HSV"), RGBColor::YELLOW, "", true));
1038  scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1039  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1040  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1041  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1042  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1043  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1044  scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1045  scheme.addColor(RGBColor::RED, -1); // stopped on road
1046  scheme.addColor(RGBColor::GREY, -2); // stopped off-road (parking)
1047  vehicleColorer.addScheme(scheme);
1048  scheme = GUIColorScheme("by action step", TL("by action step"), RGBColor::GREY, TL("no action"), true, 0, COL_SCHEME_DYNAMIC);
1049  scheme.addColor(RGBColor(0, 255, 0, 255), 1., TL("action in next step"));
1050  scheme.addColor(RGBColor(80, 160, 80, 255), 2., TL("had action step"));
1051  vehicleColorer.addScheme(scheme);
1052  scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1053  scheme.addColor(RGBColor::CYAN, 30.);
1054  scheme.addColor(RGBColor::GREEN, 100.);
1055  scheme.addColor(RGBColor::YELLOW, 200.);
1056  scheme.addColor(RGBColor::RED, 300.);
1057  vehicleColorer.addScheme(scheme);
1058  scheme = GUIColorScheme("by accumulated waiting time", TL("by accumulated waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1059  scheme.addColor(RGBColor::CYAN, 25.);
1060  scheme.addColor(RGBColor::GREEN, 50.);
1061  scheme.addColor(RGBColor::YELLOW, 75.);
1062  scheme.addColor(RGBColor::RED, 100.);
1063  vehicleColorer.addScheme(scheme);
1064  scheme = GUIColorScheme("by time since lane change", TL("by time since lane change"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1065  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
1066  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
1067  scheme.addColor(RGBColor(255, 0, 0, 255), -0.01);
1068  scheme.addColor(RGBColor(0, 0, 255, 255), 0.01);
1069  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
1070  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
1071  scheme.setAllowsNegativeValues(true);
1072  vehicleColorer.addScheme(scheme);
1073  scheme = GUIColorScheme("by max speed", TL("by max speed"), RGBColor::RED);
1074  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1075  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1076  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1077  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1078  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1079  vehicleColorer.addScheme(scheme);
1080  // ... emissions ...
1081  scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1082  scheme.addColor(RGBColor::CYAN, 23000);
1083  scheme.addColor(RGBColor::GREEN, 46000);
1084  scheme.addColor(RGBColor::YELLOW, 69000);
1085  scheme.addColor(RGBColor::ORANGE, 92000);
1086  scheme.addColor(RGBColor::RED, 115000);
1087  scheme.addColor(RGBColor::MAGENTA, 150000);
1088  vehicleColorer.addScheme(scheme);
1089  scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1090  scheme.addColor(RGBColor::CYAN, 1500);
1091  scheme.addColor(RGBColor::GREEN, 3000);
1092  scheme.addColor(RGBColor::YELLOW, 4500);
1093  scheme.addColor(RGBColor::ORANGE, 6000);
1094  scheme.addColor(RGBColor::RED, 7500);
1095  scheme.addColor(RGBColor::MAGENTA, 10000);
1096  vehicleColorer.addScheme(scheme);
1097  scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1098  scheme.addColor(RGBColor::CYAN, 12);
1099  scheme.addColor(RGBColor::GREEN, 24);
1100  scheme.addColor(RGBColor::YELLOW, 36);
1101  scheme.addColor(RGBColor::ORANGE, 48);
1102  scheme.addColor(RGBColor::RED, 60);
1103  scheme.addColor(RGBColor::MAGENTA, 80);
1104  vehicleColorer.addScheme(scheme);
1105  scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1106  scheme.addColor(RGBColor::CYAN, 300);
1107  scheme.addColor(RGBColor::GREEN, 600);
1108  scheme.addColor(RGBColor::YELLOW, 900);
1109  scheme.addColor(RGBColor::ORANGE, 1200);
1110  scheme.addColor(RGBColor::RED, 1500);
1111  scheme.addColor(RGBColor::MAGENTA, 2000);
1112  vehicleColorer.addScheme(scheme);
1113  scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1114  scheme.addColor(RGBColor::CYAN, 400);
1115  scheme.addColor(RGBColor::GREEN, 800);
1116  scheme.addColor(RGBColor::YELLOW, 1200);
1117  scheme.addColor(RGBColor::ORANGE, 1600);
1118  scheme.addColor(RGBColor::RED, 2000);
1119  scheme.addColor(RGBColor::MAGENTA, 2500);
1120  vehicleColorer.addScheme(scheme);
1121  scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1122  scheme.addColor(RGBColor::CYAN, 10);
1123  scheme.addColor(RGBColor::GREEN, 20);
1124  scheme.addColor(RGBColor::YELLOW, 30);
1125  scheme.addColor(RGBColor::ORANGE, 40);
1126  scheme.addColor(RGBColor::RED, 50);
1127  scheme.addColor(RGBColor::MAGENTA, 60);
1128  vehicleColorer.addScheme(scheme);
1129  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1130  scheme.addColor(RGBColor::CYAN, 60);
1131  scheme.addColor(RGBColor::GREEN, 70);
1132  scheme.addColor(RGBColor::YELLOW, 80);
1133  scheme.addColor(RGBColor::ORANGE, 90);
1134  scheme.addColor(RGBColor::RED, 100);
1135  scheme.addColor(RGBColor::MAGENTA, 120);
1136  vehicleColorer.addScheme(scheme);
1137  scheme = GUIColorScheme("by reroute number", TL("by reroute number"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1138  scheme.addColor(RGBColor::YELLOW, 1.);
1139  scheme.addColor(RGBColor::RED, 10.);
1140  vehicleColorer.addScheme(scheme);
1141  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1142  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1143  vehicleColorer.addScheme(scheme);
1144  scheme = GUIColorScheme("by offset from best lane", TL("by offset from best lane"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1145  scheme.addColor(RGBColor(255, 0, 255, 255), -100, TL("opposite lane"));
1146  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
1147  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
1148  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
1149  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
1150  scheme.setAllowsNegativeValues(true);
1151  vehicleColorer.addScheme(scheme);
1152  scheme = GUIColorScheme("by acceleration", TL("by acceleration"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1153  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
1154  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
1155  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
1156  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
1157  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
1158  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
1159  scheme.setAllowsNegativeValues(true);
1160  vehicleColorer.addScheme(scheme);
1161  scheme = GUIColorScheme("by time gap on lane", TL("by time gap on lane"), RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1162  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
1163  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
1164  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
1165  scheme.setAllowsNegativeValues(true);
1166  vehicleColorer.addScheme(scheme);
1167  scheme = GUIColorScheme("by depart delay", TL("by depart delay"), RGBColor::BLUE);
1168  scheme.addColor(RGBColor::CYAN, 30.);
1169  scheme.addColor(RGBColor::GREEN, 100.);
1170  scheme.addColor(RGBColor::YELLOW, 200.);
1171  scheme.addColor(RGBColor::RED, 300.);
1172  vehicleColorer.addScheme(scheme);
1173  scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1174  scheme.addColor(RGBColor::CYAN, 10);
1175  scheme.addColor(RGBColor::GREEN, 20);
1176  scheme.addColor(RGBColor::YELLOW, 30);
1177  scheme.addColor(RGBColor::ORANGE, 40);
1178  scheme.addColor(RGBColor::RED, 60);
1179  scheme.addColor(RGBColor::MAGENTA, 100);
1180  vehicleColorer.addScheme(scheme);
1181  scheme = GUIColorScheme("by relative battery charge", TL("by relative battery charge"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1182  scheme.setAllowsNegativeValues(true);
1183  scheme.addColor(RGBColor::MAGENTA, 0.1);
1184  scheme.addColor(RGBColor::RED, 0.2);
1185  scheme.addColor(RGBColor::ORANGE, 0.3);
1186  scheme.addColor(RGBColor::YELLOW, 0.4);
1187  scheme.addColor(RGBColor::GREEN, 0.6);
1188  scheme.addColor(RGBColor::CYAN, 1.);
1189  vehicleColorer.addScheme(scheme);
1190  scheme = GUIColorScheme("by charged energy", TL("by charged energy"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1191  scheme.setAllowsNegativeValues(true);
1192  scheme.addColor(RGBColor::MAGENTA, 10);
1193  scheme.addColor(RGBColor::RED, 20);
1194  scheme.addColor(RGBColor::ORANGE, 30);
1195  scheme.addColor(RGBColor::YELLOW, 100);
1196  scheme.addColor(RGBColor::GREEN, 200);
1197  scheme.addColor(RGBColor::CYAN, 500);
1198  vehicleColorer.addScheme(scheme);
1199  scheme = GUIColorScheme("by time loss", TL("by time loss"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1200  scheme.addColor(RGBColor::CYAN, 10.);
1201  scheme.addColor(RGBColor::GREEN, 60.);
1202  scheme.addColor(RGBColor::YELLOW, 180.);
1203  scheme.addColor(RGBColor::RED, 900.);
1204  vehicleColorer.addScheme(scheme);
1205  scheme = GUIColorScheme("by stop delay", TL("by stop delay"), RGBColor::GREY, "", false, -1, COL_SCHEME_DYNAMIC);
1206  scheme.addColor(RGBColor::BLUE, 0.);
1207  scheme.addColor(RGBColor::CYAN, 10.);
1208  scheme.addColor(RGBColor::GREEN, 60.);
1209  scheme.addColor(RGBColor::YELLOW, 120.);
1210  scheme.addColor(RGBColor::ORANGE, 300.);
1211  scheme.addColor(RGBColor::RED, 900.);
1212  scheme.setAllowsNegativeValues(true);
1213  vehicleColorer.addScheme(scheme);
1214  scheme = GUIColorScheme("by stop arrival delay", TL("by stop arrival delay"), RGBColor::GREY, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1215  scheme.addColor(RGBColor::MAGENTA, -10.);
1216  scheme.addColor(RGBColor::BLUE, 0.);
1217  scheme.addColor(RGBColor::CYAN, 10.);
1218  scheme.addColor(RGBColor::GREEN, 60.);
1219  scheme.addColor(RGBColor::YELLOW, 120.);
1220  scheme.addColor(RGBColor::ORANGE, 300.);
1221  scheme.addColor(RGBColor::RED, 900.);
1222  scheme.setAllowsNegativeValues(true);
1223  vehicleColorer.addScheme(scheme);
1224  scheme = GUIColorScheme("by lateral speed", TL("by lateral speed"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1225  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");
1226  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");
1227  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");
1228  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");
1229  scheme.setAllowsNegativeValues(true);
1230  vehicleColorer.addScheme(scheme);
1231  scheme = GUIColorScheme(SCHEME_NAME_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1232  scheme.setAllowsNegativeValues(true);
1233  vehicleColorer.addScheme(scheme);
1234  vehicleColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1235  vehicleColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1236 
1238  personColorer.addScheme(GUIColorScheme("given person/type color", TL("given person/type color"), RGBColor::BLUE, "", true));
1239  personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::BLUE, "", true));
1240  personColorer.addScheme(GUIColorScheme("given/assigned person color", TL("given/assigned person color"), RGBColor::BLUE, "", true));
1241  personColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::BLUE, "", true));
1242  scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1243  scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1244  scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1245  scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1246  scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1247  scheme.addColor(RGBColor::GREY, -1.); // stop stage
1248  scheme.addColor(RGBColor::GREY, -2.); // stop stage (departure)
1249  personColorer.addScheme(scheme);
1250  scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);
1251  scheme.addColor(RGBColor::RED, 1., TL("stopped"));
1252  scheme.addColor(RGBColor::GREEN, 2., TL("walking"));
1253  scheme.addColor(RGBColor::BLUE, 3., TL("riding"));
1254  scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));
1255  scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for ride"));
1256  personColorer.addScheme(scheme);
1257  scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1258  scheme.addColor(RGBColor::CYAN, 30.);
1259  scheme.addColor(RGBColor::GREEN, 100.);
1260  scheme.addColor(RGBColor::YELLOW, 200.);
1261  scheme.addColor(RGBColor::RED, 300.);
1262  personColorer.addScheme(scheme);
1263  scheme = GUIColorScheme("by jammed state", TL("by jammed state"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1264  scheme.addColor(RGBColor::RED, 1.);
1265  personColorer.addScheme(scheme);
1266  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1267  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1268  personColorer.addScheme(scheme);
1269  personColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1270  personColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1271 
1273  containerColorer.addScheme(GUIColorScheme("given container/type color", TL("given container/type color"), RGBColor::YELLOW, "", true));
1274  containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1275  containerColorer.addScheme(GUIColorScheme("given/assigned container color", TL("given/assigned container color"), RGBColor::YELLOW, "", true));
1276  containerColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));
1277  scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1278  scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1279  scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1280  scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1281  containerColorer.addScheme(scheme);
1282  scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);
1283  scheme.addColor(RGBColor::RED, 1., TL("stopped"));
1284  scheme.addColor(RGBColor::BLUE, 3., TL("transport"));
1285  scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));
1286  scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for transport"));
1287  scheme.addColor(RGBColor::GREEN, 6., TL("tranship")); // (moving without vehicle)
1288  containerColorer.addScheme(scheme);
1289  scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1290  scheme.addColor(RGBColor::CYAN, 30.);
1291  scheme.addColor(RGBColor::GREEN, 100.);
1292  scheme.addColor(RGBColor::YELLOW, 200.);
1293  scheme.addColor(RGBColor::RED, 300.);
1294  containerColorer.addScheme(scheme);
1295  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1296  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1297  containerColorer.addScheme(scheme);
1298  containerColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1299  containerColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1300 
1302  scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, "", true);
1303  scheme.addColor(RGBColor(150, 200, 200), 1, TL("waterway"));
1304  scheme.addColor(RGBColor(0, 0, 0, 0), 2, TL("railway"));
1305  scheme.addColor(RGBColor(200, 240, 240), 3, TL("airway"));
1306  junctionColorer.addScheme(scheme);
1307  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1308  scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1309  junctionColorer.addScheme(scheme);
1310  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1311  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1312  scheme.addColor(RGBColor::YELLOW, 2, "priority");
1313  scheme.addColor(RGBColor::RED, 3, "priority_stop");
1314  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1315  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1316  scheme.addColor(RGBColor::GREY, 6, "district");
1317  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1318  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1319  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1320  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1321  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
1322  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1323  scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue
1324  junctionColorer.addScheme(scheme);
1325  scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);
1326  scheme.addColor(RGBColor::BLUE, -10.);
1327  scheme.addColor(RGBColor::RED, 10.);
1328  scheme.addColor(RGBColor::YELLOW, 50.);
1329  scheme.addColor(RGBColor::GREEN, 100.);
1330  scheme.addColor(RGBColor::MAGENTA, 200.);
1331  scheme.setAllowsNegativeValues(true);
1332  junctionColorer.addScheme(scheme);
1333 
1335  poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));
1336  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1337  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1338  poiColorer.addScheme(scheme);
1339  poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));
1340 
1342  polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));
1343  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1344  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1345  polyColorer.addScheme(scheme);
1346  polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1347  polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1348 
1350  {
1351  GUIScaleScheme laneScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);
1352  laneScaler.addScheme(laneScheme);
1353  laneScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);
1354  laneScheme.addColor(5, 1, TL("selected"));
1355  laneScaler.addScheme(laneScheme);
1356  // ... traffic states ...
1357  laneScheme = GUIScaleScheme(TL("by allowed speed (lanewise)"), 0);
1358  laneScheme.addColor(10, 150. / 3.6);
1359  laneScaler.addScheme(laneScheme);
1360  laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1361  laneScheme.addColor(10, 0.95);
1362  laneScaler.addScheme(laneScheme);
1363  laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, netto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1364  laneScheme.addColor(10, 0.95);
1365  laneScaler.addScheme(laneScheme);
1366  laneScheme = GUIScaleScheme(TL("by first vehicle waiting time (lanewise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1367  laneScheme.addColor(10, 300.);
1368  laneScaler.addScheme(laneScheme);
1369  laneScheme = GUIScaleScheme(TL("by lane number (streetwise)"), 1);
1370  laneScheme.addColor(10, 5.);
1371  laneScaler.addScheme(laneScheme);
1372  // ... emissions ...
1373  laneScheme = GUIScaleScheme(TL("by CO2 emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1374  laneScheme.addColor(10, 10. / 7.5 / 5.);
1375  laneScaler.addScheme(laneScheme);
1376  laneScheme = GUIScaleScheme(TL("by CO emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1377  laneScheme.addColor(10, 0.05 / 7.5 / 2.);
1378  laneScaler.addScheme(laneScheme);
1379  laneScheme = GUIScaleScheme(TL("by PMx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1380  laneScheme.addColor(10, .005 / 7.5 / 5.);
1381  laneScaler.addScheme(laneScheme);
1382  laneScheme = GUIScaleScheme(TL("by NOx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1383  laneScheme.addColor(10, .125 / 7.5 / 5.);
1384  laneScaler.addScheme(laneScheme);
1385  laneScheme = GUIScaleScheme(TL("by HC emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1386  laneScheme.addColor(10, .02 / 7.5 / 4.);
1387  laneScaler.addScheme(laneScheme);
1388  laneScheme = GUIScaleScheme(TL("by fuel consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);
1389  laneScheme.addColor(10, .005 / 7.5 * 100.);
1390  laneScaler.addScheme(laneScheme);
1391  laneScheme = GUIScaleScheme(TL("by noise emissions (Harmonoise)"), 0, "", false, 0, COL_SCHEME_EMISSION);
1392  laneScheme.addColor(10, 100.);
1393  laneScaler.addScheme(laneScheme);
1394  // ... weights (experimental) ...
1395  laneScheme = GUIScaleScheme(TL("by global travel time"), 0);
1396  laneScheme.addColor(10, 100.);
1397  laneScheme.setAllowsNegativeValues(true);
1398  laneScaler.addScheme(laneScheme);
1399  laneScheme = GUIScaleScheme(TL("by global speed percentage"), 0);
1400  laneScheme.addColor(10, 100.);
1401  laneScheme.setAllowsNegativeValues(true);
1402  laneScaler.addScheme(laneScheme);
1403  laneScheme = GUIScaleScheme(TL("by given length/geometrical length"), 0);
1404  laneScheme.addColor(10, 10.);
1405  laneScaler.addScheme(laneScheme);
1406  laneScheme = GUIScaleScheme(TL("by loaded weight"), 0);
1407  laneScheme.addColor(-1000, -1000.);
1408  laneScheme.addColor(1000, 1000.);
1409  laneScheme.setAllowsNegativeValues(true);
1410  laneScaler.addScheme(laneScheme);
1411  laneScheme = GUIScaleScheme(TL("by priority"), 1);
1412  laneScheme.addColor(0.5, -20.);
1413  laneScheme.addColor(5, 20.);
1414  laneScheme.setAllowsNegativeValues(true);
1415  laneScaler.addScheme(laneScheme);
1416  laneScheme = GUIScaleScheme(TL("by average speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1417  laneScheme.addColor(10, 150. / 3.6);
1418  laneScaler.addScheme(laneScheme);
1419  laneScheme = GUIScaleScheme(TL("by average relative speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1420  laneScheme.addColor(0.5, 0.5);
1421  laneScheme.addColor(2, 1.);
1422  laneScheme.addColor(10, 2.);
1423  laneScaler.addScheme(laneScheme);
1424  laneScheme = GUIScaleScheme(TL("by electricity consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);
1425  laneScheme.addColor(10, 1. / 7.5 / 5.);
1426  laneScaler.addScheme(laneScheme);
1427  laneScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1428  laneScheme.addColor(1, 1.);
1429  laneScheme.addColor(10, 10.);
1430  laneScheme.addColor(50, 100.);
1431  laneScaler.addScheme(laneScheme);
1432  laneScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, 0.1, TL("missing data"), false, MISSING_DATA);
1433  laneScheme.addColor(1, 1.);
1434  laneScheme.addColor(2, 10.);
1435  laneScheme.addColor(5, 100.);
1436  laneScheme.addColor(10, 1000.);
1437  laneScheme.setAllowsNegativeValues(true);
1438  laneScaler.addScheme(laneScheme);
1439  }
1440 
1442  edgeColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor(0, 0, 0, 0), "", true));
1443  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1444  scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));
1445  edgeColorer.addScheme(scheme);
1446  scheme = GUIColorScheme("by purpose (streetwise)", TL("by purpose (streetwise)"), RGBColor(), TL("normal"), true);
1447  scheme.addColor(RGBColor(128, 0, 128, 255), 1., TL("connector")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
1448  scheme.addColor(RGBColor::BLUE, 2., TL("internal")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
1449  edgeColorer.addScheme(scheme);
1450  scheme = GUIColorScheme("by allowed speed (streetwise)", TL("by allowed speed (streetwise)"), RGBColor::RED);
1451  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1452  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1453  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1454  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1455  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1456  edgeColorer.addScheme(scheme);
1457  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", TL("by current occupancy (streetwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1458  scheme.addColor(RGBColor::RED, 0.95);
1459  edgeColorer.addScheme(scheme);
1460  scheme = GUIColorScheme("by current speed (streetwise)", TL("by current speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1461  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1462  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1463  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1464  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1465  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1466  edgeColorer.addScheme(scheme);
1467  scheme = GUIColorScheme("by current flow (streetwise)", TL("by current flow (streetwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1468  scheme.addColor(RGBColor::RED, 5000.);
1469  edgeColorer.addScheme(scheme);
1470  scheme = GUIColorScheme("by relative speed (streetwise)", TL("by relative speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1471  scheme.addColor(RGBColor::YELLOW, 0.25);
1472  scheme.addColor(RGBColor::GREEN, 0.5);
1473  scheme.addColor(RGBColor::CYAN, 0.75);
1474  scheme.addColor(RGBColor::BLUE, 1.);
1475  scheme.addColor(RGBColor::MAGENTA, 1.25);
1476  edgeColorer.addScheme(scheme);
1477  scheme = GUIColorScheme("by routing device assumed speed", TL("by routing device assumed speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1478  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1479  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1480  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1481  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1482  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1483  edgeColorer.addScheme(scheme);
1484  edgeColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1485  scheme = GUIColorScheme("by segments (alternating)", TL("by segments (alternating)"), RGBColor::BLUE, TL("odd"), true);
1486  scheme.addColor(RGBColor::RED, 1., TL("even"));
1487  edgeColorer.addScheme(scheme);
1488  scheme = GUIColorScheme("by jammed state (segmentwise)", TL("by jammed state (segmentwise)"), RGBColor::GREEN, TL("free"), true, 0, COL_SCHEME_DYNAMIC);
1489  scheme.addColor(RGBColor::YELLOW, 1., TL("limitedControl"));
1490  scheme.addColor(RGBColor::RED, 2., TL("jammed"));
1491  edgeColorer.addScheme(scheme);
1492  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", TL("by current occupancy (segmentwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1493  scheme.addColor(RGBColor::RED, 0.95);
1494  edgeColorer.addScheme(scheme);
1495  scheme = GUIColorScheme("by current speed (segmentwise)", TL("by current speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1496  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1497  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1498  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1499  scheme.addColor(RGBColor::BLUE, 120 / 3.6);
1500  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1501  edgeColorer.addScheme(scheme);
1502  scheme = GUIColorScheme("by current flow (segmentwise)", TL("by current flow (segmentwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1503  scheme.addColor(RGBColor::RED, 5000.);
1504  edgeColorer.addScheme(scheme);
1505  scheme = GUIColorScheme("by relative speed (segmentwise)", TL("by relative speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1506  scheme.addColor(RGBColor::YELLOW, 0.25);
1507  scheme.addColor(RGBColor::GREEN, 0.5);
1508  scheme.addColor(RGBColor::CYAN, 0.75);
1509  scheme.addColor(RGBColor::BLUE, 1.);
1510  scheme.addColor(RGBColor::MAGENTA, 1.25);
1511  edgeColorer.addScheme(scheme);
1512  scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1513  scheme.addColor(RGBColor::GREEN, 1.);
1514  scheme.addColor(RGBColor::YELLOW, 10.);
1515  scheme.addColor(RGBColor::RED, 100.);
1516  edgeColorer.addScheme(scheme);
1517  scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), TL("no TAZ"), true);
1518  edgeColorer.addScheme(scheme);
1519  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1520  scheme.setAllowsNegativeValues(true);
1521  edgeColorer.addScheme(scheme);
1523  scheme.setAllowsNegativeValues(true);
1524  edgeColorer.addScheme(scheme);
1525 
1527  {
1528  edgeScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1529  GUIScaleScheme edgeScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);
1530  edgeScheme.addColor(5, 1., TL("selected"));
1531  edgeScaler.addScheme(edgeScheme);
1532  edgeScheme = GUIScaleScheme(TL("by allowed speed (streetwise)"), 0);
1533  edgeScheme.addColor(10, 150. / 3.6);
1534  edgeScaler.addScheme(edgeScheme);
1535  edgeScheme = GUIScaleScheme(TL("by current occupancy (streetwise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1536  edgeScheme.addColor(10, 0.95);
1537  edgeScaler.addScheme(edgeScheme);
1538  edgeScheme = GUIScaleScheme(TL("by current speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1539  edgeScheme.addColor(10, 150. / 3.6);
1540  edgeScaler.addScheme(edgeScheme);
1541  edgeScheme = GUIScaleScheme(TL("by current flow (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1542  edgeScheme.addColor(20, 5000.);
1543  edgeScaler.addScheme(edgeScheme);
1544  edgeScheme = GUIScaleScheme(TL("by relative speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1545  edgeScheme.addColor(20, 1.);
1546  edgeScaler.addScheme(edgeScheme);
1547  edgeScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1548  edgeScheme.addColor(1, 1.);
1549  edgeScheme.addColor(10, 10.);
1550  edgeScheme.addColor(50, 100.);
1551  edgeScaler.addScheme(edgeScheme);
1552  edgeScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, 0.1, TL("missing data"), false, MISSING_DATA);
1553  edgeScheme.addColor(1, 1.);
1554  edgeScheme.addColor(2, 10.);
1555  edgeScheme.addColor(5, 100.);
1556  edgeScheme.addColor(10, 1000.);
1557  edgeScaler.addScheme(edgeScheme);
1558  edgeScheme.setAllowsNegativeValues(true);
1559  edgeScaler.addScheme(edgeScheme);
1560  }
1561 
1563  {
1564  vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1565  GUIScaleScheme vehScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 1, TL("unselected"), true, 0, COL_SCHEME_MISC);
1566  vehScheme.addColor(5, 1., TL("selected"));
1567  vehicleScaler.addScheme(vehScheme);
1568  vehScheme = GUIScaleScheme(TL("by speed"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1569  vehScheme.addColor(5, 150. / 3.6);
1570  vehScheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1571  vehScheme.addColor(1, -1.); // stopped on road
1572  vehScheme.addColor(0.5, -2.); // stopped off-road (parking)
1573  vehicleScaler.addScheme(vehScheme);
1574  vehScheme = GUIScaleScheme(TL("by waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1575  vehScheme.addColor(1, 30.);
1576  vehScheme.addColor(2, 100.);
1577  vehScheme.addColor(4, 200.);
1578  vehScheme.addColor(10, 300.);
1579  vehicleScaler.addScheme(vehScheme);
1580  vehScheme = GUIScaleScheme(TL("by accumulated waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1581  vehScheme.addColor(5, 100.);
1582  vehicleScaler.addScheme(vehScheme);
1583  vehScheme = GUIScaleScheme(TL("by max speed"), 1);
1584  vehScheme.addColor(1, 30. / 3.6);
1585  vehScheme.addColor(1, 55. / 3.6);
1586  vehScheme.addColor(1, 80. / 3.6);
1587  vehScheme.addColor(1, 120. / 3.6);
1588  vehScheme.addColor(1, 150. / 3.6);
1589  vehicleScaler.addScheme(vehScheme);
1590  vehScheme = GUIScaleScheme(TL("by reroute number"), 1, "", false, 0, COL_SCHEME_DYNAMIC);
1591  vehScheme.addColor(1, 1.);
1592  vehScheme.addColor(5, 10.);
1593  vehicleScaler.addScheme(vehScheme);
1594  vehScheme = GUIScaleScheme(TL("by offset from best lane"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1595  vehScheme.addColor(5, -100, TL("opposite lane"));
1596  vehScheme.addColor(3, -3, "-3");
1597  vehScheme.addColor(1.5, -1, "-1");
1598  vehScheme.addColor(1.5, 1, "1");
1599  vehScheme.addColor(3, 3, "3");
1600  vehScheme.setAllowsNegativeValues(true);
1601  vehicleScaler.addScheme(vehScheme);
1602  vehScheme = GUIScaleScheme(TL("by acceleration"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1603  vehScheme.addColor(4, -9.0);
1604  vehScheme.addColor(2, -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
1605  vehScheme.addColor(1, -0.1);
1606  vehScheme.addColor(1, 0.1);
1607  vehScheme.addColor(1, 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
1608  vehScheme.addColor(3, 5.2);
1609  vehScheme.setAllowsNegativeValues(true);
1610  vehicleScaler.addScheme(vehScheme);
1611  vehScheme = GUIScaleScheme(TL("by time gap on lane"), 5, "0", false, 0, COL_SCHEME_DYNAMIC);
1612  vehScheme.addColor(1, -1);
1613  vehScheme.addColor(1, 1);
1614  vehScheme.addColor(0.5, 2);
1615  vehScheme.setAllowsNegativeValues(true);
1616  vehicleScaler.addScheme(vehScheme);
1617  vehScheme = GUIScaleScheme(TL("by depart delay"), 0.8);
1618  vehScheme.addColor(1, 10.);
1619  vehScheme.addColor(2, 100.);
1620  vehScheme.addColor(3, 200.);
1621  vehScheme.addColor(5, 300.);
1622  vehicleScaler.addScheme(vehScheme);
1623  vehScheme = GUIScaleScheme(TL("by time loss"), 1, "", false, 0, COL_SCHEME_DYNAMIC);
1624  vehScheme.addColor(1, 10.);
1625  vehScheme.addColor(2, 60.);
1626  vehScheme.addColor(3, 180.);
1627  vehScheme.addColor(10, 900.);
1628  vehicleScaler.addScheme(vehScheme);
1629  vehScheme = GUIScaleScheme(TL("by stop delay"), 0.1, "", false, -1, COL_SCHEME_DYNAMIC);
1630  vehScheme.addColor(1, 0.);
1631  vehScheme.addColor(2, 10.);
1632  vehScheme.addColor(3, 60.);
1633  vehScheme.addColor(4, 120.);
1634  vehScheme.addColor(5, 300.);
1635  vehScheme.addColor(10, 900.);
1636  vehScheme.setAllowsNegativeValues(true);
1637  vehicleScaler.addScheme(vehScheme);
1638  vehScheme = GUIScaleScheme(TL("by stop arrival delay"), 0.1, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1639  vehScheme.addColor(0.5, -10.);
1640  vehScheme.addColor(1, 0.);
1641  vehScheme.addColor(2, 10.);
1642  vehScheme.addColor(3, 60.);
1643  vehScheme.addColor(4, 120.);
1644  vehScheme.addColor(5, 300.);
1645  vehScheme.addColor(10, 900.);
1646  vehScheme.setAllowsNegativeValues(true);
1647  vehicleScaler.addScheme(vehScheme);
1649  vehScheme.setAllowsNegativeValues(true);
1650  vehicleScaler.addScheme(vehScheme);
1651  }
1652 }
1653 
1654 
1655 void
1657  // init color schemes
1658  GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true);
1659  scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));
1660  scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));
1661  scheme.addColor(RGBColor(200, 255, 200), 3, TL("green verge"));
1662  scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));
1663  scheme.addColor(RGBColor::BLACK, 5, TL("railway"));
1664  scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));
1665  scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc
1666  scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing
1667  scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector
1668  scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road
1669  scheme.addColor(RGBColor(145, 145, 145), 11, TL("data mode"));
1670  scheme.addColor(RGBColor(200, 240, 240), 12, TL("airway"));
1671  laneColorer.addScheme(scheme);
1672  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1673  scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));
1674  laneColorer.addScheme(scheme);
1675  scheme = GUIColorScheme("by permission code", TL("by permission code"), RGBColor(240, 240, 240), "nobody");
1676  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
1677  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
1678  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
1679  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
1680  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
1681  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
1682  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
1683  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
1684  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
1685  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
1686  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
1687  laneColorer.addScheme(scheme);
1688 
1689  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
1690  scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1691  scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1692  scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1693  scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1694  scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1695  laneColorer.addScheme(scheme);
1696 
1697  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
1698  scheme.addColor(RGBColor::BLUE, 5.);
1699  laneColorer.addScheme(scheme);
1700 
1701  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
1702  scheme.addColor(RGBColor::ORANGE, 0.25);
1703  scheme.addColor(RGBColor::YELLOW, 0.5);
1704  scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
1705  scheme.addColor(RGBColor::GREEN, 2.);
1706  scheme.addColor(RGBColor::CYAN, 4.);
1707  scheme.addColor(RGBColor::BLUE, 100.);
1708  laneColorer.addScheme(scheme);
1709  laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1710 
1711  scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);
1712  scheme.addColor(RGBColor::RED, -20.);
1713  scheme.addColor(RGBColor::GREEN, 20.);
1714  scheme.setAllowsNegativeValues(true);
1715  laneColorer.addScheme(scheme);
1716  scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::RED);
1717  scheme.addColor(RGBColor::BLUE, -10.);
1718  scheme.addColor(RGBColor::YELLOW, 50.);
1719  scheme.addColor(RGBColor::GREEN, 100.);
1720  scheme.addColor(RGBColor::MAGENTA, 200.);
1721  scheme.setAllowsNegativeValues(true);
1722  laneColorer.addScheme(scheme);
1723  scheme = GUIColorScheme("by height at segment start", TL("by height at segment start"), RGBColor::RED);
1724  scheme.addColor(RGBColor::BLUE, -10.);
1725  scheme.addColor(RGBColor::YELLOW, 50.);
1726  scheme.addColor(RGBColor::GREEN, 100.);
1727  scheme.addColor(RGBColor::MAGENTA, 200.);
1728  scheme.setAllowsNegativeValues(true);
1729  laneColorer.addScheme(scheme);
1730  scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);
1731  scheme.addColor(RGBColor::YELLOW, 0.1);
1732  scheme.addColor(RGBColor::RED, 0.3);
1733  scheme.addColor(RGBColor::GREEN, -0.1);
1734  scheme.addColor(RGBColor::BLUE, -0.3);
1735  scheme.setAllowsNegativeValues(true);
1736  laneColorer.addScheme(scheme);
1737  scheme = GUIColorScheme("by segment inclination", TL("by segment inclination"), RGBColor::GREY);
1738  scheme.addColor(RGBColor::YELLOW, 0.1);
1739  scheme.addColor(RGBColor::RED, 0.3);
1740  scheme.addColor(RGBColor::GREEN, -0.1);
1741  scheme.addColor(RGBColor::BLUE, -0.3);
1742  scheme.setAllowsNegativeValues(true);
1743  laneColorer.addScheme(scheme);
1744  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1745  scheme.setAllowsNegativeValues(true);
1746  laneColorer.addScheme(scheme);
1747  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1748  scheme.setAllowsNegativeValues(true);
1749  laneColorer.addScheme(scheme);
1750  scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
1751  scheme.addColor(RGBColor::RED, 1.);
1752  scheme.addColor(RGBColor::RED, -1.);
1753  scheme.setAllowsNegativeValues(true);
1754  laneColorer.addScheme(scheme);
1755  scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
1756  scheme.addColor(RGBColor::RED, 1.);
1757  scheme.setAllowsNegativeValues(false);
1758  laneColorer.addScheme(scheme);
1760  scheme.setAllowsNegativeValues(true);
1761  laneColorer.addScheme(scheme);
1762 
1763  scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor(102, 0, 0), "", true);
1764  scheme.addColor(RGBColor(204, 0, 0), 1, TL("junction bubble"));
1765  scheme.addColor(RGBColor(230, 100, 115), 2, TL("geometry points"));
1766  scheme.addColor(GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW, 3, TL("connections missing"));
1767  scheme.addColor(RGBColor::GREEN, 3, TL("custom shape"));
1768  scheme.addColor(RGBColor(205, 180, 180), 4, TL("data mode"));
1769  junctionColorer.addScheme(scheme);
1770  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1771  scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1772  junctionColorer.addScheme(scheme);
1773  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1774  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1775  scheme.addColor(RGBColor::YELLOW, 2, "priority");
1776  scheme.addColor(RGBColor::RED, 3, "priority_stop");
1777  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1778  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1779  scheme.addColor(RGBColor::GREY, 6, "district");
1780  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1781  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1782  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1783  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1784  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
1785  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1786  scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue
1787  junctionColorer.addScheme(scheme);
1788  scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);
1789  scheme.addColor(RGBColor::BLUE, -10.);
1790  scheme.addColor(RGBColor::RED, 10.);
1791  scheme.addColor(RGBColor::YELLOW, 50.);
1792  scheme.addColor(RGBColor::GREEN, 100.);
1793  scheme.addColor(RGBColor::MAGENTA, 200.);
1794  scheme.setAllowsNegativeValues(true);
1795  junctionColorer.addScheme(scheme);
1796 
1798  poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));
1799  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1800  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1801  poiColorer.addScheme(scheme);
1802  poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));
1803 
1805  polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));
1806  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1807  scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1808  polyColorer.addScheme(scheme);
1809  polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1810  polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1811 
1813  {
1814  GUIScaleScheme edgeScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);
1815  laneScaler.addScheme(edgeScheme);
1816  }
1817 
1819  dataColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1820  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1821  scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1822  dataColorer.addScheme(scheme);
1823  dataColorer.addScheme(GUIColorScheme("by origin taz", TL("by origin taz"), RGBColor::ORANGE, "", true));
1824  dataColorer.addScheme(GUIColorScheme("by destination taz", TL("by destination taz"), RGBColor::ORANGE, "", true));
1826  scheme.setAllowsNegativeValues(true);
1827  dataColorer.addScheme(scheme);
1828 
1829  // dummy schemes
1830  vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1831  personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1832  containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1833  vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1834 }
1835 
1836 
1837 int
1839  if (UseMesoSim) {
1840  return edgeColorer.getActive();
1841  }
1842  return laneColorer.getActive();
1843 }
1844 
1845 
1846 int
1848  if (UseMesoSim) {
1849  return edgeScaler.getActive();
1850  }
1851  return laneScaler.getActive();
1852 }
1853 
1854 
1857  if (UseMesoSim) {
1858  return edgeColorer.getScheme();
1859  }
1860  return laneColorer.getScheme();
1861 }
1862 
1863 
1866  if (UseMesoSim) {
1867  return edgeScaler.getScheme();
1868  }
1869  return laneScaler.getScheme();
1870 }
1871 
1872 
1873 void
1878  dev.writeAttr("dither", dither);
1879  dev.writeAttr("fps", fps);
1880  dev.writeAttr("trueZ", trueZ);
1881  dev.writeAttr("drawBoundaries", drawBoundaries);
1882  dev.writeAttr("disableDottedContours", disableDottedContours);
1883  dev.writeAttr("forceDrawRectangleSelection", forceDrawForRectangleSelection);
1884  geometryIndices.print(dev, "geometryIndices");
1885  dev.closeTag();
1887  dev.writeAttr("backgroundColor", backgroundColor);
1888  dev.writeAttr("showGrid", showGrid);
1889  dev.writeAttr("gridXSize", gridXSize);
1890  dev.writeAttr("gridYSize", gridYSize);
1891  dev.closeTag();
1892  // edges
1894  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
1895  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
1896  dev.writeAttr("laneShowBorders", laneShowBorders);
1897  dev.writeAttr("showBikeMarkings", showBikeMarkings);
1898  dev.writeAttr("showLinkDecals", showLinkDecals);
1899  dev.writeAttr("realisticLinkRules", realisticLinkRules);
1900  dev.writeAttr("showLinkRules", showLinkRules);
1901  dev.writeAttr("showRails", showRails);
1902  dev.writeAttr("secondaryShape", secondaryShape);
1903  dev.writeAttr("hideConnectors", hideConnectors);
1904  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
1905  dev.writeAttr("minSize", laneMinSize);
1906  dev.writeAttr("showDirection", showLaneDirection);
1907  dev.writeAttr("showSublanes", showSublanes);
1908  dev.writeAttr("spreadSuperposed", spreadSuperposed);
1909  dev.writeAttr("disableHideByZoom", disableHideByZoom);
1910  dev.writeAttr("edgeParam", edgeParam);
1911  dev.writeAttr("laneParam", laneParam);
1912  dev.writeAttr("vehicleParam", vehicleParam);
1913  dev.writeAttr("vehicleScaleParam", vehicleScaleParam);
1914  dev.writeAttr("vehicleTextParam", vehicleTextParam);
1915  dev.writeAttr("edgeData", edgeData);
1916  dev.writeAttr("edgeDataID", edgeDataID);
1917  dev.writeAttr("edgeDataScaling", edgeDataScaling);
1918  edgeValueRainBow.print(dev, "edgeValue");
1919  dev.lf();
1920  dev << " ";
1921  edgeName.print(dev, "edgeName");
1922  dev.lf();
1923  dev << " ";
1924  internalEdgeName.print(dev, "internalEdgeName");
1925  dev.lf();
1926  dev << " ";
1927  cwaEdgeName.print(dev, "cwaEdgeName");
1928  dev.lf();
1929  dev << " ";
1930  streetName.print(dev, "streetName");
1931  dev.lf();
1932  dev << " ";
1933  edgeValue.print(dev, "edgeValue");
1934  edgeScaleValue.print(dev, "edgeScaleValue");
1935  laneColorer.save(dev);
1936  laneScaler.save(dev);
1937  edgeColorer.save(dev, "meso:");
1938  edgeScaler.save(dev);
1939  dev.closeTag();
1940  // vehicles
1942  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
1943  dev.writeAttr("vehicleScaleMode", vehicleScaler.getActive());
1944  dev.writeAttr("vehicleQuality", vehicleQuality);
1945  vehicleSize.print(dev, "vehicle");
1946  dev.writeAttr("showBlinker", showBlinker);
1947  dev.writeAttr("drawMinGap", drawMinGap);
1948  dev.writeAttr("drawBrakeGap", drawBrakeGap);
1949  dev.writeAttr("showBTRange", showBTRange);
1950  dev.writeAttr("showRouteIndex", showRouteIndex);
1951  dev.writeAttr("scaleLength", scaleLength);
1952  dev.writeAttr("drawReversed", drawReversed);
1953  dev.writeAttr("showParkingInfo", showParkingInfo);
1954  dev.writeAttr("showChargingInfo", showChargingInfo);
1955  dev.lf();
1956  dev << " ";
1957  vehicleName.print(dev, "vehicleName");
1958  dev.lf();
1959  dev << " ";
1960  vehicleValue.print(dev, "vehicleValue");
1961  dev.lf();
1962  dev << " ";
1963  vehicleScaleValue.print(dev, "vehicleScaleValue");
1964  dev.lf();
1965  dev << " ";
1966  vehicleText.print(dev, "vehicleText");
1967  vehicleColorer.save(dev);
1968  vehicleScaler.save(dev);
1969  dev.closeTag();
1970  // persons
1972  dev.writeAttr("personMode", personColorer.getActive());
1973  dev.writeAttr("personQuality", personQuality);
1974  dev.writeAttr("showPedestrianNetwork", showPedestrianNetwork);
1975  dev.writeAttr("pedestrianNetworkColor", pedestrianNetworkColor);
1976  personSize.print(dev, "person");
1977  dev.lf();
1978  dev << " ";
1979  personName.print(dev, "personName");
1980  dev.lf();
1981  dev << " ";
1982  personValue.print(dev, "personValue");
1983  personColorer.save(dev);
1984  dev.closeTag();
1985  // containers
1987  dev.writeAttr("containerMode", containerColorer.getActive());
1988  dev.writeAttr("containerQuality", containerQuality);
1989  containerSize.print(dev, "container");
1990  dev.lf();
1991  dev << " ";
1992  containerName.print(dev, "containerName");
1993  containerColorer.save(dev);
1994  dev.closeTag();
1995  // junctions
1997  dev.writeAttr("junctionMode", junctionColorer.getActive());
1998  dev.lf();
1999  dev << " ";
2000  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
2001  dev.lf();
2002  dev << " ";
2003  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
2004  dev.lf();
2005  dev << " ";
2006  junctionID.print(dev, "junctionID");
2007  dev.lf();
2008  dev << " ";
2009  junctionName.print(dev, "junctionName");
2010  dev.lf();
2011  dev << " ";
2012  internalJunctionName.print(dev, "internalJunctionName");
2013  dev.lf();
2014  dev << " ";
2015  tlsPhaseIndex.print(dev, "tlsPhaseIndex");
2016  tlsPhaseName.print(dev, "tlsPhaseName");
2017  dev.lf();
2018  dev << " ";
2019  dev.writeAttr("showLane2Lane", showLane2Lane);
2020  dev.writeAttr("drawShape", drawJunctionShape);
2021  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
2022  junctionSize.print(dev, "junction");
2023  junctionValueRainBow.print(dev, "junctionValue");
2024  junctionColorer.save(dev);
2025  dev.closeTag();
2026  // additionals
2028  dev.writeAttr("addMode", addMode);
2029  addSize.print(dev, "add");
2030  addName.print(dev, "addName");
2031  addFullName.print(dev, "addFullName");
2032  // temporal (will be integrated in a schema)
2033  dev.writeAttr("busStopColor", colorSettings.busStopColor);
2034  dev.writeAttr("busStopColorSign", colorSettings.busStopColorSign);
2035  dev.writeAttr("chargingStationColor", colorSettings.chargingStationColor);
2036  dev.writeAttr("chargingStationColorCharge", colorSettings.chargingStationColorCharge);
2037  dev.writeAttr("chargingStationColorSign", colorSettings.chargingStationColorSign);
2038  dev.writeAttr("containerStopColor", colorSettings.containerStopColor);
2039  dev.writeAttr("containerStopColorSign", colorSettings.containerStopColorSign);
2040  dev.writeAttr("parkingAreaColor", colorSettings.parkingAreaColor);
2041  dev.writeAttr("parkingAreaColorSign", colorSettings.parkingAreaColorSign);
2042  dev.writeAttr("parkingSpaceColor", colorSettings.parkingSpaceColor);
2043  dev.writeAttr("parkingSpaceColorContour", colorSettings.parkingSpaceColorContour);
2044  dev.writeAttr("personTripColor", colorSettings.personTripColor);
2045  dev.writeAttr("personTripWidth", widthSettings.personTripWidth);
2046  dev.writeAttr("rideColor", colorSettings.rideColor);
2047  dev.writeAttr("rideWidth", widthSettings.rideWidth);
2048  dev.writeAttr("selectedAdditionalColor", colorSettings.selectedAdditionalColor);
2049  dev.writeAttr("selectedConnectionColor", colorSettings.selectedConnectionColor);
2050  dev.writeAttr("selectedContainerColor", colorSettings.selectedContainerColor);
2051  dev.writeAttr("selectedContainerPlanColor", colorSettings.selectedContainerPlanColor);
2052  dev.writeAttr("selectedCrossingColor", colorSettings.selectedCrossingColor);
2053  dev.writeAttr("selectedEdgeColor", colorSettings.selectedEdgeColor);
2054  dev.writeAttr("selectedEdgeDataColor", colorSettings.selectedEdgeDataColor);
2055  dev.writeAttr("selectedLaneColor", colorSettings.selectedLaneColor);
2056  dev.writeAttr("selectedPersonColor", colorSettings.selectedPersonColor);
2057  dev.writeAttr("selectedPersonPlanColor", colorSettings.selectedPersonPlanColor);
2058  dev.writeAttr("selectedProhibitionColor", colorSettings.selectedProhibitionColor);
2059  dev.writeAttr("selectedRouteColor", colorSettings.selectedRouteColor);
2060  dev.writeAttr("selectedVehicleColor", colorSettings.selectedVehicleColor);
2061  dev.writeAttr("selectionColor", colorSettings.selectionColor);
2062  dev.writeAttr("stopColor", colorSettings.stopColor);
2063  dev.writeAttr("waypointColor", colorSettings.waypointColor);
2064  dev.writeAttr("stopContainerColor", colorSettings.stopContainerColor);
2065  dev.writeAttr("stopPersonColor", colorSettings.stopPersonColor);
2066  dev.writeAttr("trainStopColor", colorSettings.trainStopColor);
2067  dev.writeAttr("trainStopColorSign", colorSettings.trainStopColorSign);
2068  dev.writeAttr("transhipColor", colorSettings.transhipColor);
2069  dev.writeAttr("transhipWidth", widthSettings.transhipWidth);
2070  dev.writeAttr("transportColor", colorSettings.transportColor);
2071  dev.writeAttr("transportWidth", widthSettings.transportWidth);
2072  dev.writeAttr("tripWidth", widthSettings.tripWidth);
2073  dev.writeAttr("vehicleTripColor", colorSettings.personTripColor);
2074  dev.writeAttr("walkColor", colorSettings.walkColor);
2075  dev.writeAttr("walkWidth", widthSettings.walkWidth);
2076  dev.closeTag();
2077  // pois
2079  dev.writeAttr("poiTextParam", poiTextParam);
2080  poiSize.print(dev, "poi");
2081  dev.writeAttr("poiDetail", poiDetail);
2082  poiName.print(dev, "poiName");
2083  poiType.print(dev, "poiType");
2084  poiText.print(dev, "poiText");
2085  poiColorer.save(dev);
2086  dev.closeTag();
2087  // polys
2089  polySize.print(dev, "poly");
2090  polyName.print(dev, "polyName");
2091  polyType.print(dev, "polyType");
2092  polyColorer.save(dev);
2093  dev.closeTag();
2094  // 3D
2096  dev.writeAttr("show3DTLSLinkMarkers", show3DTLSLinkMarkers);
2097  dev.writeAttr("show3DTLSDomes", show3DTLSDomes);
2098  dev.writeAttr("show3DHeadUpDisplay", show3DHeadUpDisplay);
2099  dev.writeAttr("generate3DTLSModels", generate3DTLSModels);
2100  dev.writeAttr("ambient3DLight", ambient3DLight);
2101  dev.writeAttr("diffuse3DLight", diffuse3DLight);
2102  dev.closeTag();
2103  // legend
2105  dev.writeAttr("showSizeLegend", showSizeLegend);
2106  dev.writeAttr("showColorLegend", showColorLegend);
2107  dev.writeAttr("showVehicleColorLegend", showVehicleColorLegend);
2108  dev.closeTag();
2109 
2110  dev.closeTag();
2111 }
2112 
2113 
2114 bool
2116  if (show3DTLSDomes != v2.show3DTLSDomes) {
2117  return false;
2118  }
2120  return false;
2121  }
2123  return false;
2124  }
2126  return false;
2127  }
2128  if (ambient3DLight != v2.ambient3DLight) {
2129  return false;
2130  }
2131  if (diffuse3DLight != v2.diffuse3DLight) {
2132  return false;
2133  }
2134  if (skyColor != v2.skyColor) {
2135  return false;
2136  }
2137  if (dither != v2.dither) {
2138  return false;
2139  }
2140  if (fps != v2.fps) {
2141  return false;
2142  }
2143  if (trueZ != v2.trueZ) {
2144  return false;
2145  }
2146  if (drawBoundaries != v2.drawBoundaries) {
2147  return false;
2148  }
2150  return false;
2151  }
2153  return false;
2154  }
2155  if (geometryIndices != v2.geometryIndices) {
2156  return false;
2157  }
2158  if (backgroundColor != v2.backgroundColor) {
2159  return false;
2160  }
2161  if (colorSettings != v2.colorSettings) {
2162  return false;
2163  }
2164  if (showGrid != v2.showGrid) {
2165  return false;
2166  }
2167  if (gridXSize != v2.gridXSize) {
2168  return false;
2169  }
2170  if (gridYSize != v2.gridYSize) {
2171  return false;
2172  }
2173 
2174  if (!(edgeColorer == v2.edgeColorer)) {
2175  return false;
2176  }
2177  if (!(edgeScaler == v2.edgeScaler)) {
2178  return false;
2179  }
2180  if (!(laneColorer == v2.laneColorer)) {
2181  return false;
2182  }
2183  if (!(laneScaler == v2.laneScaler)) {
2184  return false;
2185  }
2186  if (laneShowBorders != v2.laneShowBorders) {
2187  return false;
2188  }
2189  if (showBikeMarkings != v2.showBikeMarkings) {
2190  return false;
2191  }
2192  if (showLinkDecals != v2.showLinkDecals) {
2193  return false;
2194  }
2196  return false;
2197  }
2198  if (showLinkRules != v2.showLinkRules) {
2199  return false;
2200  }
2201  if (showRails != v2.showRails) {
2202  return false;
2203  }
2204  if (secondaryShape != v2.secondaryShape) {
2205  return false;
2206  }
2207  if (edgeName != v2.edgeName) {
2208  return false;
2209  }
2210  if (internalEdgeName != v2.internalEdgeName) {
2211  return false;
2212  }
2213  if (cwaEdgeName != v2.cwaEdgeName) {
2214  return false;
2215  }
2216  if (streetName != v2.streetName) {
2217  return false;
2218  }
2219  if (edgeValue != v2.edgeValue) {
2220  return false;
2221  }
2222  if (edgeScaleValue != v2.edgeScaleValue) {
2223  return false;
2224  }
2225  if (hideConnectors != v2.hideConnectors) {
2226  return false;
2227  }
2229  return false;
2230  }
2231  if (laneMinSize != v2.laneMinSize) {
2232  return false;
2233  }
2235  return false;
2236  }
2237  if (showSublanes != v2.showSublanes) {
2238  return false;
2239  }
2240  if (spreadSuperposed != v2.spreadSuperposed) {
2241  return false;
2242  }
2244  return false;
2245  }
2246  if (edgeParam != v2.edgeParam) {
2247  return false;
2248  }
2249  if (laneParam != v2.laneParam) {
2250  return false;
2251  }
2252  if (vehicleParam != v2.vehicleParam) {
2253  return false;
2254  }
2256  return false;
2257  }
2258  if (vehicleTextParam != v2.vehicleTextParam) {
2259  return false;
2260  }
2261  if (edgeData != v2.edgeData) {
2262  return false;
2263  }
2264  if (edgeDataID != v2.edgeDataID) {
2265  return false;
2266  }
2267  if (edgeDataScaling != v2.edgeDataScaling) {
2268  return false;
2269  }
2270  if (edgeValueRainBow != v2.edgeValueRainBow) {
2271  return false;
2272  }
2273  if (!(vehicleColorer == v2.vehicleColorer)) {
2274  return false;
2275  }
2276  if (!(vehicleScaler == v2.vehicleScaler)) {
2277  return false;
2278  }
2279  if (vehicleQuality != v2.vehicleQuality) {
2280  return false;
2281  }
2282  if (vehicleSize != v2.vehicleSize) {
2283  return false;
2284  }
2285  if (showBlinker != v2.showBlinker) {
2286  return false;
2287  }
2289  return false;
2290  }
2291  if (drawMinGap != v2.drawMinGap) {
2292  return false;
2293  }
2294  if (drawBrakeGap != v2.drawBrakeGap) {
2295  return false;
2296  }
2297  if (showBTRange != v2.showBTRange) {
2298  return false;
2299  }
2300  if (showRouteIndex != v2.showRouteIndex) {
2301  return false;
2302  }
2303  if (scaleLength != v2.scaleLength) {
2304  return false;
2305  }
2306  if (drawReversed != v2.drawReversed) {
2307  return false;
2308  }
2309  if (showParkingInfo != v2.showParkingInfo) {
2310  return false;
2311  }
2312  if (showChargingInfo != v2.showChargingInfo) {
2313  return false;
2314  }
2315  if (vehicleName != v2.vehicleName) {
2316  return false;
2317  }
2318  if (vehicleValue != v2.vehicleValue) {
2319  return false;
2320  }
2322  return false;
2323  }
2324  if (vehicleText != v2.vehicleText) {
2325  return false;
2326  }
2327  if (!(personColorer == v2.personColorer)) {
2328  return false;
2329  }
2330  if (personQuality != v2.personQuality) {
2331  return false;
2332  }
2333  if (personSize != v2.personSize) {
2334  return false;
2335  }
2336  if (personName != v2.personName) {
2337  return false;
2338  }
2339  if (personValue != v2.personValue) {
2340  return false;
2341  }
2343  return false;
2344  }
2346  return false;
2347  }
2348  if (!(containerColorer == v2.containerColorer)) {
2349  return false;
2350  }
2351  if (containerQuality != v2.containerQuality) {
2352  return false;
2353  }
2354  if (containerSize != v2.containerSize) {
2355  return false;
2356  }
2357  if (containerName != v2.containerName) {
2358  return false;
2359  }
2360  if (!(junctionColorer == v2.junctionColorer)) {
2361  return false;
2362  }
2363  if (!(poiColorer == v2.poiColorer)) {
2364  return false;
2365  }
2366  if (!(polyColorer == v2.polyColorer)) {
2367  return false;
2368  }
2369  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
2370  return false;
2371  }
2373  return false;
2374  }
2375  if (junctionID != v2.junctionID) {
2376  return false;
2377  }
2378  if (junctionName != v2.junctionName) {
2379  return false;
2380  }
2382  return false;
2383  }
2384  if (tlsPhaseIndex != v2.tlsPhaseIndex) {
2385  return false;
2386  }
2387  if (tlsPhaseName != v2.tlsPhaseName) {
2388  return false;
2389  }
2390 
2391  if (showLane2Lane != v2.showLane2Lane) {
2392  return false;
2393  }
2394 
2396  return false;
2397  }
2398 
2400  return false;
2401  }
2402  if (junctionSize != v2.junctionSize) {
2403  return false;
2404  }
2406  return false;
2407  }
2408 
2409  if (addMode != v2.addMode) {
2410  return false;
2411  }
2412  if (addSize != v2.addSize) {
2413  return false;
2414  }
2415  if (addName != v2.addName) {
2416  return false;
2417  }
2418  if (addFullName != v2.addFullName) {
2419  return false;
2420  }
2421  if (poiSize != v2.poiSize) {
2422  return false;
2423  }
2424  if (poiDetail != v2.poiDetail) {
2425  return false;
2426  }
2427  if (poiName != v2.poiName) {
2428  return false;
2429  }
2430  if (poiType != v2.poiType) {
2431  return false;
2432  }
2433  if (poiText != v2.poiText) {
2434  return false;
2435  }
2436  if (poiTextParam != v2.poiTextParam) {
2437  return false;
2438  }
2439  if (polySize != v2.polySize) {
2440  return false;
2441  }
2442  if (polyName != v2.polyName) {
2443  return false;
2444  }
2445  if (polyType != v2.polyType) {
2446  return false;
2447  }
2448 
2449  if (showSizeLegend != v2.showSizeLegend) {
2450  return false;
2451  }
2452  if (showColorLegend != v2.showColorLegend) {
2453  return false;
2454  }
2456  return false;
2457  }
2458  if (!(dataColorer == v2.dataColorer)) {
2459  return false;
2460  }
2461  if (!(dataValue == v2.dataValue)) {
2462  return false;
2463  }
2465  return false;
2466  }
2468  return false;
2469  }
2470  if (!(relDataAttr == v2.relDataAttr)) {
2471  return false;
2472  }
2473  if (!(dataValueRainBow == v2.dataValueRainBow)) {
2474  return false;
2475  }
2476 
2477  return true;
2478 }
2479 
2480 
2481 const RGBColor&
2483  switch (ls) {
2488  case LINKSTATE_TL_RED:
2489  return SUMO_color_TL_RED;
2491  return SUMO_color_TL_REDYELLOW;
2500  case LINKSTATE_MAJOR:
2501  return realistic ? RGBColor::INVISIBLE : SUMO_color_MAJOR;
2502  case LINKSTATE_MINOR:
2503  return realistic ? SUMO_color_MAJOR : SUMO_color_MINOR;
2504  case LINKSTATE_EQUAL:
2505  return SUMO_color_EQUAL;
2506  case LINKSTATE_STOP:
2507  return realistic ? SUMO_color_MAJOR : SUMO_color_STOP;
2508  case LINKSTATE_ALLWAY_STOP:
2509  return realistic ? SUMO_color_MAJOR : SUMO_color_ALLWAY_STOP;
2510  case LINKSTATE_ZIPPER:
2511  return realistic ? RGBColor::INVISIBLE : SUMO_color_ZIPPER;
2512  case LINKSTATE_DEADEND:
2513  return SUMO_color_DEADEND;
2514  default:
2515  throw ProcessError(TLF("No color defined for LinkState '%'", std::string(ls, 1)));
2516  }
2517 }
2518 
2519 
2520 double
2521 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
2522  double viewAngle = objectAngle - angle;
2523  while (viewAngle < 0) {
2524  viewAngle += 360;
2525  }
2526  // fmod round towards zero which is not want we want for negative numbers
2527  viewAngle = fmod(viewAngle, 360);
2528  if (viewAngle > 90 && viewAngle < 270) {
2529  // avoid reading text on its head
2530  objectAngle -= 180;
2531  }
2532  return objectAngle;
2533 }
2534 
2535 
2536 bool
2538  double viewAngle = objectAngle - angle;
2539  while (viewAngle < 0) {
2540  viewAngle += 360;
2541  }
2542  // fmod round towards zero which is not want we want for negative numbers
2543  viewAngle = fmod(viewAngle, 360);
2544  return (viewAngle > 90 && viewAngle < 270);
2545 }
2546 
2547 
2548 bool
2549 GUIVisualizationSettings::checkBoundarySizeDrawing(const double w, const double h) const {
2551  return true;
2552  } else if (disableHideByZoom) {
2553  return true;
2554  } else if (
2562  return true;
2563  } else {
2564  return (scale * MAX2(w, h)) > BoundarySizeDrawing;
2565  }
2566 }
2567 
2568 
2570 GUIVisualizationSettings::getDetailLevel(const double exaggeration) const {
2571  // calculate factor
2572  const auto factor = (scale * exaggeration);
2573  if (factor >= 10) {
2575  } else if (factor >= 5) {
2577  } else if (factor >= 2.5) {
2579  } else if (factor >= 1.25) {
2581  } else {
2583  }
2584 }
2585 
2586 
2587 bool
2588 GUIVisualizationSettings::drawDetail(const double detail, const double exaggeration) const {
2589  if (detail <= 0) {
2590  return true;
2591  } else {
2592  return ((scale * exaggeration) >= detail);
2593  }
2594 }
2595 
2596 
2597 bool
2598 GUIVisualizationSettings::drawMovingGeometryPoint(const double exaggeration, const double radius) const {
2599  return (scale * radius * exaggeration > 10);
2600 }
2601 
2602 /****************************************************************************/
GUISelectedStorage gSelected
A global holder of selected objects.
GUIPropertyScheme< RGBColor > GUIColorScheme
GUIPropertyScheme< double > GUIScaleScheme
const RGBColor SUMO_color_EQUAL(128, 128, 128)
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 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 OSG_color_SKY(51, 51, 102, 255)
const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0)
const RGBColor SUMO_color_TL_RED(255, 0, 0)
const RGBColor OSG_color_AMBIENT(32, 32, 32, 255)
const RGBColor SUMO_color_MAJOR(255, 255, 255)
const RGBColor OSG_color_DIFFUSE(64, 64, 64, 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_MINOR(51, 51, 51)
const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0)
const RGBColor SUMO_color_STOP(128, 0, 128)
#define TL(string)
Definition: MsgHandler.h:315
#define TLF(string,...)
Definition: MsgHandler.h:317
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_3D
@ 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
invalid double
Definition: StdDefs.h:64
T MAX2(T a, T b)
Definition: StdDefs.h:82
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:39
double getHeight() const
Returns the height of the boundary (y-axis)
Definition: Boundary.cpp:160
double getWidth() const
Returns the width of the boudary (x-axis)
Definition: Boundary.cpp:154
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.
GUIVisualizationSizeSettings vehicleSize
GUIVisualizationSizeSettings containerSize
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings internalEdgeName
bool showPedestrianNetwork
Flag for visualizing the pedestrian network generated for JuPedSim.
RGBColor skyColor
sky background color
GUIVisualizationSizeSettings junctionSize
static const std::string SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL
bool drawBoundaries
enable or disable draw boundaries
static const std::string SCHEME_NAME_EDGEDATA_NUMERICAL
bool showBikeMarkings
Information whether bicycle lane marking shall be drawn.
std::string edgeDataID
id for coloring by live edgeData
GUIScaler laneScaler
The lane scaler.
GUIVisualizationTextSettings edgeScaleValue
double BoundarySizeDrawing
constant for boundary size drawing (20 for slow computers, 10 for quick computers)
bool dither
Information whether dithering shall be enabled.
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationSettings(const std::string &_name, bool _netedit=false)
constructor
bool disableHideByZoom
disable hide by zoom
static const std::string SCHEME_NAME_EDGEDATA_LIVE
GUIVisualizationTextSettings personValue
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.
bool checkDrawAdditional(Detail d, const bool selected) const
check if draw additionals
RGBColor pedestrianNetworkColor
The color of the pedestrian network generated for JuPedSim.
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 geometryIndices
GUIVisualizationTextSettings dataValue
bool show3DTLSDomes
whether the semi-transparent domes around 3D TL models should be drawn
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.
bool trueZ
drawl all objects according to their z data
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
bool disableDottedContours
flag for disable dotted contours in netedit
GUIColorer polyColorer
The polygon colorer.
int vehicleQuality
The quality of vehicle drawing.
GUIVisualizationTextSettings drawLinkJunctionIndex
bool checkDrawPoly(const Boundary &b, const bool selected) const
check if draw polygon
bool generate3DTLSModels
whether 3D TLS models should be generated automatically
static const std::string SCHEME_NAME_LANE_PARAM_NUMERICAL
GUIVisualizationTextSettings addFullName
GUIVisualizationTextSettings edgeValue
bool checkDrawVehicle(Detail d, const bool selected) const
check if draw vehicle
bool checkDrawPOI(const double w, const double h, const Detail d, const bool selected) const
check if draw POI
bool fps
Information whether frames-per-second should be drawn.
std::string vehicleParam
key for coloring by vehicle parameter
Detail getDetailLevel(const double exaggeration) const
return the detail level
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 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.
GUIVisualizationRainbowSettings edgeValueRainBow
checks and thresholds for rainbow coloring
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 hide connectors
GUIScaler vehicleScaler
The size scaling settings for vehicles.
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
GUIColorer personColorer
The person colorer.
void save(OutputDevice &dev) const
Writes the settings into an output device.
bool checkDrawContainer(Detail d, const bool selected) const
check if draw container
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.
bool showChargingInfo
Set whether the charging search related information should be shown.
RGBColor ambient3DLight
3D material light components
GUIVisualizationRainbowSettings junctionValueRainBow
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.
GUIVisualizationRainbowSettings dataValueRainBow
value below which edgeData and edgeRelation data value should not be rendered
bool secondaryShape
whether secondary lane shape shall be drawn
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
bool checkDrawJunction(const Boundary &b, const bool selected) const
check if draw junction
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
bool drawForViewObjectsHandler
whether drawing is performed for the purpose of selecting objects in view using ViewObjectsHandler
GUIVisualizationTextSettings poiText
GUIVisualizationTextSettings vehicleText
bool checkDrawPerson(Detail d, const bool selected) const
check if draw person
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
bool show3DHeadUpDisplay
whether to draw the head up display items
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
static std::map< std::string, std::vector< RGBColor > > RAINBOW_SCHEMES
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 drawReversed
Whether to draw reversed vehicles in their reversed state.
GUIVisualizationTextSettings personName
bool showColorLegend
Information whether the edge color legend shall be drawn.
std::string poiTextParam
key for rendering poi textual parameter
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.
void copy(const GUIVisualizationSettings &s)
copy all content from another GUIVisualizationSettings (note: DON'T USE in DrawGL functions!...
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 checkBoundarySizeDrawing(const double w, const double h) const
check if draw element depending of boundarySize
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.
std::string edgeDataScaling
key for scaling by edgeData
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:242
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:254
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 RGBColor overheadWireColorBot
overhead wire color bot
static const double arrowWidth
arrow width
static const RGBColor connectionColor
connection color
static const RGBColor overheadWireColorTop
overhead wire color top
static const double arrowOffset
arrow offset
static const RGBColor TLSConnectionColor
connection color between E1/junctions and TLS
static const double tractionSubstationSize
tractionSubstation size
static const RGBColor vaporizerColor
color for vaporizers
static const RGBColor overheadWireColorSelected
overhead wire color selected
static const RGBColor rerouterColor
color for rerouters
static const double stopEdgeSize
stopEdges size
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 invalid
color for invalid elements
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
RGBColor waypointColor
color for Waypoints
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 tmp
draw connections in demand mode
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 double segmentWidthSmall
width of small dotted contour segments
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 segmentWidthLarge
width of large 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 bubble 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 hideMax
whether data above threshold should not be colored
bool operator==(const GUIVisualizationRainbowSettings &other)
equality comparator
bool setNeutral
whether the scale should be centered at a specific value
bool fixRange
whether the color scale should be fixed to the given min/max values
double minThreshold
threshold below which value should not be colored
void print(OutputDevice &dev, const std::string &name) const
print values in output device
bool operator!=(const GUIVisualizationRainbowSettings &other)
inequality comparator
GUIVisualizationRainbowSettings(bool _hideMin, double _minThreshold, bool _hideMax, double _maxThreshold, bool _setNeutral, double _neutralThreshold, bool _fixRange)
constructor
bool hideMin
whether data below threshold should not be colored
double neutralThreshold
neutral point of scale
double maxThreshold
threshold above which value should not be colored
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 symbolInternalRadius
symbol internal radius
static const double chargingStationWidth
chargingStation width
static const double busStopWidth
busStop width
static const double symbolExternalRadius
symbol external radius
static const double symbolInternalTextSize
symbol internal text size
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