Eclipse SUMO - Simulation of Urban MObility
GUIVisualizationSettings.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2020 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
20 // Stores the information about how to visualize structures
21 /****************************************************************************/
22 #include <config.h>
23 
24 #include <map>
25 #include <vector>
27 
29 #include "GUIPropertyScheme.h"
30 
31 // ===========================================================================
32 // static members
33 // ===========================================================================
34 
36 
37 // -------------------------------------------------------------------------
38 // color constants for link states
39 // -------------------------------------------------------------------------
40 
43 const RGBColor SUMO_color_TL_RED(255, 0, 0);
44 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
49 const RGBColor SUMO_color_MAJOR(255, 255, 255);
50 const RGBColor SUMO_color_MINOR(51, 51, 51);
51 const RGBColor SUMO_color_EQUAL(128, 128, 128);
52 const RGBColor SUMO_color_STOP(128, 0, 128);
54 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
56 
57 // -------------------------------------------------------------------------
58 // color constants for other objects
59 // -------------------------------------------------------------------------
60 
73 
74 // -------------------------------------------------------------------------
75 // color constants for other objects
76 // -------------------------------------------------------------------------
77 
79 const RGBColor GUIVisualizationCandidateColorSettings::source(0, 255, 255, 255); // Cyan
80 const RGBColor GUIVisualizationCandidateColorSettings::target(0, 255, 0, 255); // Green
81 const RGBColor GUIVisualizationCandidateColorSettings::special(255, 0, 255, 255); // Magenta
82 const RGBColor GUIVisualizationCandidateColorSettings::conflict(255, 255, 0, 255); // Yellow
83 
84 // -------------------------------------------------------------------------
85 // Netedit size values
86 // -------------------------------------------------------------------------
87 
96 
97 // -------------------------------------------------------------------------
98 // additional values
99 // -------------------------------------------------------------------------
100 
102 
103 // -------------------------------------------------------------------------
104 // additional values
105 // -------------------------------------------------------------------------
106 
118 
119 // -------------------------------------------------------------------------
120 // detector values
121 // -------------------------------------------------------------------------
122 
136 
137 // -------------------------------------------------------------------------
138 // StoppingPlace values
139 // -------------------------------------------------------------------------
140 
156 
157 // -------------------------------------------------------------------------
158 // Dotted contour values
159 // -------------------------------------------------------------------------
160 
167 
168 // -------------------------------------------------------------------------
169 // widths of certain NETEDIT objects
170 // -------------------------------------------------------------------------
171 
172 const double GUIVisualizationWidthSettings::route(0.66);
173 const double GUIVisualizationWidthSettings::trip(0.2);
175 const double GUIVisualizationWidthSettings::walk(0.25);
176 const double GUIVisualizationWidthSettings::ride(0.25);
177 
178 // -------------------------------------------------------------------------
179 // details of certain NETEDIT objects (0 = drawn always)
180 // -------------------------------------------------------------------------
181 
183 const double GUIVisualizationDetailSettings::laneTextures(20); // originally 10
185 const double GUIVisualizationDetailSettings::additionalTextures(20); // originally 10
202 
203 // -------------------------------------------------------------------------
204 // scheme names
205 // -------------------------------------------------------------------------
206 
207 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL("by param (numerical, streetwise)");
208 const std::string GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL("by param (numerical, lanewise)");
209 const std::string GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL("by param (numerical)");
210 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL("by edgeData (numerical, streetwise)");
211 const std::string GUIVisualizationSettings::SCHEME_NAME_SELECTION("by selection");
212 const std::string GUIVisualizationSettings::SCHEME_NAME_TYPE("by type");
213 const std::string GUIVisualizationSettings::SCHEME_NAME_PERMISSION_CODE("by permission code");
214 
215 const double GUIVisualizationSettings::MISSING_DATA(std::numeric_limits<double>::max());
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 _show, double _size, RGBColor _color, RGBColor _bgColor, bool _constSize) :
232  show(_show),
233  size(_size),
234  color(_color),
235  bgColor(_bgColor),
236  constSize(_constSize) {
237 }
238 
239 
240 bool
242  return (show == other.show) &&
243  (size == other.size) &&
244  (color == other.color) &&
245  (bgColor == other.bgColor) &&
246  (constSize == other.constSize);
247 }
248 
249 
250 bool
252  return (show != other.show) ||
253  (size != other.size) ||
254  (color != other.color) ||
255  (bgColor != other.bgColor) ||
256  (constSize != other.constSize);
257 }
258 
259 
260 void
261 GUIVisualizationTextSettings::print(OutputDevice& dev, const std::string& name) const {
262  dev.writeAttr(name + "_show", show);
263  dev.writeAttr(name + "_size", size);
264  dev.writeAttr(name + "_color", color);
265  dev.writeAttr(name + "_bgColor", bgColor);
266  dev.writeAttr(name + "_constantSize", constSize);
267 }
268 
269 
270 double
271 GUIVisualizationTextSettings::scaledSize(double scale, double constFactor) const {
272  return constSize ? (size / scale) : (size * constFactor);
273 }
274 
275 // ---------------------------------------------------------------------------
276 // GUIVisualizationSizeSettings - methods
277 // ---------------------------------------------------------------------------
278 
279 GUIVisualizationSizeSettings::GUIVisualizationSizeSettings(double _minSize, double _exaggeration, bool _constantSize, bool _constantSizeSelected) :
280  minSize(_minSize),
281  exaggeration(_exaggeration),
282  constantSize(_constantSize),
283  constantSizeSelected(_constantSizeSelected) {
284 }
285 
286 
287 double
289  // declare exaggeration final
290  double exaggerationFinal;
292  if (constantSize && (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o))) {
293  exaggerationFinal = MAX2((double)exaggeration, exaggeration * factor / s.scale);
294  } else if (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o)) {
295  exaggerationFinal = exaggeration;
296  } else {
297  exaggerationFinal = 1;
298  }
299  // add selectorFrameScale
300  if ((o != nullptr) && gSelected.isSelected(o)) {
301  return (exaggerationFinal * s.selectorFrameScale);
302  } else {
303  return exaggerationFinal;
304  }
305 }
306 
307 
308 bool
310  return (constantSize == other.constantSize) &&
312  (minSize == other.minSize) &&
313  (exaggeration == other.exaggeration);
314 }
315 
316 
317 bool
319  return (constantSize != other.constantSize) ||
321  (minSize != other.minSize) ||
322  (exaggeration != other.exaggeration);
323 }
324 
325 
326 void
327 GUIVisualizationSizeSettings::print(OutputDevice& dev, const std::string& name) const {
328  dev.writeAttr(name + "_minSize", minSize);
329  dev.writeAttr(name + "_exaggeration", exaggeration);
330  dev.writeAttr(name + "_constantSize", constantSize);
331  dev.writeAttr(name + "_constantSizeSelected", constantSizeSelected);
332 }
333 
334 // ---------------------------------------------------------------------------
335 // GUIVisualizationColorSettings - methods
336 // ---------------------------------------------------------------------------
337 
339  selectionColor(0, 0, 204, 255),
340  selectedEdgeColor(0, 0, 204, 255),
341  selectedLaneColor(0, 0, 128, 255),
342  selectedConnectionColor(0, 0, 100, 255),
343  selectedProhibitionColor(0, 0, 120, 255),
344  selectedCrossingColor(0, 100, 196, 255),
345  selectedAdditionalColor(0, 0, 150, 255),
346  selectedRouteColor(0, 0, 150, 255),
347  selectedVehicleColor(0, 0, 100, 255),
348  selectedPersonColor(0, 0, 120, 255),
349  selectedPersonPlanColor(0, 0, 130, 255),
350  selectedEdgeDataColor(0, 0, 150, 255) {
351 }
352 
353 
354 bool
356  return (selectionColor == v2.selectionColor) &&
368 }
369 
370 
371 bool
373  return (selectionColor != v2.selectionColor) ||
385 }
386 
387 // ---------------------------------------------------------------------------
388 // GUIVisualizationSettings - methods
389 // ---------------------------------------------------------------------------
390 
392  name(""),
393  netedit(_netedit),
394  angle(0),
395  dither(false),
396  fps(false),
397  backgroundColor(RGBColor::WHITE),
398  showGrid(false), gridXSize(100), gridYSize(100),
399  laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
400  showLinkRules(true), showRails(true),
401  edgeName(false, 60, RGBColor(255, 128, 0, 255)),
402  internalEdgeName(false, 45, RGBColor(128, 64, 0, 255)),
403  cwaEdgeName(false, 60, RGBColor::MAGENTA),
404  streetName(false, 60, RGBColor::YELLOW),
405  edgeValue(false, 100, RGBColor::CYAN),
406  hideConnectors(false),
407  laneWidthExaggeration(1),
408  laneMinSize(0),
409  showLaneDirection(false),
410  showSublanes(true),
411  spreadSuperposed(false),
412  edgeParam("EDGE_KEY"),
413  laneParam("LANE_KEY"),
414  vehicleParam("PARAM_NUMERICAL"),
415  vehicleTextParam("PARAM_TEXT"),
416  edgeData("speed"),
417  edgeValueHideCheck(false),
418  edgeValueHideThreshold(0),
419  vehicleQuality(0), showBlinker(true),
420  drawLaneChangePreference(false),
421  drawMinGap(false),
422  drawBrakeGap(false),
423  showBTRange(false),
424  showRouteIndex(false),
425  vehicleSize(1),
426  vehicleName(false, 60, RGBColor(204, 153, 0, 255)),
427  vehicleValue(false, 80, RGBColor::CYAN),
428  vehicleText(false, 80, RGBColor::RED),
429  personQuality(0),
430  personSize(1),
431  personName(false, 60, RGBColor(0, 153, 204, 255)),
432  personValue(false, 80, RGBColor::CYAN),
433  containerQuality(0),
434  containerSize(1),
435  containerName(false, 60, RGBColor(0, 153, 204, 255)),
436  drawLinkTLIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
437  drawLinkJunctionIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
438  junctionID(false, 60, RGBColor(0, 255, 128, 255)),
439  junctionName(false, 60, RGBColor(192, 255, 128, 255)),
440  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
441  tlsPhaseIndex(false, 150, RGBColor::YELLOW),
442  tlsPhaseName(false, 150, RGBColor::ORANGE),
443  showLane2Lane(false),
444  drawJunctionShape(true),
445  drawCrossingsAndWalkingareas(true),
446  junctionSize(1),
447  addMode(0),
448  addSize(1),
449  addName(false, 60, RGBColor(255, 0, 128, 255)),
450  addFullName(false, 60, RGBColor(255, 0, 128, 255)),
451  poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
452  poiType(false, 60, RGBColor(255, 0, 128, 255)),
453  poiText(false, 80, RGBColor(140, 0, 255, 255)),
454  poiTextParam("PARAM_TEXT"),
455  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
456  polyType(false, 60, RGBColor(255, 0, 128, 255)),
457  showSizeLegend(true),
458  showColorLegend(false),
459  showVehicleColorLegend(false),
460  gaming(false),
461  drawBoundaries(false),
462  selectorFrameScale(1.),
463  drawForPositionSelection(false),
464  drawForRectangleSelection(false),
465  forceDrawForPositionSelection(false),
466  forceDrawForRectangleSelection(false),
467  forceDrawDottedContour(false),
468  lefthand(false),
469  disableLaneIcons(false) {
470  // init defaults depending of NETEDIT or SUMO-GUI
471  if (netedit) {
473  } else {
475  }
476 }
477 
478 
479 void
482  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true, 0);
483  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
484  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
485  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
486  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
487  scheme.addColor(RGBColor::BLACK, 5, "railway");
488  scheme.addColor(RGBColor(64, 0, 64), 6, "rails on road");
489  scheme.addColor(RGBColor(92, 92, 92), 7, "no passenger"); // paths, service roads etc
490  scheme.addColor(RGBColor::RED, 8, "closed"); // road closing
491  scheme.addColor(RGBColor::GREEN, 9, "connector"); // macro-connector
492  scheme.addColor(RGBColor::ORANGE, 10, "forbidden"); // forbidden road
493  laneColorer.addScheme(scheme);
494  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
495  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
496  laneColorer.addScheme(scheme);
497  scheme = GUIColorScheme(SCHEME_NAME_PERMISSION_CODE, RGBColor(240, 240, 240), "nobody");
498  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
499  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
500  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
501  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
502  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
503  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
504  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
505  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
506  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
507  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
508  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
509  laneColorer.addScheme(scheme);
510  // ... traffic states ...
511  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
512  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
513  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
514  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
515  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
516  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
517  laneColorer.addScheme(scheme);
518  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
519  scheme.addColor(RGBColor::GREEN, 0.25);
520  scheme.addColor(RGBColor::YELLOW, 0.5);
521  scheme.addColor(RGBColor::ORANGE, 0.75);
522  scheme.addColor(RGBColor::RED, 1.0);
523  laneColorer.addScheme(scheme);
524  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
525  scheme.addColor(RGBColor::GREEN, 0.25);
526  scheme.addColor(RGBColor::YELLOW, 0.5);
527  scheme.addColor(RGBColor::ORANGE, 0.75);
528  scheme.addColor(RGBColor::RED, 1.0);
529  laneColorer.addScheme(scheme);
530  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
531  scheme.addColor(RGBColor::CYAN, (double)30);
532  scheme.addColor(RGBColor::GREEN, (double)100);
533  scheme.addColor(RGBColor::YELLOW, (double)200);
534  scheme.addColor(RGBColor::RED, (double)300);
535  laneColorer.addScheme(scheme);
536  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
537  scheme.addColor(RGBColor::BLUE, (double)5);
538  laneColorer.addScheme(scheme);
539  // ... emissions ...
540  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
541  scheme.addColor(RGBColor::CYAN, 450);
542  scheme.addColor(RGBColor::GREEN, 900);
543  scheme.addColor(RGBColor::YELLOW, 1350);
544  scheme.addColor(RGBColor::ORANGE, 1800);
545  scheme.addColor(RGBColor::RED, 2250);
546  scheme.addColor(RGBColor::MAGENTA, 3000);
547  laneColorer.addScheme(scheme);
548  scheme = GUIColorScheme("by CO emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
549  scheme.addColor(RGBColor::CYAN, 30);
550  scheme.addColor(RGBColor::GREEN, 60);
551  scheme.addColor(RGBColor::YELLOW, 90);
552  scheme.addColor(RGBColor::ORANGE, 120);
553  scheme.addColor(RGBColor::RED, 150);
554  scheme.addColor(RGBColor::MAGENTA, 200);
555  laneColorer.addScheme(scheme);
556  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
557  scheme.addColor(RGBColor::CYAN, 0.3);
558  scheme.addColor(RGBColor::GREEN, 0.5);
559  scheme.addColor(RGBColor::YELLOW, 0.8);
560  scheme.addColor(RGBColor::ORANGE, 1);
561  scheme.addColor(RGBColor::RED, 1.3);
562  scheme.addColor(RGBColor::MAGENTA, 1.6);
563  laneColorer.addScheme(scheme);
564  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
565  scheme.addColor(RGBColor::CYAN, 6);
566  scheme.addColor(RGBColor::GREEN, 12);
567  scheme.addColor(RGBColor::YELLOW, 18);
568  scheme.addColor(RGBColor::ORANGE, 24);
569  scheme.addColor(RGBColor::RED, 30);
570  scheme.addColor(RGBColor::MAGENTA, 40);
571  laneColorer.addScheme(scheme);
572  scheme = GUIColorScheme("by HC emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
573  scheme.addColor(RGBColor::CYAN, 8);
574  scheme.addColor(RGBColor::GREEN, 16);
575  scheme.addColor(RGBColor::YELLOW, 24);
576  scheme.addColor(RGBColor::ORANGE, 32);
577  scheme.addColor(RGBColor::RED, 40);
578  scheme.addColor(RGBColor::MAGENTA, 50);
579  laneColorer.addScheme(scheme);
580  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
581  scheme.addColor(RGBColor::CYAN, 0.2);
582  scheme.addColor(RGBColor::GREEN, 0.4);
583  scheme.addColor(RGBColor::YELLOW, 0.6);
584  scheme.addColor(RGBColor::ORANGE, 0.8);
585  scheme.addColor(RGBColor::RED, 1);
586  scheme.addColor(RGBColor::MAGENTA, 1.3);
587  laneColorer.addScheme(scheme);
588  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
589  scheme.addColor(RGBColor::CYAN, 1.3);
590  scheme.addColor(RGBColor::GREEN, 1.4);
591  scheme.addColor(RGBColor::YELLOW, 1.6);
592  scheme.addColor(RGBColor::ORANGE, 1.7);
593  scheme.addColor(RGBColor::RED, 1.9);
594  scheme.addColor(RGBColor::MAGENTA, 2.4);
595  laneColorer.addScheme(scheme);
596  // ... weights (experimental) ...
597  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
598  scheme.addColor(RGBColor::RED, (double)100);
599  scheme.setAllowsNegativeValues(true);
600  laneColorer.addScheme(scheme);
601  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
602  scheme.addColor(RGBColor::YELLOW, (double)50);
603  scheme.addColor(RGBColor::GREEN, (double)100);
604  scheme.setAllowsNegativeValues(true);
605  laneColorer.addScheme(scheme);
606  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
607  scheme.addColor(RGBColor::ORANGE, 0.25);
608  scheme.addColor(RGBColor::YELLOW, 0.5);
609  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
610  scheme.addColor(RGBColor::GREEN, (double)2.0);
611  scheme.addColor(RGBColor::CYAN, (double)4.0);
612  scheme.addColor(RGBColor::BLUE, (double)100.0);
613  laneColorer.addScheme(scheme);
614  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
615  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
616  scheme.addColor(RGBColor::RED, (double)100);
617  scheme.setAllowsNegativeValues(true);
618  laneColorer.addScheme(scheme);
619  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
620  scheme.addColor(RGBColor::RED, (double) - 20);
621  scheme.addColor(RGBColor::GREEN, (double)20);
622  scheme.setAllowsNegativeValues(true);
623  laneColorer.addScheme(scheme);
624  scheme = GUIColorScheme("by height at start", RGBColor::GREY);
625  scheme.addColor(RGBColor::BLUE, (double) - 10);
626  scheme.addColor(RGBColor::RED, (double)10);
627  scheme.addColor(RGBColor::YELLOW, (double)50);
628  scheme.addColor(RGBColor::GREEN, (double)100);
629  scheme.addColor(RGBColor::MAGENTA, (double)200);
630  scheme.setAllowsNegativeValues(true);
631  laneColorer.addScheme(scheme);
632  scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::GREY);
633  scheme.addColor(RGBColor::BLUE, (double) - 10);
634  scheme.addColor(RGBColor::RED, (double)10);
635  scheme.addColor(RGBColor::YELLOW, (double)50);
636  scheme.addColor(RGBColor::GREEN, (double)100);
637  scheme.addColor(RGBColor::MAGENTA, (double)200);
638  scheme.setAllowsNegativeValues(true);
639  laneColorer.addScheme(scheme);
640  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
641  scheme.addColor(RGBColor::YELLOW, (double) .1);
642  scheme.addColor(RGBColor::RED, (double) .3);
643  scheme.addColor(RGBColor::GREEN, (double) - .1);
644  scheme.addColor(RGBColor::BLUE, (double) - .3);
645  scheme.setAllowsNegativeValues(true);
646  laneColorer.addScheme(scheme);
647  scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
648  scheme.addColor(RGBColor::YELLOW, (double) .1);
649  scheme.addColor(RGBColor::RED, (double) .3);
650  scheme.addColor(RGBColor::GREEN, (double) - .1);
651  scheme.addColor(RGBColor::BLUE, (double) - .3);
652  scheme.setAllowsNegativeValues(true);
653  laneColorer.addScheme(scheme);
654  scheme = GUIColorScheme("by average speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
655  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
656  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
657  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
658  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
659  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
660  laneColorer.addScheme(scheme);
661  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
662  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
663  scheme.addColor(RGBColor::GREEN, (double)(0.5));
664  scheme.addColor(RGBColor::CYAN, (double)(0.75));
665  scheme.addColor(RGBColor::BLUE, (double)(1));
666  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
667  laneColorer.addScheme(scheme);
668  scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
669  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
670  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
671  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
672  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
673  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
674  laneColorer.addScheme(scheme);
675  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
676  scheme.addColor(RGBColor::CYAN, 0.2);
677  scheme.addColor(RGBColor::GREEN, 0.4);
678  scheme.addColor(RGBColor::YELLOW, 0.6);
679  scheme.addColor(RGBColor::ORANGE, 0.8);
680  scheme.addColor(RGBColor::RED, 1.0);
681  scheme.addColor(RGBColor::MAGENTA, 2.0);
682  laneColorer.addScheme(scheme);
683  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
684  scheme.addColor(RGBColor::GREEN, (double)1);
685  scheme.addColor(RGBColor::YELLOW, (double)10);
686  scheme.addColor(RGBColor::RED, (double)100);
687  laneColorer.addScheme(scheme);
688  scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
689  laneColorer.addScheme(scheme);
690  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
691  scheme.setAllowsNegativeValues(true);
692  laneColorer.addScheme(scheme);
693  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
694  scheme.setAllowsNegativeValues(true);
695  laneColorer.addScheme(scheme);
696  scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
697  scheme.setAllowsNegativeValues(true);
698  laneColorer.addScheme(scheme);
699  scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
700  scheme.addColor(RGBColor(255, 204, 204), (double)1);
701  scheme.addColor(RGBColor::RED, (double)10000);
702  scheme.addColor(RGBColor(204, 204, 255), (double) -1);
703  scheme.addColor(RGBColor::BLUE, (double) -10000);
704  scheme.setAllowsNegativeValues(true);
705  laneColorer.addScheme(scheme);
706  scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
707  scheme.addColor(RGBColor::RED, (double)1);
708  scheme.setAllowsNegativeValues(false);
709  laneColorer.addScheme(scheme);
710  scheme = GUIColorScheme("by reachability (traveltime)", RGBColor(204, 204, 204));
711  scheme.addColor(RGBColor::RED, (double)1);
712  scheme.setAllowsNegativeValues(true);
713  laneColorer.addScheme(scheme);
714  scheme = GUIColorScheme("by thread index", RGBColor(204, 204, 204));
715  scheme.addColor(RGBColor::RED, (double)1);
716  laneColorer.addScheme(scheme);
717 
719  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
721  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
722  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
723  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
724  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
725  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
726  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
727  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
728  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
729  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
730  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
731  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
732  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
733  vehicleColorer.addScheme(scheme);
734  scheme = GUIColorScheme("by action step", RGBColor::GREY, "no action", true, 0, COL_SCHEME_DYNAMIC);
735  scheme.addColor(RGBColor(0, 255, 0, 255), 1., "action in next step");
736  scheme.addColor(RGBColor(80, 160, 80, 255), 2., "had action step");
737  vehicleColorer.addScheme(scheme);
738  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
739  scheme.addColor(RGBColor::CYAN, (double)30);
740  scheme.addColor(RGBColor::GREEN, (double)100);
741  scheme.addColor(RGBColor::YELLOW, (double)200);
742  scheme.addColor(RGBColor::RED, (double)300);
743  vehicleColorer.addScheme(scheme);
744  scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
745  scheme.addColor(RGBColor::CYAN, (double)25);
746  scheme.addColor(RGBColor::GREEN, (double)50);
747  scheme.addColor(RGBColor::YELLOW, (double)75);
748  scheme.addColor(RGBColor::RED, (double)100);
749  vehicleColorer.addScheme(scheme);
750  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
751  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
752  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
753  scheme.addColor(RGBColor(255, 0, 0, 255), -0.01);
754  scheme.addColor(RGBColor(0, 0, 255, 255), 0.01);
755  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
756  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
757  scheme.setAllowsNegativeValues(true);
758  vehicleColorer.addScheme(scheme);
759  scheme = GUIColorScheme("by max speed", RGBColor::RED);
760  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
761  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
762  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
763  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
764  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
765  vehicleColorer.addScheme(scheme);
766  // ... emissions ...
767  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
768  scheme.addColor(RGBColor::CYAN, 23000);
769  scheme.addColor(RGBColor::GREEN, 46000);
770  scheme.addColor(RGBColor::YELLOW, 69000);
771  scheme.addColor(RGBColor::ORANGE, 92000);
772  scheme.addColor(RGBColor::RED, 115000);
773  scheme.addColor(RGBColor::MAGENTA, 150000);
774  vehicleColorer.addScheme(scheme);
775  scheme = GUIColorScheme("by CO emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
776  scheme.addColor(RGBColor::CYAN, 1500);
777  scheme.addColor(RGBColor::GREEN, 3000);
778  scheme.addColor(RGBColor::YELLOW, 4500);
779  scheme.addColor(RGBColor::ORANGE, 6000);
780  scheme.addColor(RGBColor::RED, 7500);
781  scheme.addColor(RGBColor::MAGENTA, 10000);
782  vehicleColorer.addScheme(scheme);
783  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
784  scheme.addColor(RGBColor::CYAN, 12);
785  scheme.addColor(RGBColor::GREEN, 24);
786  scheme.addColor(RGBColor::YELLOW, 36);
787  scheme.addColor(RGBColor::ORANGE, 48);
788  scheme.addColor(RGBColor::RED, 60);
789  scheme.addColor(RGBColor::MAGENTA, 80);
790  vehicleColorer.addScheme(scheme);
791  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
792  scheme.addColor(RGBColor::CYAN, 300);
793  scheme.addColor(RGBColor::GREEN, 600);
794  scheme.addColor(RGBColor::YELLOW, 900);
795  scheme.addColor(RGBColor::ORANGE, 1200);
796  scheme.addColor(RGBColor::RED, 1500);
797  scheme.addColor(RGBColor::MAGENTA, 2000);
798  vehicleColorer.addScheme(scheme);
799  scheme = GUIColorScheme("by HC emissions", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
800  scheme.addColor(RGBColor::CYAN, 400);
801  scheme.addColor(RGBColor::GREEN, 800);
802  scheme.addColor(RGBColor::YELLOW, 1200);
803  scheme.addColor(RGBColor::ORANGE, 1600);
804  scheme.addColor(RGBColor::RED, 2000);
805  scheme.addColor(RGBColor::MAGENTA, 2500);
806  vehicleColorer.addScheme(scheme);
807  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
808  scheme.addColor(RGBColor::CYAN, 10);
809  scheme.addColor(RGBColor::GREEN, 20);
810  scheme.addColor(RGBColor::YELLOW, 30);
811  scheme.addColor(RGBColor::ORANGE, 40);
812  scheme.addColor(RGBColor::RED, 50);
813  scheme.addColor(RGBColor::MAGENTA, 60);
814  vehicleColorer.addScheme(scheme);
815  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
816  scheme.addColor(RGBColor::CYAN, 60);
817  scheme.addColor(RGBColor::GREEN, 70);
818  scheme.addColor(RGBColor::YELLOW, 80);
819  scheme.addColor(RGBColor::ORANGE, 90);
820  scheme.addColor(RGBColor::RED, 100);
821  scheme.addColor(RGBColor::MAGENTA, 120);
822  vehicleColorer.addScheme(scheme);
823  scheme = GUIColorScheme("by reroute number", RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
824  scheme.addColor(RGBColor::YELLOW, (double)1.);
825  scheme.addColor(RGBColor::RED, (double)10.);
826  vehicleColorer.addScheme(scheme);
827  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
828  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
829  vehicleColorer.addScheme(scheme);
830  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
831  scheme.addColor(RGBColor(255, 0, 255, 255), -100, "opposite lane");
832  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
833  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
834  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
835  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
836  scheme.setAllowsNegativeValues(true);
837  vehicleColorer.addScheme(scheme);
838  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
839  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
840  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
841  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
842  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
843  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
844  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
845  scheme.setAllowsNegativeValues(true);
846  vehicleColorer.addScheme(scheme);
847  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
848  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
849  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
850  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
851  scheme.setAllowsNegativeValues(true);
852  vehicleColorer.addScheme(scheme);
853  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
854  scheme.addColor(RGBColor::CYAN, (double)30);
855  scheme.addColor(RGBColor::GREEN, (double)100);
856  scheme.addColor(RGBColor::YELLOW, (double)200);
857  scheme.addColor(RGBColor::RED, (double)300);
858  vehicleColorer.addScheme(scheme);
859  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
860  scheme.addColor(RGBColor::CYAN, 10);
861  scheme.addColor(RGBColor::GREEN, 20);
862  scheme.addColor(RGBColor::YELLOW, 30);
863  scheme.addColor(RGBColor::ORANGE, 40);
864  scheme.addColor(RGBColor::RED, 60);
865  scheme.addColor(RGBColor::MAGENTA, 100);
866  vehicleColorer.addScheme(scheme);
867  scheme = GUIColorScheme("by time loss", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
868  scheme.addColor(RGBColor::CYAN, (double)10);
869  scheme.addColor(RGBColor::GREEN, (double)60);
870  scheme.addColor(RGBColor::YELLOW, (double)180);
871  scheme.addColor(RGBColor::RED, (double)900);
872  vehicleColorer.addScheme(scheme);
873  scheme = GUIColorScheme("by stop delay", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
874  scheme.addColor(RGBColor::CYAN, (double)10);
875  scheme.addColor(RGBColor::GREEN, (double)60);
876  scheme.addColor(RGBColor::YELLOW, (double)120);
877  scheme.addColor(RGBColor::ORANGE, (double)300);
878  scheme.addColor(RGBColor::RED, (double)900);
879  vehicleColorer.addScheme(scheme);
880  scheme = GUIColorScheme("by stop arrival delay", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
881  scheme.addColor(RGBColor::CYAN, (double)10);
882  scheme.addColor(RGBColor::GREEN, (double)60);
883  scheme.addColor(RGBColor::YELLOW, (double)120);
884  scheme.addColor(RGBColor::ORANGE, (double)300);
885  scheme.addColor(RGBColor::RED, (double)900);
886  scheme.addColor(RGBColor::MAGENTA, (double) -10);
887  scheme.setAllowsNegativeValues(true);
888  vehicleColorer.addScheme(scheme);
889  scheme = GUIColorScheme("by lateral speed", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
890  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");
891  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");
892  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");
893  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");
894  scheme.setAllowsNegativeValues(true);
895  vehicleColorer.addScheme(scheme);
896  scheme = GUIColorScheme(SCHEME_NAME_PARAM_NUMERICAL, RGBColor(204, 204, 204));
897  scheme.setAllowsNegativeValues(true);
898  vehicleColorer.addScheme(scheme);
901 
903  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::BLUE, "", true));
904  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLUE, "", true));
905  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::BLUE, "", true));
906  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::BLUE, "", true));
907  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
908  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
909  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
910  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
911  personColorer.addScheme(scheme);
912  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
913  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
914  scheme.addColor(RGBColor::GREEN, (double)(2), "walking");
915  scheme.addColor(RGBColor::BLUE, (double)(3), "riding");
916  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
917  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for ride");
918  personColorer.addScheme(scheme);
919  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
920  scheme.addColor(RGBColor::CYAN, (double)30);
921  scheme.addColor(RGBColor::GREEN, (double)100);
922  scheme.addColor(RGBColor::YELLOW, (double)200);
923  scheme.addColor(RGBColor::RED, (double)300);
924  personColorer.addScheme(scheme);
925  scheme = GUIColorScheme("by jammed state", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
926  scheme.addColor(RGBColor::RED, (double)1);
927  personColorer.addScheme(scheme);
928  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
929  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
930  personColorer.addScheme(scheme);
931  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
933 
935  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
937  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
938  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
939  scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
940  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
941  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
942  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
943  containerColorer.addScheme(scheme);
944  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
945  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
946  scheme.addColor(RGBColor::GREEN, (double)(2), "tranship"); // walking
947  scheme.addColor(RGBColor::BLUE, (double)(3), "transport");
948  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
949  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for transport");
950  containerColorer.addScheme(scheme);
951  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
952  scheme.addColor(RGBColor::CYAN, (double)30);
953  scheme.addColor(RGBColor::GREEN, (double)100);
954  scheme.addColor(RGBColor::YELLOW, (double)200);
955  scheme.addColor(RGBColor::RED, (double)300);
956  containerColorer.addScheme(scheme);
957  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
958  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
959  containerColorer.addScheme(scheme);
961 
963  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
964  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
965  scheme.addColor(RGBColor(0, 0, 0, 0), 2, "railway");
966  junctionColorer.addScheme(scheme);
967  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
968  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
969  junctionColorer.addScheme(scheme);
970  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
971  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
972  scheme.addColor(RGBColor::YELLOW, 2, "priority");
973  scheme.addColor(RGBColor::RED, 3, "priority_stop");
974  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
975  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
976  scheme.addColor(RGBColor::GREY, 6, "district");
977  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
978  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
979  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
980  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
981  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
982  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
983  junctionColorer.addScheme(scheme);
984  scheme = GUIColorScheme("by height", RGBColor::GREY);
985  scheme.addColor(RGBColor::BLUE, (double) - 10);
986  scheme.addColor(RGBColor::RED, (double)10);
987  scheme.addColor(RGBColor::YELLOW, (double)50);
988  scheme.addColor(RGBColor::GREEN, (double)100);
989  scheme.addColor(RGBColor::MAGENTA, (double)200);
990  scheme.setAllowsNegativeValues(true);
991  junctionColorer.addScheme(scheme);
992 
994  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
995  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
996  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
997  poiColorer.addScheme(scheme);
998  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
999 
1001  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
1002  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1003  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1004  polyColorer.addScheme(scheme);
1005  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
1006 
1008  {
1009  GUIScaleScheme laneScheme = GUIScaleScheme("default", 1, "uniform", true);
1010  laneScaler.addScheme(laneScheme);
1011  laneScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, "unselected", true, 0, COL_SCHEME_MISC);
1012  laneScheme.addColor(5, 1, "selected");
1013  laneScaler.addScheme(laneScheme);
1014  // ... traffic states ...
1015  laneScheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
1016  laneScheme.addColor(10, (double)(150.0 / 3.6));
1017  laneScaler.addScheme(laneScheme);
1018  laneScheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1019  laneScheme.addColor(10, 0.95);
1020  laneScaler.addScheme(laneScheme);
1021  laneScheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1022  laneScheme.addColor(10, 0.95);
1023  laneScaler.addScheme(laneScheme);
1024  laneScheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1025  laneScheme.addColor(10, (double)300);
1026  laneScaler.addScheme(laneScheme);
1027  laneScheme = GUIScaleScheme("by lane number (streetwise)", 1);
1028  laneScheme.addColor(10, (double)5);
1029  laneScaler.addScheme(laneScheme);
1030  // ... emissions ...
1031  laneScheme = GUIScaleScheme("by CO2 emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1032  laneScheme.addColor(10, (double)(10. / 7.5 / 5.));
1033  laneScaler.addScheme(laneScheme);
1034  laneScheme = GUIScaleScheme("by CO emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1035  laneScheme.addColor(10, (double)(0.05 / 7.5 / 2.));
1036  laneScaler.addScheme(laneScheme);
1037  laneScheme = GUIScaleScheme("by PMx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1038  laneScheme.addColor(10, (double)(.005 / 7.5 / 5.));
1039  laneScaler.addScheme(laneScheme);
1040  laneScheme = GUIScaleScheme("by NOx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1041  laneScheme.addColor(10, (double)(.125 / 7.5 / 5.));
1042  laneScaler.addScheme(laneScheme);
1043  laneScheme = GUIScaleScheme("by HC emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
1044  laneScheme.addColor(10, (double)(.02 / 7.5 / 4.));
1045  laneScaler.addScheme(laneScheme);
1046  laneScheme = GUIScaleScheme("by fuel consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
1047  laneScheme.addColor(10, (double)(.005 / 7.5 * 100.));
1048  laneScaler.addScheme(laneScheme);
1049  laneScheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0, "", false, 0, COL_SCHEME_EMISSION);
1050  laneScheme.addColor(10, (double)100);
1051  laneScaler.addScheme(laneScheme);
1052  // ... weights (experimental) ...
1053  laneScheme = GUIScaleScheme("by global travel time", 0);
1054  laneScheme.addColor(10, (double)100);
1055  laneScheme.setAllowsNegativeValues(true);
1056  laneScaler.addScheme(laneScheme);
1057  laneScheme = GUIScaleScheme("by global speed percentage", 0);
1058  laneScheme.addColor(10, (double)100);
1059  laneScheme.setAllowsNegativeValues(true);
1060  laneScaler.addScheme(laneScheme);
1061  laneScheme = GUIScaleScheme("by given length/geometrical length", 0);
1062  laneScheme.addColor(10, (double)10.0);
1063  laneScaler.addScheme(laneScheme);
1064  laneScheme = GUIScaleScheme("by loaded weight", 0);
1065  laneScheme.addColor(-1000, (double) - 1000);
1066  laneScheme.addColor(1000, (double)1000);
1067  laneScheme.setAllowsNegativeValues(true);
1068  laneScaler.addScheme(laneScheme);
1069  laneScheme = GUIScaleScheme("by priority", 1);
1070  laneScheme.addColor(0.5, (double) - 20);
1071  laneScheme.addColor(5, (double)20);
1072  laneScheme.setAllowsNegativeValues(true);
1073  laneScaler.addScheme(laneScheme);
1074  laneScheme = GUIScaleScheme("by average speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1075  laneScheme.addColor(10, (double)(150.0 / 3.6));
1076  laneScaler.addScheme(laneScheme);
1077  laneScheme = GUIScaleScheme("by average relative speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1078  laneScheme.addColor(0.5, (double)(0.5));
1079  laneScheme.addColor(2, (double)(1));
1080  laneScheme.addColor(10, (double)(2));
1081  laneScaler.addScheme(laneScheme);
1082  laneScheme = GUIScaleScheme("by electricity consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
1083  laneScheme.addColor(10, (double)(1 / 7.5 / 5.));
1084  laneScaler.addScheme(laneScheme);
1085  laneScheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1086  laneScheme.addColor(1, (double)1);
1087  laneScheme.addColor(10, (double)10);
1088  laneScheme.addColor(50, (double)100);
1089  laneScaler.addScheme(laneScheme);
1090  }
1091 
1093  edgeColorer.addScheme(GUIColorScheme("uniform", RGBColor(0, 0, 0, 0), "", true));
1094  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1095  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1096  edgeColorer.addScheme(scheme);
1097  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
1098  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
1099  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
1100  edgeColorer.addScheme(scheme);
1101  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
1102  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
1103  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
1104  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
1105  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
1106  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
1107  edgeColorer.addScheme(scheme);
1108  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1109  scheme.addColor(RGBColor::RED, 0.95);
1110  edgeColorer.addScheme(scheme);
1111  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1112  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
1113  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
1114  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
1115  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
1116  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
1117  edgeColorer.addScheme(scheme);
1118  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1119  scheme.addColor(RGBColor::RED, (double)5000);
1120  edgeColorer.addScheme(scheme);
1121  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1122  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
1123  scheme.addColor(RGBColor::GREEN, (double)(0.5));
1124  scheme.addColor(RGBColor::CYAN, (double)(0.75));
1125  scheme.addColor(RGBColor::BLUE, (double)(1));
1126  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
1127  edgeColorer.addScheme(scheme);
1128  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1129  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
1130  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
1131  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
1132  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
1133  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
1134  edgeColorer.addScheme(scheme);
1135  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1136  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
1137  scheme.addColor(RGBColor::RED, 1, "even");
1138  edgeColorer.addScheme(scheme);
1139  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true, 0, COL_SCHEME_DYNAMIC);
1140  scheme.addColor(RGBColor::RED, 1, "jammed");
1141  edgeColorer.addScheme(scheme);
1142  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1143  scheme.addColor(RGBColor::RED, 0.95);
1144  edgeColorer.addScheme(scheme);
1145  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1146  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
1147  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
1148  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
1149  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
1150  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
1151  edgeColorer.addScheme(scheme);
1152  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1153  scheme.addColor(RGBColor::RED, (double)5000);
1154  edgeColorer.addScheme(scheme);
1155  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1156  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
1157  scheme.addColor(RGBColor::GREEN, (double)(0.5));
1158  scheme.addColor(RGBColor::CYAN, (double)(0.75));
1159  scheme.addColor(RGBColor::BLUE, (double)(1));
1160  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
1161  edgeColorer.addScheme(scheme);
1162  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1163  scheme.addColor(RGBColor::GREEN, (double)1);
1164  scheme.addColor(RGBColor::YELLOW, (double)10);
1165  scheme.addColor(RGBColor::RED, (double)100);
1166  edgeColorer.addScheme(scheme);
1167  scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
1168  edgeColorer.addScheme(scheme);
1169 
1171  {
1172  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
1173  GUIScaleScheme edgeScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, "unselected", true, 0, COL_SCHEME_MISC);
1174  edgeScheme.addColor(5, 1, "selected");
1175  edgeScaler.addScheme(edgeScheme);
1176  edgeScheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
1177  edgeScheme.addColor(10, (double)(150.0 / 3.6));
1178  edgeScaler.addScheme(edgeScheme);
1179  edgeScheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1180  edgeScheme.addColor(10, 0.95);
1181  edgeScaler.addScheme(edgeScheme);
1182  edgeScheme = GUIScaleScheme("by current speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1183  edgeScheme.addColor(10, (double)(150.0 / 3.6));
1184  edgeScaler.addScheme(edgeScheme);
1185  edgeScheme = GUIScaleScheme("by current flow (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1186  edgeScheme.addColor(20, (double)5000);
1187  edgeScaler.addScheme(edgeScheme);
1188  edgeScheme = GUIScaleScheme("by relative speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1189  edgeScheme.addColor(20, (double)1);
1190  edgeScaler.addScheme(edgeScheme);
1191  edgeScheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
1192  edgeScheme.addColor(1, (double)1);
1193  edgeScheme.addColor(10, (double)10);
1194  edgeScheme.addColor(50, (double)100);
1195  edgeScaler.addScheme(edgeScheme);
1196  }
1197 
1198 }
1199 
1200 
1201 void
1203  // init color schemes
1204  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
1205  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
1206  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
1207  scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
1208  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
1209  scheme.addColor(RGBColor::BLACK, 5, "railway");
1210  scheme.addColor(RGBColor(64, 0, 64), 6, "rails on road");
1211  scheme.addColor(RGBColor(92, 92, 92), 7, "no passenger"); // paths, service roads etc
1212  scheme.addColor(RGBColor::RED, 8, "closed"); // road closing
1213  scheme.addColor(RGBColor::GREEN, 9, "connector"); // macro-connector
1214  scheme.addColor(RGBColor::ORANGE, 10, "forbidden"); // forbidden road
1215  scheme.addColor(RGBColor(145, 145, 145), 11, "data mode");
1216  laneColorer.addScheme(scheme);
1217  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1218  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1219  laneColorer.addScheme(scheme);
1220  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
1221  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
1222  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
1223  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
1224  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
1225  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
1226  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
1227  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
1228  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
1229  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
1230  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
1231  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
1232  laneColorer.addScheme(scheme);
1233 
1234  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
1235  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
1236  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
1237  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
1238  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
1239  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
1240  laneColorer.addScheme(scheme);
1241 
1242  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
1243  scheme.addColor(RGBColor::BLUE, (double)5);
1244  laneColorer.addScheme(scheme);
1245 
1246  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
1247  scheme.addColor(RGBColor::ORANGE, 0.25);
1248  scheme.addColor(RGBColor::YELLOW, 0.5);
1249  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
1250  scheme.addColor(RGBColor::GREEN, (double)2.0);
1251  scheme.addColor(RGBColor::CYAN, (double)4.0);
1252  scheme.addColor(RGBColor::BLUE, (double)100.0);
1253  laneColorer.addScheme(scheme);
1254  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
1255 
1256  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
1257  scheme.addColor(RGBColor::RED, (double) - 20);
1258  scheme.addColor(RGBColor::GREEN, (double)20);
1259  scheme.setAllowsNegativeValues(true);
1260  laneColorer.addScheme(scheme);
1261  scheme = GUIColorScheme("by height at start", RGBColor::RED);
1262  scheme.addColor(RGBColor::BLUE, (double) - 10);
1263  scheme.addColor(RGBColor::YELLOW, (double)50);
1264  scheme.addColor(RGBColor::GREEN, (double)100);
1265  scheme.addColor(RGBColor::MAGENTA, (double)200);
1266  scheme.setAllowsNegativeValues(true);
1267  laneColorer.addScheme(scheme);
1268  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
1269  scheme.addColor(RGBColor::BLUE, (double) - 10);
1270  scheme.addColor(RGBColor::YELLOW, (double)50);
1271  scheme.addColor(RGBColor::GREEN, (double)100);
1272  scheme.addColor(RGBColor::MAGENTA, (double)200);
1273  scheme.setAllowsNegativeValues(true);
1274  laneColorer.addScheme(scheme);
1275  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
1276  scheme.addColor(RGBColor::YELLOW, (double) .1);
1277  scheme.addColor(RGBColor::RED, (double) .3);
1278  scheme.addColor(RGBColor::GREEN, (double) - .1);
1279  scheme.addColor(RGBColor::BLUE, (double) - .3);
1280  scheme.setAllowsNegativeValues(true);
1281  laneColorer.addScheme(scheme);
1282  scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
1283  scheme.addColor(RGBColor::YELLOW, (double) .1);
1284  scheme.addColor(RGBColor::RED, (double) .3);
1285  scheme.addColor(RGBColor::GREEN, (double) - .1);
1286  scheme.addColor(RGBColor::BLUE, (double) - .3);
1287  scheme.setAllowsNegativeValues(true);
1288  laneColorer.addScheme(scheme);
1289  scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1290  scheme.setAllowsNegativeValues(true);
1291  laneColorer.addScheme(scheme);
1292  scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1293  scheme.setAllowsNegativeValues(true);
1294  laneColorer.addScheme(scheme);
1295  scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
1296  scheme.addColor(RGBColor::RED, (double)1);
1297  scheme.addColor(RGBColor::RED, (double) -1);
1298  scheme.setAllowsNegativeValues(true);
1299  laneColorer.addScheme(scheme);
1300  scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
1301  scheme.addColor(RGBColor::RED, (double)1);
1302  scheme.setAllowsNegativeValues(false);
1303  laneColorer.addScheme(scheme);
1304  scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204), "missing data", false, MISSING_DATA);
1305  scheme.setAllowsNegativeValues(true);
1306  laneColorer.addScheme(scheme);
1307 
1308  scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
1309  scheme.addColor(RGBColor(204, 0, 0), 1, "junction bubble");
1310  scheme.addColor(RGBColor(230, 100, 115), 2, "geometry points");
1311  scheme.addColor(GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW, 3, "connections missing");
1312  scheme.addColor(RGBColor::GREEN, 3, "custom shape");
1313  scheme.addColor(RGBColor(205, 180, 180), 4, "data mode");
1314  junctionColorer.addScheme(scheme);
1315  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
1316  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
1317  junctionColorer.addScheme(scheme);
1318  scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1319  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1320  scheme.addColor(RGBColor::YELLOW, 2, "priority");
1321  scheme.addColor(RGBColor::RED, 3, "priority_stop");
1322  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1323  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1324  scheme.addColor(RGBColor::GREY, 6, "district");
1325  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1326  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1327  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1328  scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1329  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
1330  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1331  junctionColorer.addScheme(scheme);
1332  scheme = GUIColorScheme("by height", RGBColor::GREY);
1333  scheme.addColor(RGBColor::BLUE, (double) - 10);
1334  scheme.addColor(RGBColor::RED, (double)10);
1335  scheme.addColor(RGBColor::YELLOW, (double)50);
1336  scheme.addColor(RGBColor::GREEN, (double)100);
1337  scheme.addColor(RGBColor::MAGENTA, (double)200);
1338  scheme.setAllowsNegativeValues(true);
1339  junctionColorer.addScheme(scheme);
1340 
1342  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
1343  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1344  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1345  poiColorer.addScheme(scheme);
1346  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
1347 
1349  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
1350  scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
1351  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
1352  polyColorer.addScheme(scheme);
1353  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
1354 
1356  {
1357  GUIScaleScheme edgeScheme = GUIScaleScheme("default", 1, "uniform", true);
1358  laneScaler.addScheme(edgeScheme);
1359  }
1360 
1361  // dummy schemes
1363  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
1365 }
1366 
1367 
1368 int
1370  if (UseMesoSim) {
1371  return edgeColorer.getActive();
1372  }
1373  return laneColorer.getActive();
1374 }
1375 
1376 
1377 int
1379  if (UseMesoSim) {
1380  return edgeScaler.getActive();
1381  }
1382  return laneScaler.getActive();
1383 }
1384 
1385 
1388  if (UseMesoSim) {
1389  return edgeColorer.getScheme();
1390  }
1391  return laneColorer.getScheme();
1392 }
1393 
1394 
1397  if (UseMesoSim) {
1398  return edgeScaler.getScheme();
1399  }
1400  return laneScaler.getScheme();
1401 }
1402 
1403 
1404 void
1409  dev.writeAttr("dither", dither);
1410  dev.writeAttr("fps", fps);
1411  dev.writeAttr("drawBoundaries", drawBoundaries);
1412  dev.writeAttr("forceDrawPositionSelection", forceDrawForPositionSelection);
1413  dev.writeAttr("forceDrawRectangleSelection", forceDrawForRectangleSelection);
1414  dev.writeAttr("forceDrawDottedContour", forceDrawDottedContour);
1415  dev.closeTag();
1417  dev.writeAttr("backgroundColor", backgroundColor);
1418  dev.writeAttr("showGrid", showGrid);
1419  dev.writeAttr("gridXSize", gridXSize);
1420  dev.writeAttr("gridYSize", gridYSize);
1421  dev.closeTag();
1422  // edges
1424  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
1425  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
1426  dev.writeAttr("laneShowBorders", laneShowBorders);
1427  dev.writeAttr("showBikeMarkings", showBikeMarkings);
1428  dev.writeAttr("showLinkDecals", showLinkDecals);
1429  dev.writeAttr("showLinkRules", showLinkRules);
1430  dev.writeAttr("showRails", showRails);
1431  dev.writeAttr("hideConnectors", hideConnectors);
1432  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
1433  dev.writeAttr("minSize", laneMinSize);
1434  dev.writeAttr("showDirection", showLaneDirection);
1435  dev.writeAttr("showSublanes", showSublanes);
1436  dev.writeAttr("spreadSuperposed", spreadSuperposed);
1437  dev.writeAttr("edgeParam", edgeParam);
1438  dev.writeAttr("laneParam", laneParam);
1439  dev.writeAttr("vehicleParam", vehicleParam);
1440  dev.writeAttr("vehicleTextParam", vehicleTextParam);
1441  dev.writeAttr("edgeData", edgeData);
1442  dev.writeAttr("edgeValueHideCheck", edgeValueHideCheck);
1443  dev.writeAttr("edgeValueHideThreshold", edgeValueHideThreshold);
1444  dev.lf();
1445  dev << " ";
1446  edgeName.print(dev, "edgeName");
1447  dev.lf();
1448  dev << " ";
1449  internalEdgeName.print(dev, "internalEdgeName");
1450  dev.lf();
1451  dev << " ";
1452  cwaEdgeName.print(dev, "cwaEdgeName");
1453  dev.lf();
1454  dev << " ";
1455  streetName.print(dev, "streetName");
1456  dev.lf();
1457  dev << " ";
1458  edgeValue.print(dev, "edgeValue");
1459  laneColorer.save(dev);
1460  laneScaler.save(dev);
1461  edgeColorer.save(dev);
1462  edgeScaler.save(dev);
1463  dev.closeTag();
1464  // vehicles
1466  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
1467  dev.writeAttr("vehicleQuality", vehicleQuality);
1468  vehicleSize.print(dev, "vehicle");
1469  dev.writeAttr("showBlinker", showBlinker);
1470  dev.writeAttr("drawMinGap", drawMinGap);
1471  dev.writeAttr("drawBrakeGap", drawBrakeGap);
1472  dev.writeAttr("showBTRange", showBTRange);
1473  dev.writeAttr("showRouteIndex", showRouteIndex);
1474  dev.lf();
1475  dev << " ";
1476  vehicleName.print(dev, "vehicleName");
1477  dev.lf();
1478  dev << " ";
1479  vehicleValue.print(dev, "vehicleValue");
1480  dev.lf();
1481  dev << " ";
1482  vehicleText.print(dev, "vehicleText");
1483  vehicleColorer.save(dev);
1484  dev.closeTag();
1485  // persons
1487  dev.writeAttr("personMode", personColorer.getActive());
1488  dev.writeAttr("personQuality", personQuality);
1489  personSize.print(dev, "person");
1490  dev.lf();
1491  dev << " ";
1492  personName.print(dev, "personName");
1493  dev.lf();
1494  dev << " ";
1495  personValue.print(dev, "personValue");
1496  personColorer.save(dev);
1497  dev.closeTag();
1498  // containers
1500  dev.writeAttr("containerMode", containerColorer.getActive());
1501  dev.writeAttr("containerQuality", containerQuality);
1502  containerSize.print(dev, "container");
1503  dev.lf();
1504  dev << " ";
1505  containerName.print(dev, "containerName");
1506  containerColorer.save(dev);
1507  dev.closeTag();
1508  // junctions
1510  dev.writeAttr("junctionMode", junctionColorer.getActive());
1511  dev.lf();
1512  dev << " ";
1513  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
1514  dev.lf();
1515  dev << " ";
1516  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
1517  dev.lf();
1518  dev << " ";
1519  junctionID.print(dev, "junctionID");
1520  dev.lf();
1521  dev << " ";
1522  junctionName.print(dev, "junctionName");
1523  dev.lf();
1524  dev << " ";
1525  internalJunctionName.print(dev, "internalJunctionName");
1526  dev.lf();
1527  dev << " ";
1528  tlsPhaseIndex.print(dev, "tlsPhaseIndex");
1529  tlsPhaseName.print(dev, "tlsPhaseName");
1530  dev.lf();
1531  dev << " ";
1532  dev.writeAttr("showLane2Lane", showLane2Lane);
1533  dev.writeAttr("drawShape", drawJunctionShape);
1534  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
1535  junctionSize.print(dev, "junction");
1536  junctionColorer.save(dev);
1537  dev.closeTag();
1538  // additionals
1540  dev.writeAttr("addMode", addMode);
1541  addSize.print(dev, "add");
1542  addName.print(dev, "addName");
1543  addFullName.print(dev, "addFullName");
1544  dev.closeTag();
1545  // pois
1547  dev.writeAttr("poiTextParam", poiTextParam);
1548  poiSize.print(dev, "poi");
1549  poiName.print(dev, "poiName");
1550  poiType.print(dev, "poiType");
1551  poiText.print(dev, "poiText");
1552  poiColorer.save(dev);
1553  dev.closeTag();
1554  // polys
1556  polySize.print(dev, "poly");
1557  polyName.print(dev, "polyName");
1558  polyType.print(dev, "polyType");
1559  polyColorer.save(dev);
1560  dev.closeTag();
1561  // legend
1563  dev.writeAttr("showSizeLegend", showSizeLegend);
1564  dev.writeAttr("showColorLegend", showColorLegend);
1565  dev.writeAttr("showVehicleColorLegend", showVehicleColorLegend);
1566  dev.closeTag();
1567 
1568  dev.closeTag();
1569 }
1570 
1571 
1572 bool
1574  if (dither != v2.dither) {
1575  return false;
1576  }
1577  if (fps != v2.fps) {
1578  return false;
1579  }
1580  if (drawBoundaries != v2.drawBoundaries) {
1581  return false;
1582  }
1584  return false;
1585  }
1587  return false;
1588  }
1590  return false;
1591  }
1592  if (backgroundColor != v2.backgroundColor) {
1593  return false;
1594  }
1595  if (colorSettings != v2.colorSettings) {
1596  return false;
1597  }
1598  if (showGrid != v2.showGrid) {
1599  return false;
1600  }
1601  if (gridXSize != v2.gridXSize) {
1602  return false;
1603  }
1604  if (gridYSize != v2.gridYSize) {
1605  return false;
1606  }
1607 
1608  if (!(edgeColorer == v2.edgeColorer)) {
1609  return false;
1610  }
1611  if (!(edgeScaler == v2.edgeScaler)) {
1612  return false;
1613  }
1614  if (!(laneColorer == v2.laneColorer)) {
1615  return false;
1616  }
1617  if (!(laneScaler == v2.laneScaler)) {
1618  return false;
1619  }
1620  if (laneShowBorders != v2.laneShowBorders) {
1621  return false;
1622  }
1623  if (showBikeMarkings != v2.showBikeMarkings) {
1624  return false;
1625  }
1626  if (showLinkDecals != v2.showLinkDecals) {
1627  return false;
1628  }
1629  if (showLinkRules != v2.showLinkRules) {
1630  return false;
1631  }
1632  if (showRails != v2.showRails) {
1633  return false;
1634  }
1635  if (edgeName != v2.edgeName) {
1636  return false;
1637  }
1638  if (internalEdgeName != v2.internalEdgeName) {
1639  return false;
1640  }
1641  if (cwaEdgeName != v2.cwaEdgeName) {
1642  return false;
1643  }
1644  if (streetName != v2.streetName) {
1645  return false;
1646  }
1647  if (edgeValue != v2.edgeValue) {
1648  return false;
1649  }
1650  if (hideConnectors != v2.hideConnectors) {
1651  return false;
1652  }
1654  return false;
1655  }
1656  if (laneMinSize != v2.laneMinSize) {
1657  return false;
1658  }
1660  return false;
1661  }
1662  if (showSublanes != v2.showSublanes) {
1663  return false;
1664  }
1665  if (spreadSuperposed != v2.spreadSuperposed) {
1666  return false;
1667  }
1668  if (edgeParam != v2.edgeParam) {
1669  return false;
1670  }
1671  if (laneParam != v2.laneParam) {
1672  return false;
1673  }
1674  if (vehicleParam != v2.vehicleParam) {
1675  return false;
1676  }
1677  if (vehicleTextParam != v2.vehicleTextParam) {
1678  return false;
1679  }
1680  if (edgeData != v2.edgeData) {
1681  return false;
1682  }
1684  return false;
1685  }
1687  return false;
1688  }
1689  if (!(vehicleColorer == v2.vehicleColorer)) {
1690  return false;
1691  }
1692  if (vehicleQuality != v2.vehicleQuality) {
1693  return false;
1694  }
1695  if (vehicleSize != v2.vehicleSize) {
1696  return false;
1697  }
1698  if (showBlinker != v2.showBlinker) {
1699  return false;
1700  }
1702  return false;
1703  }
1704  if (drawMinGap != v2.drawMinGap) {
1705  return false;
1706  }
1707  if (drawBrakeGap != v2.drawBrakeGap) {
1708  return false;
1709  }
1710  if (showBTRange != v2.showBTRange) {
1711  return false;
1712  }
1713  if (showRouteIndex != v2.showRouteIndex) {
1714  return false;
1715  }
1716  if (vehicleName != v2.vehicleName) {
1717  return false;
1718  }
1719  if (vehicleValue != v2.vehicleValue) {
1720  return false;
1721  }
1722  if (vehicleText != v2.vehicleText) {
1723  return false;
1724  }
1725  if (!(personColorer == v2.personColorer)) {
1726  return false;
1727  }
1728  if (personQuality != v2.personQuality) {
1729  return false;
1730  }
1731  if (personSize != v2.personSize) {
1732  return false;
1733  }
1734  if (personName != v2.personName) {
1735  return false;
1736  }
1737  if (personValue != v2.personValue) {
1738  return false;
1739  }
1740  if (!(containerColorer == v2.containerColorer)) {
1741  return false;
1742  }
1743  if (containerQuality != v2.containerQuality) {
1744  return false;
1745  }
1746  if (containerSize != v2.containerSize) {
1747  return false;
1748  }
1749  if (containerName != v2.containerName) {
1750  return false;
1751  }
1752  if (!(junctionColorer == v2.junctionColorer)) {
1753  return false;
1754  }
1755  if (!(poiColorer == v2.poiColorer)) {
1756  return false;
1757  }
1758  if (!(polyColorer == v2.polyColorer)) {
1759  return false;
1760  }
1761  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
1762  return false;
1763  }
1765  return false;
1766  }
1767  if (junctionID != v2.junctionID) {
1768  return false;
1769  }
1770  if (junctionName != v2.junctionName) {
1771  return false;
1772  }
1774  return false;
1775  }
1776  if (tlsPhaseIndex != v2.tlsPhaseIndex) {
1777  return false;
1778  }
1779  if (tlsPhaseName != v2.tlsPhaseName) {
1780  return false;
1781  }
1782 
1783  if (showLane2Lane != v2.showLane2Lane) {
1784  return false;
1785  }
1786 
1788  return false;
1789  }
1790 
1792  return false;
1793  }
1794  if (junctionSize != v2.junctionSize) {
1795  return false;
1796  }
1797 
1798  if (addMode != v2.addMode) {
1799  return false;
1800  }
1801  if (addSize != v2.addSize) {
1802  return false;
1803  }
1804  if (addName != v2.addName) {
1805  return false;
1806  }
1807  if (addFullName != v2.addFullName) {
1808  return false;
1809  }
1810  if (poiSize != v2.poiSize) {
1811  return false;
1812  }
1813  if (poiName != v2.poiName) {
1814  return false;
1815  }
1816  if (poiType != v2.poiType) {
1817  return false;
1818  }
1819  if (poiText != v2.poiText) {
1820  return false;
1821  }
1822  if (poiTextParam != v2.poiTextParam) {
1823  return false;
1824  }
1825  if (polySize != v2.polySize) {
1826  return false;
1827  }
1828  if (polyName != v2.polyName) {
1829  return false;
1830  }
1831  if (polyType != v2.polyType) {
1832  return false;
1833  }
1834 
1835  if (showSizeLegend != v2.showSizeLegend) {
1836  return false;
1837  }
1838  if (showColorLegend != v2.showColorLegend) {
1839  return false;
1840  }
1842  return false;
1843  }
1844 
1845  return true;
1846 }
1847 
1848 
1849 const RGBColor&
1851  switch (ls) {
1856  case LINKSTATE_TL_RED:
1857  return SUMO_color_TL_RED;
1859  return SUMO_color_TL_REDYELLOW;
1868  case LINKSTATE_MAJOR:
1869  return SUMO_color_MAJOR;
1870  case LINKSTATE_MINOR:
1871  return SUMO_color_MINOR;
1872  case LINKSTATE_EQUAL:
1873  return SUMO_color_EQUAL;
1874  case LINKSTATE_STOP:
1875  return SUMO_color_STOP;
1876  case LINKSTATE_ALLWAY_STOP:
1877  return SUMO_color_ALLWAY_STOP;
1878  case LINKSTATE_ZIPPER:
1879  return SUMO_color_ZIPPER;
1880  case LINKSTATE_DEADEND:
1881  return SUMO_color_DEADEND;
1882  default:
1883  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1884  }
1885 }
1886 
1887 
1888 double
1889 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
1890  double viewAngle = objectAngle - angle;
1891  while (viewAngle < 0) {
1892  viewAngle += 360;
1893  }
1894  // fmod round towards zero which is not want we want for negative numbers
1895  viewAngle = fmod(viewAngle, 360);
1896  if (viewAngle > 90 && viewAngle < 270) {
1897  // avoid reading text on it's head
1898  objectAngle -= 180;
1899  }
1900  return objectAngle;
1901 }
1902 
1903 bool
1905  double viewAngle = objectAngle - angle;
1906  while (viewAngle < 0) {
1907  viewAngle += 360;
1908  }
1909  // fmod round towards zero which is not want we want for negative numbers
1910  viewAngle = fmod(viewAngle, 360);
1911  return (viewAngle > 90 && viewAngle < 270);
1912 }
1913 
1914 
1915 
1916 bool
1917 GUIVisualizationSettings::drawAdditionals(const double exaggeration) const {
1918  return (scale * exaggeration) > 1.;
1919 }
1920 
1921 
1922 bool
1923 GUIVisualizationSettings::drawDetail(const double detail, const double exaggeration) const {
1924  if (detail <= 0) {
1925  return true;
1926  } else {
1927  return ((scale * exaggeration) >= detail);
1928  }
1929 }
1930 
1931 
1932 int
1935  return 8;
1936  } else if (scale >= 10) {
1937  return 32;
1938  } else if (scale >= 2) {
1939  return 16;
1940  } else {
1941  return 8;
1942  }
1943 }
1944 
1945 
1946 bool
1949  return false;
1950  } else {
1951  return forceDrawDottedContour;
1952  }
1953 }
1954 
1955 
1956 bool
1957 GUIVisualizationSettings::drawMovingGeometryPoint(const double exaggeration, const double radius) const {
1958  return (scale * radius * exaggeration > 10);
1959 }
1960 
1961 /****************************************************************************/
GUISelectedStorage gSelected
A global holder of selected objects.
GUIPropertyScheme< RGBColor > GUIColorScheme
GUIPropertyScheme< double > GUIScaleScheme
const RGBColor SUMO_color_EQUAL(128, 128, 128)
#define COL_SCHEME_DYNAMIC
const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192)
const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0)
const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255)
const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0)
const RGBColor SUMO_color_TL_RED(255, 0, 0)
const RGBColor SUMO_color_MAJOR(255, 255, 255)
const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0)
const RGBColor SUMO_color_ZIPPER(192, 128, 64)
#define COL_SCHEME_MISC
const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0)
#define COL_SCHEME_EMISSION
const RGBColor SUMO_color_DEADEND(0, 0, 0)
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0)
const RGBColor SUMO_color_MINOR(51, 51, 51)
const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0)
const RGBColor SUMO_color_STOP(128, 0, 128)
const SVCPermissions SVCAll
all VClasses are allowed
@ SVC_SHIP
is an arbitrary ship
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_NON_ROAD
classes which (normally) do not drive on normal roads
@ SVC_DELIVERY
vehicle is a small delivery vehicle
@ SVC_MOPED
vehicle is a moped
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
@ SVC_PEDESTRIAN
pedestrian
@ SUMO_TAG_VIEWSETTINGS_POIS
@ SUMO_TAG_VIEWSETTINGS_BACKGROUND
@ SUMO_TAG_VIEWSETTINGS_LEGEND
@ SUMO_TAG_VIEWSETTINGS_OPENGL
@ SUMO_TAG_VIEWSETTINGS_ADDITIONALS
@ SUMO_TAG_VIEWSETTINGS_PERSONS
@ SUMO_TAG_VIEWSETTINGS_JUNCTIONS
@ SUMO_TAG_VIEWSETTINGS_VEHICLES
@ SUMO_TAG_VIEWSETTINGS_EDGES
@ SUMO_TAG_VIEWSETTINGS_SCHEME
@ SUMO_TAG_VIEWSETTINGS_POLYS
@ SUMO_TAG_VIEWSETTINGS_CONTAINERS
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic,...
@ LINKSTATE_TL_REDYELLOW
The link has red light (must brake) but indicates upcoming green.
@ LINKSTATE_ALLWAY_STOP
This is an uncontrolled, all-way stop link.
@ LINKSTATE_MAJOR
This is an uncontrolled, major link, may pass.
@ LINKSTATE_STOP
This is an uncontrolled, minor link, has to stop.
@ LINKSTATE_TL_YELLOW_MAJOR
The link has yellow light, may pass.
@ LINKSTATE_TL_GREEN_MAJOR
The link has green light, may pass.
@ LINKSTATE_EQUAL
This is an uncontrolled, right-before-left link.
@ LINKSTATE_DEADEND
This is a dead end link.
@ LINKSTATE_ZIPPER
This is an uncontrolled, zipper-merge link.
@ LINKSTATE_TL_OFF_BLINKING
The link is controlled by a tls which is off and blinks, has to brake.
@ LINKSTATE_TL_YELLOW_MINOR
The link has yellow light, has to brake anyway.
@ LINKSTATE_TL_RED
The link has red light (must brake)
@ LINKSTATE_TL_GREEN_MINOR
The link has green light, has to brake.
@ LINKSTATE_MINOR
This is an uncontrolled, minor link, has to brake.
@ LINKSTATE_TL_OFF_NOSIGNAL
The link is controlled by a tls which is off, not blinking, may pass.
@ SUMO_ATTR_NAME
T MAX2(T a, T b)
Definition: StdDefs.h:79
void setAllowsNegativeValues(bool value)
int addColor(const T &color, const double threshold, const std::string &name="")
void save(OutputDevice &dev) const
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
Stores the information about how to visualize structures.
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings tlsPhaseIndex
GUIVisualizationTextSettings vehicleName
GUIVisualizationTextSettings junctionName
void initNeteditDefaults()
init default settings
bool operator==(const GUIVisualizationSettings &vs2)
Comparison operator.
RGBColor backgroundColor
The background color to use.
GUIVisualizationSettings(bool _netedit=false)
constructor
GUIVisualizationSizeSettings vehicleSize
GUIVisualizationSizeSettings containerSize
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings internalEdgeName
GUIVisualizationSizeSettings junctionSize
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.
GUIScaler laneScaler
The lane scaler.
bool dither
Information whether dithering shall be enabled.
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings personValue
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
GUIVisualizationTextSettings poiType
GUIVisualizationSizeSettings addSize
static const std::string SCHEME_NAME_SELECTION
std::string name
The name of this setting.
GUIColorer edgeColorer
The mesoscopic edge colorer.
int containerQuality
The quality of container drawing.
GUIVisualizationTextSettings internalJunctionName
GUIVisualizationSizeSettings poiSize
bool drawJunctionShape
whether the shape of the junction should be drawn
std::string edgeData
key for coloring by edgeData
bool flippedTextAngle(double objectAngle) const
return wether the text was flipped for reading at the given angle
int personQuality
The quality of person drawing.
GUIColorer poiColorer
The POI colorer.
GUIVisualizationTextSettings poiName
GUIVisualizationTextSettings vehicleValue
GUIColorer polyColorer
The polygon colorer.
int vehicleQuality
The quality of vehicle drawing.
GUIVisualizationTextSettings drawLinkJunctionIndex
bool drawForPositionSelection
whether drawing is performed for the purpose of selecting objects with a single click
static const std::string SCHEME_NAME_LANE_PARAM_NUMERICAL
GUIVisualizationTextSettings addFullName
GUIVisualizationTextSettings edgeValue
bool fps
Information whether frames-per-second should be drawn.
std::string vehicleParam
key for coloring by vehicle parameter
bool showRails
Information whether rails shall be drawn.
GUIVisualizationSizeSettings personSize
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIVisualizationTextSettings cwaEdgeName
GUIVisualizationTextSettings junctionID
std::string vehicleTextParam
key for rendering vehicle textual parameter
bool drawDottedContour() const
check if dotted contour can be drawn
bool drawAdditionals(const double exaggeration) const
check if additionals must be drawn
bool drawMovingGeometryPoint(const double exaggeration, const double radius) const
check if moving geometry point can be draw
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
GUIVisualizationColorSettings colorSettings
color settings
bool showSublanes
Whether to show sublane boundaries.
bool showGrid
Information whether a grid shall be shown.
static const std::string SCHEME_NAME_TYPE
bool showVehicleColorLegend
Information whether the vehicle color legend shall be drawn.
static const RGBColor & getLinkColor(const LinkState &ls)
map from LinkState to color constants
bool hideConnectors
flag to show or hidde connectors
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.
GUIScaleScheme & getLaneEdgeScaleScheme()
Returns the current lane (edge) scaling schme.
int getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
double scale
information about a lane's width (temporary, used for a single view)
bool forceDrawForRectangleSelection
flag to force draw for rectangle selection (see drawForRectangleSelection)
bool netedit
Whether the settings are for Netedit.
bool showLaneDirection
Whether to show direction indicators for lanes.
bool edgeValueHideCheck
value below which edge data value should not be rendered
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
bool forceDrawDottedContour
flag to force draw dotted contour
GUIScaler edgeScaler
The mesoscopic edge scaler.
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
bool drawMinGap
Information whether the minimum gap shall be drawn.
GUIVisualizationTextSettings streetName
GUIVisualizationTextSettings poiText
GUIVisualizationTextSettings vehicleText
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
GUIColorer laneColorer
The lane colorer.
GUIVisualizationTextSettings polyName
bool laneShowBorders
Information whether lane borders shall be drawn.
GUIVisualizationTextSettings tlsPhaseName
GUIVisualizationTextSettings edgeName
bool showSizeLegend
Information whether the size legend shall be drawn.
double laneMinSize
The minimum visual lane width for drawing.
GUIVisualizationTextSettings drawLinkTLIndex
GUIVisualizationTextSettings containerName
GUIVisualizationSizeSettings polySize
GUIColorer containerColorer
The container colorer.
double gridXSize
Information about the grid spacings.
bool showBTRange
Information whether the communication range shall be drawn.
bool forceDrawForPositionSelection
flag to force draw for position selection (see drawForPositionSelection)
GUIVisualizationTextSettings personName
bool showColorLegend
Information whether the edge color legend shall be drawn.
std::string poiTextParam
key for rendering poi textual parameter
int getCircleResolution() const
function to calculate circle resolution for all circles drawn in drawGL(...) functions
bool showRouteIndex
Information whether the route index should be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
static const std::string SCHEME_NAME_EDGE_PARAM_NUMERICAL
scheme names
double selectorFrameScale
the current selection scaling in NETEDIT (set in SelectorFrame)
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
int addMode
The additional structures visualization scheme.
GUIColorer junctionColorer
The junction colorer.
static const std::string SCHEME_NAME_PERMISSION_CODE
static const std::string SCHEME_NAME_PARAM_NUMERICAL
std::string edgeParam
key for coloring by edge parameter
bool drawBrakeGap
Information whether the brake gap shall be drawn.
bool drawLaneChangePreference
Information whether the lane change preference shall be drawn.
double getTextAngle(double objectAngle) const
return an angle that is suitable for reading text aligned with the given angle (degrees)
GUIVisualizationTextSettings polyType
double angle
The current view rotation angle.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:60
void lf()
writes a line feed if applicable
Definition: OutputDevice.h:227
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:239
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static const RGBColor BLUE
Definition: RGBColor.h:182
static const RGBColor GREY
Definition: RGBColor.h:189
static const RGBColor YELLOW
Definition: RGBColor.h:183
static const RGBColor ORANGE
Definition: RGBColor.h:186
static const RGBColor CYAN
Definition: RGBColor.h:184
static const RGBColor GREEN
Definition: RGBColor.h:181
static const RGBColor BLACK
Definition: RGBColor.h:188
static const RGBColor MAGENTA
Definition: RGBColor.h:185
static const RGBColor RED
named colors
Definition: RGBColor.h:180
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 rerouterSize
rerouter size
static const double calibratorHeight
Calibrator height.
static const RGBColor VSSColor
color for VSS
static const RGBColor vaporizerColor
color for vaporizers
static const RGBColor rerouterColor
color for rerouters
static const RGBColor routeProbeColor
color for route probes
static const RGBColor special
color for selected special candidate element (Usually selected using shift+click)
static const RGBColor conflict
color for selected conflict candidate element (Usually selected using ctrl+click)
static const RGBColor target
color for selected candidate target
static const RGBColor possible
color for possible candidate element
static const RGBColor source
color for selected candidate source
static const RGBColor crossingInvalid
color for invalid crossing
static const RGBColor personStops
color for personStops
RGBColor selectionColor
basic selection color
static const RGBColor ride
color for rides
static const RGBColor crossing
color for crossings
RGBColor selectedEdgeColor
edge selection color
RGBColor selectedPersonPlanColor
person plan selection color (Rides, Walks, personStops...)
static const RGBColor SUMO_color_DEADEND_SHOW
color for highlighthing deadends
RGBColor selectedCrossingColor
crossings selection color
static const RGBColor vehicleTrips
color for vehicle trips
RGBColor selectedLaneColor
lane selection color
static const RGBColor editShape
color for edited shapes (Junctions, crossings and connections)
RGBColor selectedRouteColor
route selection color (used for routes and vehicle stops)
RGBColor selectedEdgeDataColor
edge data selection color
bool operator==(const GUIVisualizationColorSettings &other)
equality comparator
static const RGBColor crossingPriority
color for priority crossing
RGBColor selectedProhibitionColor
prohibition selection color
static const RGBColor stops
color for Stops
RGBColor selectedConnectionColor
connection selection color
RGBColor selectedAdditionalColor
additional selection color (busStops, Detectors...)
bool operator!=(const GUIVisualizationColorSettings &other)
inequality comparator
static const RGBColor personTrip
color for personStops
RGBColor selectedVehicleColor
vehicle selection color
static const RGBColor walk
color for walks
RGBColor selectedPersonColor
person selection color
static const RGBColor childConnections
color for child connections between parents and child elements
static const double connectionWidth
connection width
static const double laneTextures
details for lane textures
static const double additionalTextures
details for additional textures
static const double lockIcon
lock icons
static const double vehicleTriangles
details for draw person as triangles
static const double vehicleShapes
details for draw person as shapes
static const double detectorDetails
details for detectors
static const double personShapes
details for draw person as person shapes
static const double stoppingPlaceDetails
details for stopping places
static const double connectionsDemandMode
draw connections in demand mode
static const double detectorText
details for detector texts
static const double stoppingPlaceText
details for stopping place texts
static const double stopsText
details for stop texts
static const double personTriangles
details for draw person as triangles
static const double stopsDetails
details for stops
static const double geometryPointsDetails
details for Geometry Points
static const double vehicleBoxes
details for draw person as boxes
static const double calibratorText
details for calibrator text
static const double personCircles
details for draw person as circles
static const double personExaggeration
Exaggeration for persons (only used in NETEDIT)
static const double geometryPointsText
details for Geometry Points Texts
static const double E3EntryExitWidth
E3 Entry/Exit detector width.
static const RGBColor E2Color
color for E2 detectors
static const double E1InstantHeight
E1 Instant detector heights.
static const double E2Width
E2 detector widths.
static const RGBColor E3ExitColor
color for Exits
static const double E3Size
E3 detector size.
static const RGBColor E1Color
color for E1 detectors
static const double E1Width
E1 detector widths.
static const RGBColor E3EntryColor
color for Entrys
static const double E1InstantWidth
E1 Instant detector widths.
static const double E3EntryExitHeight
E3 Entry/Exit detector height.
static const RGBColor E1InstantColor
color for E1 Instant detectors
static const double E1Height
E1 Instant detector heights.
static const RGBColor firstFrontColor
first color of dotted front contour
static const RGBColor firstInspectedColor
first color of dotted inspected contour
static const RGBColor secondFrontColor
second color of dotted front contour
static const double segmentWidth
width of dotted contour segments
static const RGBColor secondInspectedColor
second color of dotted inspectedcontour
static const double segmentLength
length of dotted contour segments
static const double crossingGeometryPointRadius
moving crossing geometry point radius
static const double polygonGeometryPointRadius
moving geometry point radius
static const double connectionGeometryPointRadius
moving connection geometry point radius
static const double junctionGeometryPointRadius
moving junction geometry point radius
static const double junctionBubbleRadius
junction buuble radius
static const double polygonContourWidth
polygon contour width
static const double polylineWidth
poly line width
static const double edgeGeometryPointRadius
moving edge geometry point radius
bool operator!=(const GUIVisualizationSizeSettings &other)
inequality comparator
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
GUIVisualizationSizeSettings(double _minSize, double _exaggeration=1.0, bool _constantSize=false, bool _constantSizeSelected=false)
constructor
double exaggeration
The size exaggeration (upscale)
bool constantSize
whether the object shall be drawn with constant size regardless of zoom
void print(OutputDevice &dev, const std::string &name) const
print values in output device
double minSize
The minimum size to draw this object.
bool operator==(const GUIVisualizationSizeSettings &other)
equality comparator
bool constantSizeSelected
whether only selected objects shall be drawn with constant
static const RGBColor parkingAreaColorSign
color for parkingArea sign
static const RGBColor containerStopColorSign
color for containerStop signs
static const double stoppingPlaceSignOffset
busStop offset
static const RGBColor chargingStationColor
color for chargingStations
static const RGBColor chargingStationColorSign
color for chargingStation sign
static const double chargingStationWidth
chargingStation width
static const double busStopWidth
busStop width
static const RGBColor containerStopColor
color for containerStops
static const RGBColor busStopColorSign
color for busStops signs
static const RGBColor parkingSpaceColor
color for parkingSpace innen
static const RGBColor parkingSpaceColorContour
color for parkingSpace contour
static const double containerStopWidth
containerStop width
static const RGBColor busStopColor
color for busStops
static const RGBColor chargingStationColorCharge
color for chargingStation during charging
static const RGBColor parkingAreaColor
color for parkingAreas
GUIVisualizationTextSettings(bool _show, double _size, RGBColor _color, RGBColor _bgColor=RGBColor(128, 0, 0, 0), bool _constSize=true)
constructor
void print(OutputDevice &dev, const std::string &name) const
print values in output device
bool operator==(const GUIVisualizationTextSettings &other)
equality comparator
RGBColor bgColor
background text color
bool operator!=(const GUIVisualizationTextSettings &other)
inequality comparator
double scaledSize(double scale, double constFactor=0.1) const
get scale size
bool constSize
@brif flag to avoid size changes
static const double walk
width for walks
static const double trip
width for trips
static const double personTrip
width for person trips
static const double ride
width for rides
static const double route
width for routes