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-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
19 // Stores the information about how to visualize structures
20 /****************************************************************************/
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #ifdef _MSC_VER
27 #include <windows_config.h>
28 #else
29 #include <config.h>
30 #endif
31 
32 #include <map>
33 #include <vector>
35 #include "GUIPropertyScheme.h"
36 
37 // ===========================================================================
38 // static members
39 // ===========================================================================
41 
42 /* -------------------------------------------------------------------------
43  * color constants for link states
44  * ----------------------------------------------------------------------- */
45 const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0);
46 const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0);
47 const RGBColor SUMO_color_TL_RED(255, 0, 0);
48 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
49 const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0);
50 const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0);
51 const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0);
52 const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255);
53 const RGBColor SUMO_color_MAJOR(255, 255, 255);
54 const RGBColor SUMO_color_MINOR(51, 51, 51);
55 const RGBColor SUMO_color_EQUAL(128, 128, 128);
56 const RGBColor SUMO_color_STOP(128, 0, 128);
57 const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192);
58 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
59 const RGBColor SUMO_color_DEADEND(0, 0, 0);
60 
61 /* -------------------------------------------------------------------------
62  * color constants for other objects
63  * ----------------------------------------------------------------------- */
66 
67 // ===========================================================================
68 // member method definitions
69 // ===========================================================================
71  name(""),
72  netedit(_netedit),
73  dither(false),
74  backgroundColor(RGBColor::WHITE),
75  showGrid(false), gridXSize(100), gridYSize(100),
76  laneShowBorders(false), showLinkDecals(true),
77  showLinkRules(true), showRails(true),
78  edgeName(false, 50, RGBColor(255, 128, 0, 255)),
79  internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)),
80  cwaEdgeName(false, 50, RGBColor::MAGENTA),
81  streetName(false, 55, RGBColor::YELLOW),
82  hideConnectors(false),
83  laneWidthExaggeration(1),
84  laneMinSize(0),
85  showLaneDirection(false),
86  showSublanes(true),
87  vehicleQuality(0), showBlinker(true),
88  drawLaneChangePreference(false), drawMinGap(false),
89  showBTRange(false), vehicleSize(1),
90  vehicleName(false, 50, RGBColor(204, 153, 0, 255)),
91  personQuality(0),
92  personSize(1),
93  personName(false, 50, RGBColor(0, 153, 204, 255)),
94  containerQuality(0),
95  containerSize(1),
96  containerName(false, 50, RGBColor(0, 153, 204, 255)),
97  drawLinkTLIndex(false, 50, RGBColor(128, 128, 255, 255)),
98  drawLinkJunctionIndex(false, 50, RGBColor(128, 128, 255, 255)),
99  junctionName(false, 50, RGBColor(0, 255, 128, 255)),
100  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
101  showLane2Lane(false),
102  drawJunctionShape(true),
103  drawCrossingsAndWalkingareas(true),
104  junctionSize(1),
105  addMode(0),
106  addSize(1),
107  addName(false, 50, RGBColor(255, 0, 128, 255)),
108  addFullName(false, 50, RGBColor(255, 0, 128, 255)),
109  poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
110  poiType(false, 50, RGBColor(255, 0, 128, 255)),
111  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
112  polyType(false, 50, RGBColor(255, 0, 128, 255)),
113  showSizeLegend(true),
114  gaming(false),
115  selectionScale(1),
116  drawForSelecting(false) {
117 
118  if (netedit) {
120  } else {
122  }
123 }
124 
125 
126 void
129  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
130  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
131  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
132  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
133  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
134  scheme.addColor(RGBColor(92, 92, 92), 5, "no passenger"); // paths, service roads etc
135  scheme.addColor(RGBColor::RED, 6, "closed"); // road closing
136  scheme.addColor(RGBColor::GREEN, 7, "connector"); // macro-connector
137  laneColorer.addScheme(scheme);
138  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
139  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
140  laneColorer.addScheme(scheme);
141  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
142  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
143  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
144  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
145  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
146  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
147  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
148  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
149  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
150  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
151  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
152  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
153  laneColorer.addScheme(scheme);
154  // ... traffic states ...
155  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
156  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
157  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
158  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
159  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
160  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
161  laneColorer.addScheme(scheme);
162  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor(235, 235, 235));
163  scheme.addColor(RGBColor::GREEN, 0.25);
164  scheme.addColor(RGBColor::YELLOW, 0.5);
165  scheme.addColor(RGBColor::ORANGE, 0.75);
166  scheme.addColor(RGBColor::RED, 1.0);
167  laneColorer.addScheme(scheme);
168  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor(235, 235, 235));
169  scheme.addColor(RGBColor::GREEN, 0.25);
170  scheme.addColor(RGBColor::YELLOW, 0.5);
171  scheme.addColor(RGBColor::ORANGE, 0.75);
172  scheme.addColor(RGBColor::RED, 1.0);
173  laneColorer.addScheme(scheme);
174  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(235, 235, 235));
175  scheme.addColor(RGBColor::CYAN, (double)30);
176  scheme.addColor(RGBColor::GREEN, (double)100);
177  scheme.addColor(RGBColor::YELLOW, (double)200);
178  scheme.addColor(RGBColor::RED, (double)300);
179  laneColorer.addScheme(scheme);
180  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
181  scheme.addColor(RGBColor::BLUE, (double)5);
182  laneColorer.addScheme(scheme);
183  // ... emissions ...
184  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
185  scheme.addColor(RGBColor::RED, (double)(10. / 7.5 / 5.));
186  laneColorer.addScheme(scheme);
187  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
188  scheme.addColor(RGBColor::RED, (double)(0.05 / 7.5 / 2.));
189  laneColorer.addScheme(scheme);
190  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
191  scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 / 5.));
192  laneColorer.addScheme(scheme);
193  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
194  scheme.addColor(RGBColor::RED, (double)(.125 / 7.5 / 5.));
195  laneColorer.addScheme(scheme);
196  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
197  scheme.addColor(RGBColor::RED, (double)(.02 / 7.5 / 4.));
198  laneColorer.addScheme(scheme);
199  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
200  scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 * 100.));
201  laneColorer.addScheme(scheme);
202  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
203  scheme.addColor(RGBColor::RED, (double)100);
204  laneColorer.addScheme(scheme);
205  // ... weights (experimental) ...
206  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
207  scheme.addColor(RGBColor::RED, (double)100);
208  scheme.setAllowsNegativeValues(true);
209  laneColorer.addScheme(scheme);
210  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
211  scheme.addColor(RGBColor::YELLOW, (double)50);
212  scheme.addColor(RGBColor::GREEN, (double)100);
213  scheme.setAllowsNegativeValues(true);
214  laneColorer.addScheme(scheme);
215  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
216  scheme.addColor(RGBColor::RED, 0.25);
217  scheme.addColor(RGBColor::YELLOW, 0.5);
218  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
219  scheme.addColor(RGBColor::GREEN, (double)2.0);
220  scheme.addColor(RGBColor::BLUE, (double)4.0);
221  laneColorer.addScheme(scheme);
222  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
223  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
224  scheme.addColor(RGBColor::RED, (double)100);
225  scheme.setAllowsNegativeValues(true);
226  laneColorer.addScheme(scheme);
227  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
228  scheme.addColor(RGBColor::RED, (double) - 20);
229  scheme.addColor(RGBColor::GREEN, (double)20);
230  scheme.setAllowsNegativeValues(true);
231  laneColorer.addScheme(scheme);
232  scheme = GUIColorScheme("by height at start", RGBColor::GREY);
233  scheme.addColor(RGBColor::BLUE, (double) - 10);
234  scheme.addColor(RGBColor::RED, (double)10);
235  scheme.addColor(RGBColor::YELLOW, (double)50);
236  scheme.addColor(RGBColor::GREEN, (double)100);
237  scheme.addColor(RGBColor::MAGENTA, (double)200);
238  scheme.setAllowsNegativeValues(true);
239  laneColorer.addScheme(scheme);
240  scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::GREY);
241  scheme.addColor(RGBColor::BLUE, (double) - 10);
242  scheme.addColor(RGBColor::RED, (double)10);
243  scheme.addColor(RGBColor::YELLOW, (double)50);
244  scheme.addColor(RGBColor::GREEN, (double)100);
245  scheme.addColor(RGBColor::MAGENTA, (double)200);
246  scheme.setAllowsNegativeValues(true);
247  laneColorer.addScheme(scheme);
248  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
249  scheme.addColor(RGBColor::YELLOW, (double) .1);
250  scheme.addColor(RGBColor::RED, (double) .3);
251  scheme.addColor(RGBColor::GREEN, (double) - .1);
252  scheme.addColor(RGBColor::BLUE, (double) - .3);
253  scheme.setAllowsNegativeValues(true);
254  laneColorer.addScheme(scheme);
255  scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
256  scheme.addColor(RGBColor::YELLOW, (double) .1);
257  scheme.addColor(RGBColor::RED, (double) .3);
258  scheme.addColor(RGBColor::GREEN, (double) - .1);
259  scheme.addColor(RGBColor::BLUE, (double) - .3);
260  scheme.setAllowsNegativeValues(true);
261  laneColorer.addScheme(scheme);
262  scheme = GUIColorScheme("by average speed", RGBColor::RED);
263  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
264  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
265  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
266  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
267  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
268  laneColorer.addScheme(scheme);
269  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED);
270  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
271  scheme.addColor(RGBColor::GREEN, (double)(0.5));
272  scheme.addColor(RGBColor::CYAN, (double)(0.75));
273  scheme.addColor(RGBColor::BLUE, (double)(1));
274  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
275  laneColorer.addScheme(scheme);
276  scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED);
277  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
278  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
279  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
280  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
281  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
282  laneColorer.addScheme(scheme);
283  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
284  scheme.addColor(RGBColor::RED, (double)(1 / 7.5 / 5.));
285  laneColorer.addScheme(scheme);
286  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor(204, 204, 204));
287  scheme.addColor(RGBColor::GREEN, (double)1);
288  scheme.addColor(RGBColor::YELLOW, (double)10);
289  scheme.addColor(RGBColor::RED, (double)100);
290  laneColorer.addScheme(scheme);
291 
292 
294  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
296  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
297  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
298  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
299  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
300  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
301  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
302  scheme = GUIColorScheme("by speed", RGBColor::RED);
303  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
304  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
305  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
306  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
307  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
308  vehicleColorer.addScheme(scheme);
309  scheme = GUIColorScheme("by action step", RGBColor::GREY);
310  scheme.addColor(RGBColor(0, 255, 0, 255), 1.);
311  scheme.addColor(RGBColor(80, 160, 80, 255), 2.);
312  vehicleColorer.addScheme(scheme);
313  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
314  scheme.addColor(RGBColor::CYAN, (double)30);
315  scheme.addColor(RGBColor::GREEN, (double)100);
316  scheme.addColor(RGBColor::YELLOW, (double)200);
317  scheme.addColor(RGBColor::RED, (double)300);
318  vehicleColorer.addScheme(scheme);
319  scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE);
320  scheme.addColor(RGBColor::CYAN, (double)25);
321  scheme.addColor(RGBColor::GREEN, (double)50);
322  scheme.addColor(RGBColor::YELLOW, (double)75);
323  scheme.addColor(RGBColor::RED, (double)100);
324  vehicleColorer.addScheme(scheme);
325  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0");
326  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
327  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
328  scheme.addColor(RGBColor(255, 0, 0, 255), -0.001);
329  scheme.addColor(RGBColor(0, 0, 255, 255), 0.001);
330  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
331  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
332  scheme.setAllowsNegativeValues(true);
333  vehicleColorer.addScheme(scheme);
334  scheme = GUIColorScheme("by max speed", RGBColor::RED);
335  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
336  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
337  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
338  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
339  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
340  vehicleColorer.addScheme(scheme);
341  // ... emissions ...
342  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
343  scheme.addColor(RGBColor::RED, (double)5.);
344  vehicleColorer.addScheme(scheme);
345  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
346  scheme.addColor(RGBColor::RED, 0.05);
347  vehicleColorer.addScheme(scheme);
348  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
349  scheme.addColor(RGBColor::RED, (double).005);
350  vehicleColorer.addScheme(scheme);
351  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
352  scheme.addColor(RGBColor::RED, (double).125);
353  vehicleColorer.addScheme(scheme);
354  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
355  scheme.addColor(RGBColor::RED, (double).02);
356  vehicleColorer.addScheme(scheme);
357  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
358  scheme.addColor(RGBColor::RED, (double).005);
359  vehicleColorer.addScheme(scheme);
360  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
361  scheme.addColor(RGBColor::RED, (double)100.);
362  vehicleColorer.addScheme(scheme);
363  scheme = GUIColorScheme("by reroute number", RGBColor::RED);
364  scheme.addColor(RGBColor::YELLOW, (double)1.);
365  scheme.addColor(RGBColor::WHITE, (double)10.);
366  vehicleColorer.addScheme(scheme);
367  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
368  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
369  vehicleColorer.addScheme(scheme);
370  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0");
371  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
372  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
373  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
374  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
375  scheme.setAllowsNegativeValues(true);
376  vehicleColorer.addScheme(scheme);
377  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0");
378  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
379  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
380  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
381  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
382  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
383  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
384  scheme.setAllowsNegativeValues(true);
385  vehicleColorer.addScheme(scheme);
386  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0");
387  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
388  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
389  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
390  scheme.setAllowsNegativeValues(true);
391  vehicleColorer.addScheme(scheme);
392  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
393  scheme.addColor(RGBColor::CYAN, (double)30);
394  scheme.addColor(RGBColor::GREEN, (double)100);
395  scheme.addColor(RGBColor::YELLOW, (double)200);
396  scheme.addColor(RGBColor::RED, (double)300);
397  vehicleColorer.addScheme(scheme);
398  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
399  scheme.addColor(RGBColor::RED, (double)5);
400  vehicleColorer.addScheme(scheme);
401  scheme = GUIColorScheme("by time loss", RGBColor::BLUE);
402  scheme.addColor(RGBColor::CYAN, (double)10);
403  scheme.addColor(RGBColor::GREEN, (double)60);
404  scheme.addColor(RGBColor::YELLOW, (double)180);
405  scheme.addColor(RGBColor::RED, (double)900);
406  vehicleColorer.addScheme(scheme);
408 
410  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::YELLOW, "", true));
412  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::YELLOW, "", true));
413  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
414  scheme = GUIColorScheme("by speed", RGBColor::RED);
415  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
416  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
417  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
418  personColorer.addScheme(scheme);
419  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
420  scheme.addColor(RGBColor::BLUE, (double)(1)); // riding
421  scheme.addColor(RGBColor::RED, (double)(2)); // stopped
422  scheme.addColor(RGBColor::GREEN, (double)(3)); // waiting for ride
423  personColorer.addScheme(scheme);
424  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
425  scheme.addColor(RGBColor::CYAN, (double)30);
426  scheme.addColor(RGBColor::GREEN, (double)100);
427  scheme.addColor(RGBColor::YELLOW, (double)200);
428  scheme.addColor(RGBColor::RED, (double)300);
429  personColorer.addScheme(scheme);
430  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
431  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
432  personColorer.addScheme(scheme);
433  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
435 
437  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
439  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
440  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
441  scheme = GUIColorScheme("by speed", RGBColor::RED);
442  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
443  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
444  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
445  containerColorer.addScheme(scheme);
446  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
447  scheme.addColor(RGBColor::BLUE, (double)(1)); // riding
448  scheme.addColor(RGBColor::RED, (double)(2)); // stopped
449  scheme.addColor(RGBColor::GREEN, (double)(3)); // waiting for ride
450  containerColorer.addScheme(scheme);
451  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
452  scheme.addColor(RGBColor::CYAN, (double)30);
453  scheme.addColor(RGBColor::GREEN, (double)100);
454  scheme.addColor(RGBColor::YELLOW, (double)200);
455  scheme.addColor(RGBColor::RED, (double)300);
456  containerColorer.addScheme(scheme);
457  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
458  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
459  containerColorer.addScheme(scheme);
461 
463  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
464  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
465  junctionColorer.addScheme(scheme);
466  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
467  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
468  junctionColorer.addScheme(scheme);
469  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
470  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
471  scheme.addColor(RGBColor::YELLOW, 2, "priority");
472  scheme.addColor(RGBColor::RED, 3, "priority_stop");
473  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
474  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
475  scheme.addColor(RGBColor::GREY, 6, "district");
476  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
477  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
478  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
479  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper"); // light brown
480  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
481  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
482  junctionColorer.addScheme(scheme);
483  scheme = GUIColorScheme("by height", RGBColor::GREY);
484  scheme.addColor(RGBColor::BLUE, (double) - 10);
485  scheme.addColor(RGBColor::RED, (double)10);
486  scheme.addColor(RGBColor::YELLOW, (double)50);
487  scheme.addColor(RGBColor::GREEN, (double)100);
488  scheme.addColor(RGBColor::MAGENTA, (double)200);
489  scheme.setAllowsNegativeValues(true);
490  junctionColorer.addScheme(scheme);
491 
492 
494  {
495  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
496  laneScaler.addScheme(scheme);
497  scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true);
498  scheme.addColor(5, 1, "selected");
499  laneScaler.addScheme(scheme);
500  // ... traffic states ...
501  scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
502  scheme.addColor(10, (double)(150.0 / 3.6));
503  laneScaler.addScheme(scheme);
504  scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0);
505  scheme.addColor(10, 0.95);
506  laneScaler.addScheme(scheme);
507  scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0);
508  scheme.addColor(10, 0.95);
509  laneScaler.addScheme(scheme);
510  scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0);
511  scheme.addColor(10, (double)300);
512  laneScaler.addScheme(scheme);
513  scheme = GUIScaleScheme("by lane number (streetwise)", 1);
514  scheme.addColor(10, (double)5);
515  laneScaler.addScheme(scheme);
516  // ... emissions ...
517  scheme = GUIScaleScheme("by CO2 emissions", 0);
518  scheme.addColor(10, (double)(10. / 7.5 / 5.));
519  laneScaler.addScheme(scheme);
520  scheme = GUIScaleScheme("by CO emissions", 0);
521  scheme.addColor(10, (double)(0.05 / 7.5 / 2.));
522  laneScaler.addScheme(scheme);
523  scheme = GUIScaleScheme("by PMx emissions", 0);
524  scheme.addColor(10, (double)(.005 / 7.5 / 5.));
525  laneScaler.addScheme(scheme);
526  scheme = GUIScaleScheme("by NOx emissions", 0);
527  scheme.addColor(10, (double)(.125 / 7.5 / 5.));
528  laneScaler.addScheme(scheme);
529  scheme = GUIScaleScheme("by HC emissions", 0);
530  scheme.addColor(10, (double)(.02 / 7.5 / 4.));
531  laneScaler.addScheme(scheme);
532  scheme = GUIScaleScheme("by fuel consumption", 0);
533  scheme.addColor(10, (double)(.005 / 7.5 * 100.));
534  laneScaler.addScheme(scheme);
535  scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0);
536  scheme.addColor(10, (double)100);
537  laneScaler.addScheme(scheme);
538  // ... weights (experimental) ...
539  scheme = GUIScaleScheme("by global travel time", 0);
540  scheme.addColor(10, (double)100);
541  scheme.setAllowsNegativeValues(true);
542  laneScaler.addScheme(scheme);
543  scheme = GUIScaleScheme("by global speed percentage", 0);
544  scheme.addColor(10, (double)100);
545  scheme.setAllowsNegativeValues(true);
546  laneScaler.addScheme(scheme);
547  scheme = GUIScaleScheme("by given length/geometrical length", 0);
548  scheme.addColor(10, (double)10.0);
549  laneScaler.addScheme(scheme);
550  scheme = GUIScaleScheme("by loaded weight", 0);
551  scheme.addColor(-1000, (double) - 1000);
552  scheme.addColor(1000, (double)1000);
553  scheme.setAllowsNegativeValues(true);
554  laneScaler.addScheme(scheme);
555  scheme = GUIScaleScheme("by priority", 1);
556  scheme.addColor(0.5, (double) - 20);
557  scheme.addColor(5, (double)20);
558  scheme.setAllowsNegativeValues(true);
559  laneScaler.addScheme(scheme);
560  scheme = GUIScaleScheme("by average speed", 0);
561  scheme.addColor(10, (double)(150.0 / 3.6));
562  laneScaler.addScheme(scheme);
563  scheme = GUIScaleScheme("by average relative speed", 0);
564  scheme.addColor(0.5, (double)(0.5));
565  scheme.addColor(2, (double)(1));
566  scheme.addColor(10, (double)(2));
567  laneScaler.addScheme(scheme);
568  scheme = GUIScaleScheme("by electricity consumption", 0);
569  scheme.addColor(10, (double)(1 / 7.5 / 5.));
570  laneScaler.addScheme(scheme);
571  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
572  scheme.addColor(1, (double)1);
573  scheme.addColor(10, (double)10);
574  scheme.addColor(50, (double)100);
575  laneScaler.addScheme(scheme);
576  }
577 
578 
580  edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true));
581  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
582  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
583  edgeColorer.addScheme(scheme);
584  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
585  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
586  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
587  edgeColorer.addScheme(scheme);
588  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
589  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
590  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
591  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
592  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
593  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
594  edgeColorer.addScheme(scheme);
595  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE);
596  scheme.addColor(RGBColor::RED, 0.95);
597  edgeColorer.addScheme(scheme);
598  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
599  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
600  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
601  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
602  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
603  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
604  edgeColorer.addScheme(scheme);
605  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
606  scheme.addColor(RGBColor::RED, (double)5000);
607  edgeColorer.addScheme(scheme);
608  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
609  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
610  scheme.addColor(RGBColor::GREEN, (double)(0.5));
611  scheme.addColor(RGBColor::CYAN, (double)(0.75));
612  scheme.addColor(RGBColor::BLUE, (double)(1));
613  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
614  edgeColorer.addScheme(scheme);
615  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED);
616  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
617  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
618  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
619  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
620  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
621  edgeColorer.addScheme(scheme);
622  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
623  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
624  scheme.addColor(RGBColor::RED, 1, "even");
625  edgeColorer.addScheme(scheme);
626  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true);
627  scheme.addColor(RGBColor::RED, 1, "jammed");
628  edgeColorer.addScheme(scheme);
629  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE);
630  scheme.addColor(RGBColor::RED, 0.95);
631  edgeColorer.addScheme(scheme);
632  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED);
633  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
634  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
635  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
636  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
637  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
638  edgeColorer.addScheme(scheme);
639  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE);
640  scheme.addColor(RGBColor::RED, (double)5000);
641  edgeColorer.addScheme(scheme);
642  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED);
643  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
644  scheme.addColor(RGBColor::GREEN, (double)(0.5));
645  scheme.addColor(RGBColor::CYAN, (double)(0.75));
646  scheme.addColor(RGBColor::BLUE, (double)(1));
647  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
648  edgeColorer.addScheme(scheme);
649  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY);
650  scheme.addColor(RGBColor::GREEN, (double)1);
651  scheme.addColor(RGBColor::YELLOW, (double)10);
652  scheme.addColor(RGBColor::RED, (double)100);
653  edgeColorer.addScheme(scheme);
654 
655 
657  {
658  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
659  GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true);
660  scheme.addColor(5, 1, "selected");
661  edgeScaler.addScheme(scheme);
662  scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
663  scheme.addColor(10, (double)(150.0 / 3.6));
664  edgeScaler.addScheme(scheme);
665  scheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0);
666  scheme.addColor(10, 0.95);
667  edgeScaler.addScheme(scheme);
668  scheme = GUIScaleScheme("by current speed (streetwise)", 0);
669  scheme.addColor(10, (double)(150.0 / 3.6));
670  edgeScaler.addScheme(scheme);
671  scheme = GUIScaleScheme("by current flow (streetwise)", 0);
672  scheme.addColor(20, (double)5000);
673  edgeScaler.addScheme(scheme);
674  scheme = GUIScaleScheme("by relative speed (streetwise)", 0);
675  scheme.addColor(20, (double)1);
676  edgeScaler.addScheme(scheme);
677  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
678  scheme.addColor(1, (double)1);
679  scheme.addColor(10, (double)10);
680  scheme.addColor(50, (double)100);
681  edgeScaler.addScheme(scheme);
682  }
683 
684 }
685 
686 
687 void
689  // init color schemes
690  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
691  scheme.addColor(RGBColor::GREY, 1, "Sidewalk");
692  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
693  scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
694  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
695  scheme.addColor(RGBColor(92, 92, 92), 5, "no passenger"); // paths, service roads etc
696  laneColorer.addScheme(scheme);
697  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
698  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
699  laneColorer.addScheme(scheme);
700  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
701  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
702  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
703  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
704  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
705  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
706  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
707  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
708  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
709  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
710  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
711  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
712  laneColorer.addScheme(scheme);
713 
714  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
715  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
716  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
717  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
718  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
719  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
720  laneColorer.addScheme(scheme);
721 
722  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
723  scheme.addColor(RGBColor::BLUE, (double)5);
724  laneColorer.addScheme(scheme);
725 
726  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
727  scheme.addColor(RGBColor::RED, 0.25);
728  scheme.addColor(RGBColor::YELLOW, 0.5);
729  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
730  scheme.addColor(RGBColor::GREEN, (double)2.0);
731  scheme.addColor(RGBColor::BLUE, (double)4.0);
732  laneColorer.addScheme(scheme);
733  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
734 
735  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
736  scheme.addColor(RGBColor::RED, (double) - 20);
737  scheme.addColor(RGBColor::GREEN, (double)20);
738  scheme.setAllowsNegativeValues(true);
739  laneColorer.addScheme(scheme);
740  scheme = GUIColorScheme("by height at start", RGBColor::RED);
741  scheme.addColor(RGBColor::BLUE, (double) - 10);
742  scheme.addColor(RGBColor::YELLOW, (double)50);
743  scheme.addColor(RGBColor::GREEN, (double)100);
744  scheme.addColor(RGBColor::MAGENTA, (double)200);
745  scheme.setAllowsNegativeValues(true);
746  laneColorer.addScheme(scheme);
747  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
748  scheme.addColor(RGBColor::BLUE, (double) - 10);
749  scheme.addColor(RGBColor::YELLOW, (double)50);
750  scheme.addColor(RGBColor::GREEN, (double)100);
751  scheme.addColor(RGBColor::MAGENTA, (double)200);
752  scheme.setAllowsNegativeValues(true);
753  laneColorer.addScheme(scheme);
754  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
755  scheme.addColor(RGBColor::YELLOW, (double) .1);
756  scheme.addColor(RGBColor::RED, (double) .3);
757  scheme.addColor(RGBColor::GREEN, (double) - .1);
758  scheme.addColor(RGBColor::BLUE, (double) - .3);
759  scheme.setAllowsNegativeValues(true);
760  laneColorer.addScheme(scheme);
761  scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
762  scheme.addColor(RGBColor::YELLOW, (double) .1);
763  scheme.addColor(RGBColor::RED, (double) .3);
764  scheme.addColor(RGBColor::GREEN, (double) - .1);
765  scheme.addColor(RGBColor::BLUE, (double) - .3);
766  scheme.setAllowsNegativeValues(true);
767  laneColorer.addScheme(scheme);
768 
769  scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
770  scheme.addColor(RGBColor(204, 0, 0), 1, "shape not computed");
771  scheme.addColor(RGBColor(153, 0, 0), 2, "geometry points");
772  junctionColorer.addScheme(scheme);
773  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
774  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
775  junctionColorer.addScheme(scheme);
776  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
777  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
778  scheme.addColor(RGBColor::YELLOW, 2, "priority");
779  scheme.addColor(RGBColor::RED, 3, "priority_stop");
780  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
781  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
782  scheme.addColor(RGBColor::GREY, 6, "district");
783  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
784  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
785  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
786  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper");
787  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
788  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
789  junctionColorer.addScheme(scheme);
790  scheme = GUIColorScheme("by height", RGBColor::GREY);
791  scheme.addColor(RGBColor::BLUE, (double) - 10);
792  scheme.addColor(RGBColor::RED, (double)10);
793  scheme.addColor(RGBColor::YELLOW, (double)50);
794  scheme.addColor(RGBColor::GREEN, (double)100);
795  scheme.addColor(RGBColor::MAGENTA, (double)200);
796  scheme.setAllowsNegativeValues(true);
797  junctionColorer.addScheme(scheme);
798 
800  {
801  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
802  laneScaler.addScheme(scheme);
803  }
804 
805  // dummy schemes
809 }
810 
811 
812 int
814  if (UseMesoSim) {
815  return edgeColorer.getActive();
816  }
817  return laneColorer.getActive();
818 }
819 
820 
821 int
823  if (UseMesoSim) {
824  return edgeScaler.getActive();
825  }
826  return laneScaler.getActive();
827 }
828 
829 
832  if (UseMesoSim) {
833  return edgeColorer.getScheme();
834  }
835  return laneColorer.getScheme();
836 }
837 
838 
841  if (UseMesoSim) {
842  return edgeScaler.getScheme();
843  }
844  return laneScaler.getScheme();
845 }
846 
847 void
852  dev.writeAttr("dither", dither);
853  dev.closeTag();
855  dev.writeAttr("backgroundColor", backgroundColor);
856  dev.writeAttr("showGrid", showGrid);
857  dev.writeAttr("gridXSize", gridXSize);
858  dev.writeAttr("gridYSize", gridYSize);
859  dev.closeTag();
860  // edges
862  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
863  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
864  dev.writeAttr("laneShowBorders", laneShowBorders);
865  dev.writeAttr("showLinkDecals", showLinkDecals);
866  dev.writeAttr("showLinkRules", showLinkRules);
867  dev.writeAttr("showRails", showRails);
868  dev.writeAttr("hideConnectors", hideConnectors);
869  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
870  dev.writeAttr("minSize", laneMinSize);
871  dev.writeAttr("showDirection", showLaneDirection);
872  dev.writeAttr("showSublanes", showSublanes);
873  dev.lf();
874  dev << " ";
875  edgeName.print(dev, "edgeName");
876  dev.lf();
877  dev << " ";
878  internalEdgeName.print(dev, "internalEdgeName");
879  dev.lf();
880  dev << " ";
881  cwaEdgeName.print(dev, "cwaEdgeName");
882  dev.lf();
883  dev << " ";
884  streetName.print(dev, "streetName");
885  laneColorer.save(dev);
886  laneScaler.save(dev);
887  edgeColorer.save(dev);
888  edgeScaler.save(dev);
889  dev.closeTag();
890  // vehicles
892  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
893  dev.writeAttr("vehicleQuality", vehicleQuality);
894  vehicleSize.print(dev, "vehicle");
895  dev.writeAttr("showBlinker", showBlinker);
896  dev.lf();
897  dev << " ";
898  vehicleName.print(dev, "vehicleName");
899  vehicleColorer.save(dev);
900  dev.closeTag();
901  // persons
903  dev.writeAttr("personMode", personColorer.getActive());
904  dev.writeAttr("personQuality", personQuality);
905  personSize.print(dev, "person");
906  dev.lf();
907  dev << " ";
908  personName.print(dev, "personName");
909  personColorer.save(dev);
910  dev.closeTag();
911  // persons
913  dev.writeAttr("containerMode", containerColorer.getActive());
914  dev.writeAttr("containerQuality", containerQuality);
915  personSize.print(dev, "container");
916  dev.lf();
917  dev << " ";
918  personName.print(dev, "containerName");
919  personColorer.save(dev);
920  dev.closeTag();
921  // junctions
923  dev.writeAttr("junctionMode", junctionColorer.getActive());
924  dev.lf();
925  dev << " ";
926  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
927  dev.lf();
928  dev << " ";
929  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
930  dev.lf();
931  dev << " ";
932  junctionName.print(dev, "junctionName");
933  dev.lf();
934  dev << " ";
935  internalJunctionName.print(dev, "internalJunctionName");
936  dev.lf();
937  dev << " ";
938  dev.writeAttr("showLane2Lane", showLane2Lane);
939  dev.writeAttr("drawShape", drawJunctionShape);
940  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
941  junctionSize.print(dev, "junction");
942  junctionColorer.save(dev);
943  dev.closeTag();
944  // additionals
946  dev.writeAttr("addMode", addMode);
947  addSize.print(dev, "add");
948  addName.print(dev, "addName");
949  addFullName.print(dev, "addFullName");
950  dev.closeTag();
951  // pois
953  poiSize.print(dev, "poi");
954  poiName.print(dev, "poiName");
955  poiType.print(dev, "poiType");
956  dev.closeTag();
957  // polys
959  polySize.print(dev, "poly");
960  polyName.print(dev, "polyName");
961  polyType.print(dev, "polyType");
962  dev.closeTag();
963  // legend
965  dev.writeAttr("showSizeLegend", showSizeLegend);
966  dev.closeTag();
967 
968  dev.closeTag();
969 }
970 
971 
972 bool
974  if (dither != v2.dither) {
975  return false;
976  }
977  if (backgroundColor != v2.backgroundColor) {
978  return false;
979  }
980  if (showGrid != v2.showGrid) {
981  return false;
982  }
983  if (gridXSize != v2.gridXSize) {
984  return false;
985  }
986  if (gridYSize != v2.gridYSize) {
987  return false;
988  }
989 
990  if (!(edgeColorer == v2.edgeColorer)) {
991  return false;
992  }
993  if (!(edgeScaler == v2.edgeScaler)) {
994  return false;
995  }
996  if (!(laneColorer == v2.laneColorer)) {
997  return false;
998  }
999  if (!(laneScaler == v2.laneScaler)) {
1000  return false;
1001  }
1002  if (laneShowBorders != v2.laneShowBorders) {
1003  return false;
1004  }
1005  if (showLinkDecals != v2.showLinkDecals) {
1006  return false;
1007  }
1008  if (showLinkRules != v2.showLinkRules) {
1009  return false;
1010  }
1011  if (showRails != v2.showRails) {
1012  return false;
1013  }
1014  if (edgeName != v2.edgeName) {
1015  return false;
1016  }
1017  if (internalEdgeName != v2.internalEdgeName) {
1018  return false;
1019  }
1020  if (cwaEdgeName != v2.cwaEdgeName) {
1021  return false;
1022  }
1023  if (streetName != v2.streetName) {
1024  return false;
1025  }
1026  if (hideConnectors != v2.hideConnectors) {
1027  return false;
1028  }
1030  return false;
1031  }
1032  if (laneMinSize != v2.laneMinSize) {
1033  return false;
1034  }
1036  return false;
1037  }
1038  if (showSublanes != v2.showSublanes) {
1039  return false;
1040  }
1041  if (!(vehicleColorer == v2.vehicleColorer)) {
1042  return false;
1043  }
1044  if (vehicleQuality != v2.vehicleQuality) {
1045  return false;
1046  }
1047  if (vehicleSize != v2.vehicleSize) {
1048  return false;
1049  }
1050  if (showBlinker != v2.showBlinker) {
1051  return false;
1052  }
1054  return false;
1055  }
1056  if (drawMinGap != v2.drawMinGap) {
1057  return false;
1058  }
1059  if (showBTRange != v2.showBTRange) {
1060  return false;
1061  }
1062  if (vehicleName != v2.vehicleName) {
1063  return false;
1064  }
1065  if (!(personColorer == v2.personColorer)) {
1066  return false;
1067  }
1068  if (personQuality != v2.personQuality) {
1069  return false;
1070  }
1071  if (personSize != v2.personSize) {
1072  return false;
1073  }
1074  if (personName != v2.personName) {
1075  return false;
1076  }
1077  if (!(containerColorer == v2.containerColorer)) {
1078  return false;
1079  }
1080  if (containerQuality != v2.containerQuality) {
1081  return false;
1082  }
1083  if (containerSize != v2.containerSize) {
1084  return false;
1085  }
1086  if (containerName != v2.containerName) {
1087  return false;
1088  }
1089  if (!(junctionColorer == v2.junctionColorer)) {
1090  return false;
1091  }
1092  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
1093  return false;
1094  }
1096  return false;
1097  }
1098  if (junctionName != v2.junctionName) {
1099  return false;
1100  }
1102  return false;
1103  }
1104 
1105  if (showLane2Lane != v2.showLane2Lane) {
1106  return false;
1107  }
1108 
1110  return false;
1111  }
1112 
1114  return false;
1115  }
1116  if (junctionSize != v2.junctionSize) {
1117  return false;
1118  }
1119 
1120  if (addMode != v2.addMode) {
1121  return false;
1122  }
1123  if (addSize != v2.addSize) {
1124  return false;
1125  }
1126  if (addName != v2.addName) {
1127  return false;
1128  }
1129  if (addFullName != v2.addFullName) {
1130  return false;
1131  }
1132  if (poiSize != v2.poiSize) {
1133  return false;
1134  }
1135  if (poiName != v2.poiName) {
1136  return false;
1137  }
1138  if (poiType != v2.poiType) {
1139  return false;
1140  }
1141  if (polySize != v2.polySize) {
1142  return false;
1143  }
1144  if (polyName != v2.polyName) {
1145  return false;
1146  }
1147  if (polyType != v2.polyType) {
1148  return false;
1149  }
1150 
1151  if (showSizeLegend != v2.showSizeLegend) {
1152  return false;
1153  }
1154 
1155  return true;
1156 }
1157 
1158 
1159 double
1162  return (constantSize && !s.drawForSelecting) ? MAX2((double)exaggeration, exaggeration * factor / s.scale) : exaggeration;
1163 }
1164 
1165 
1166 const RGBColor&
1168  switch (ls) {
1173  case LINKSTATE_TL_RED:
1174  return SUMO_color_TL_RED;
1176  return SUMO_color_TL_REDYELLOW;
1185  case LINKSTATE_MAJOR:
1186  return SUMO_color_MAJOR;
1187  case LINKSTATE_MINOR:
1188  return SUMO_color_MINOR;
1189  case LINKSTATE_EQUAL:
1190  return SUMO_color_EQUAL;
1191  case LINKSTATE_STOP:
1192  return SUMO_color_STOP;
1193  case LINKSTATE_ALLWAY_STOP:
1194  return SUMO_color_ALLWAY_STOP;
1195  case LINKSTATE_ZIPPER:
1196  return SUMO_color_ZIPPER;
1197  case LINKSTATE_DEADEND:
1198  return SUMO_color_DEADEND;
1199  default:
1200  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1201  }
1202 }
1203 
1204 /****************************************************************************/
1205 
1206 
GUIVisualizationSizeSettings junctionSize
GUIVisualizationTextSettings junctionName
The link has green light, may pass.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:260
static const RGBColor BLUE
Definition: RGBColor.h:180
const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0)
const RGBColor SUMO_color_TL_RED(255, 0, 0)
bool showSizeLegend
Information whether the size legend shall be drawn.
double scale
information about a lane&#39;s width (temporary, used for a single view)
GUIVisualizationTextSettings poiType
GUIVisualizationTextSettings streetName
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIPropertyScheme< double > GUIScaleScheme
is a pedestrian
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings personName
void setAllowsNegativeValues(bool value)
const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0)
GUIVisualizationTextSettings poiName
static const RGBColor WHITE
Definition: RGBColor.h:185
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
bool showBTRange
Information whether the communication range shall be drawn.
GUIColorer laneColorer
The lane colorer.
GUIColorer containerColorer
The container colorer.
The link has green light, has to brake.
Stores the information about how to visualize structures.
This is an uncontrolled, minor link, has to stop.
vehicle is a bicycle
GUIColorer edgeColorer
The mesoscopic edge colorer.
vehicle is a small delivery vehicle
bool drawLaneChangePreference
Information whether the lane change preference shall be drawn.
bool showRails
Information whether rails shall be drawn.
GUIVisualizationTextSettings vehicleName
classes which (normally) do not drive on normal roads
const RGBColor SUMO_color_MINOR(51, 51, 51)
bool operator==(const GUIVisualizationSettings &vs2)
Comparison operator.
This is a dead end link.
static const RGBColor ORANGE
Definition: RGBColor.h:184
T MAX2(T a, T b)
Definition: StdDefs.h:73
bool showLaneDirection
Whether to show direction indicators for lanes.
void print(OutputDevice &dev, const std::string &name) const
GUIVisualizationTextSettings cwaEdgeName
const RGBColor SUMO_color_EQUAL(128, 128, 128)
bool laneShowBorders
Information whether lane borders shall be drawn.
This is an uncontrolled, right-before-left link.
bool netedit
Whether the settings are for Netedit.
static const RGBColor BLACK
Definition: RGBColor.h:186
const SVCPermissions SVCAll
all VClasses are allowed
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
The link is controlled by a tls which is off, not blinking, may pass.
This is an uncontrolled, all-way stop link.
bool dither
Information whether dithering shall be enabled.
const RGBColor SUMO_color_STOP(128, 0, 128)
This is an uncontrolled, zipper-merge link.
GUIVisualizationSettings(bool _netedit=false)
constructor
GUIVisualizationSizeSettings polySize
const RGBColor SUMO_color_ZIPPER(192, 128, 64)
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings edgeName
GUIVisualizationSizeSettings addSize
int getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
void save(OutputDevice &dev) const
Writes the settings into an output device.
static const RGBColor GREEN
Definition: RGBColor.h:179
static const RGBColor GREY
Definition: RGBColor.h:187
int addColor(const T &color, const double threshold, const std::string &name="")
std::string name
The name of this setting.
double gridXSize
Information about the grid spacings.
const RGBColor SUMO_color_MAJOR(255, 255, 255)
GUIVisualizationTextSettings internalEdgeName
This is an uncontrolled, minor link, has to brake.
bool drawMinGap
Information whether the minimum gap shall be drawn.
int addMode
The additional structures visualization scheme.
const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192)
GUIVisualizationTextSettings polyType
bool showSublanes
Whether to show sublane boundaries.
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0)
static const RGBColor MAGENTA
Definition: RGBColor.h:183
GUIVisualizationTextSettings drawLinkTLIndex
GUIColorer personColorer
The person colorer.
GUIVisualizationTextSettings internalJunctionName
GUIColorer junctionColorer
The junction colorer.
static const RGBColor SUMO_color_E3Entry
double laneMinSize
The minimum visual lane width for drawing.
GUIScaler edgeScaler
The mesoscopic edge scaler.
vehicle is a passenger car (a "normal" car)
GUIScaleScheme & getLaneEdgeScaleScheme()
Returns the current lane (edge) scaling schme.
int containerQuality
The quality of container drawing.
RGBColor backgroundColor
The background color to use.
is an arbitrary ship
vehicle is a moped
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0)
vehicle is a taxi
void print(OutputDevice &dev, const std::string &name) const
GUIVisualizationSizeSettings poiSize
vehicle is a bus
static const RGBColor YELLOW
Definition: RGBColor.h:181
static const RGBColor RED
named colors
Definition: RGBColor.h:178
const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0)
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
static const RGBColor CYAN
Definition: RGBColor.h:182
The link has yellow light, may pass.
GUIVisualizationSizeSettings containerSize
The link is controlled by a tls which is off and blinks, has to brake.
GUIVisualizationTextSettings addFullName
The link has red light (must brake)
const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255)
This is an uncontrolled, major link, may pass.
GUIVisualizationSizeSettings personSize
int personQuality
The quality of person drawing.
bool showGrid
Information whether a grid shall be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0)
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:70
static const RGBColor SUMO_color_E3Exit
bool closeTag()
Closes the most recently opened tag.
GUIVisualizationSizeSettings vehicleSize
bool drawJunctionShape
whether the shape of the junction should be drawn
GUIPropertyScheme< RGBColor > GUIColorScheme
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
int vehicleQuality
The quality of vehicle drawing.
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
The link has yellow light, has to brake anyway.
const RGBColor SUMO_color_DEADEND(0, 0, 0)
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
GUIScaler laneScaler
The lane scaler.
void save(OutputDevice &dev) const
static const RGBColor & getLinkColor(const LinkState &ls)
The link has red light (must brake) but indicates upcoming green.
GUIVisualizationTextSettings drawLinkJunctionIndex
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
void lf()
writes a line feed if applicable
Definition: OutputDevice.h:238
void initNeteditDefaults()
init default settings
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName