SUMO - Simulation of Urban MObility
GUIVisualizationSettings.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Stores the information about how to visualize structures
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <map>
34 #include <vector>
36 #include "GUIPropertyScheme.h"
37 
38 #ifdef CHECK_MEMORY_LEAKS
39 #include <foreign/nvwa/debug_new.h>
40 #endif // CHECK_MEMORY_LEAKS
41 
42 // ===========================================================================
43 // static members
44 // ===========================================================================
46 
47 /* -------------------------------------------------------------------------
48  * color constants for link states
49  * ----------------------------------------------------------------------- */
50 const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0);
51 const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0);
52 const RGBColor SUMO_color_TL_RED(255, 0, 0);
53 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
54 const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0);
55 const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0);
56 const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0);
57 const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255);
58 const RGBColor SUMO_color_MAJOR(255, 255, 255);
59 const RGBColor SUMO_color_MINOR(51, 51, 51);
60 const RGBColor SUMO_color_EQUAL(128, 128, 128);
61 const RGBColor SUMO_color_STOP(128, 0, 128);
62 const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192);
63 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
64 const RGBColor SUMO_color_DEADEND(0, 0, 0);
65 
66 
67 // ===========================================================================
68 // member method definitions
69 // ===========================================================================
71  : name(""), antialiase(false), dither(false),
72  backgroundColor(RGBColor::WHITE),
73  showGrid(false), gridXSize(100), gridYSize(100),
74  laneShowBorders(false), showLinkDecals(true),
75  showLinkRules(true), showRails(true),
76  edgeName(false, 50, RGBColor(255, 128, 0, 255)),
77  internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)),
78  cwaEdgeName(false, 50, RGBColor::MAGENTA),
79  streetName(false, 55, RGBColor::YELLOW),
80  hideConnectors(false),
81  laneWidthExaggeration(1),
82  laneMinSize(0),
83  showLaneDirection(false),
84  showSublanes(true),
85  vehicleQuality(0), showBlinker(true),
86  drawLaneChangePreference(false), drawMinGap(false),
87  showBTRange(false), vehicleSize(1),
88  vehicleName(false, 50, RGBColor(204, 153, 0, 255)),
89  personQuality(0),
90  personSize(1),
91  personName(false, 50, RGBColor(0, 153, 204, 255)),
92  containerQuality(0),
93  containerSize(1),
94  containerName(false, 50, RGBColor(0, 153, 204, 255)),
95  drawLinkTLIndex(false, 50, RGBColor(128, 128, 255, 255)),
96  drawLinkJunctionIndex(false, 50, RGBColor(128, 128, 255, 255)),
97  junctionName(false, 50, RGBColor(0, 255, 128, 255)),
98  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
99  showLane2Lane(false),
100  drawJunctionShape(true),
101  drawCrossingsAndWalkingareas(true),
102  junctionSize(1),
103  addMode(0),
104  addSize(1),
105  addName(false, 50, RGBColor(255, 0, 128, 255)),
106  poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
107  poiType(false, 50, RGBColor(255, 0, 128, 255)),
108  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
109  polyType(false, 50, RGBColor(255, 0, 128, 255)),
110  showSizeLegend(true),
111  gaming(false),
112  selectionScale(1),
113  drawForSelecting(false) {
115  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
116  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
117  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
118  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
119  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
120  scheme.addColor(RGBColor(92, 92, 92), 5, "no passenger"); // paths, service roads etc
121  scheme.addColor(RGBColor::RED, 6, "closed"); // road closing
122  laneColorer.addScheme(scheme);
123  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
124  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
125  laneColorer.addScheme(scheme);
126  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
127  scheme.addColor(RGBColor(10, 10, 10), (SUMOReal)SVC_PASSENGER, "passenger");
128  scheme.addColor(RGBColor(128, 128, 128), (SUMOReal)SVC_PEDESTRIAN, "pedestrian");
129  scheme.addColor(RGBColor(80, 80, 80), (SUMOReal)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
130  scheme.addColor(RGBColor(192, 66, 44), (SUMOReal)SVC_BICYCLE, "bicycle");
131  scheme.addColor(RGBColor(40, 100, 40), (SUMOReal)SVC_BUS, "bus");
132  scheme.addColor(RGBColor(166, 147, 26), (SUMOReal)SVC_TAXI, "taxi");
133  scheme.addColor(RGBColor::BLACK, (SUMOReal)(SVCAll & ~SVC_NON_ROAD), "normal_road");
134  scheme.addColor(RGBColor::BLACK, (SUMOReal)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
135  scheme.addColor(RGBColor(255, 206, 0), (SUMOReal)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
136  scheme.addColor(RGBColor(150, 200, 200), (SUMOReal)SVC_SHIP, "waterway");
137  scheme.addColor(RGBColor::GREEN, (SUMOReal)SVCAll, "all");
138  laneColorer.addScheme(scheme);
139  // ... traffic states ...
140  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
141  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
142  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
143  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
144  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
145  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
146  laneColorer.addScheme(scheme);
147  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor::BLUE);
148  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
149  laneColorer.addScheme(scheme);
150  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor::BLUE);
151  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
152  laneColorer.addScheme(scheme);
153  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor::BLUE);
154  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
155  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
156  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
157  scheme.addColor(RGBColor::RED, (SUMOReal)300);
158  laneColorer.addScheme(scheme);
159  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
160  scheme.addColor(RGBColor::BLUE, (SUMOReal)5);
161  laneColorer.addScheme(scheme);
162  // ... emissions ...
163  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
164  scheme.addColor(RGBColor::RED, (SUMOReal)(10. / 7.5 / 5.));
165  laneColorer.addScheme(scheme);
166  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
167  scheme.addColor(RGBColor::RED, (SUMOReal)(0.05 / 7.5 / 2.));
168  laneColorer.addScheme(scheme);
169  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
170  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 / 5.));
171  laneColorer.addScheme(scheme);
172  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
173  scheme.addColor(RGBColor::RED, (SUMOReal)(.125 / 7.5 / 5.));
174  laneColorer.addScheme(scheme);
175  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
176  scheme.addColor(RGBColor::RED, (SUMOReal)(.02 / 7.5 / 4.));
177  laneColorer.addScheme(scheme);
178  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
179  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 * 100.));
180  laneColorer.addScheme(scheme);
181  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
182  scheme.addColor(RGBColor::RED, (SUMOReal)100);
183  laneColorer.addScheme(scheme);
184  // ... weights (experimental) ...
185  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
186  scheme.addColor(RGBColor::RED, (SUMOReal)100);
187  scheme.setAllowsNegativeValues(true);
188  laneColorer.addScheme(scheme);
189  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
190  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
191  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
192  scheme.setAllowsNegativeValues(true);
193  laneColorer.addScheme(scheme);
194  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
195  scheme.addColor(RGBColor::RED, (SUMOReal)0.25);
196  scheme.addColor(RGBColor::YELLOW, (SUMOReal)0.5);
197  scheme.addColor(RGBColor(179, 179, 179, 255), (SUMOReal)1.0);
198  scheme.addColor(RGBColor::GREEN, (SUMOReal)2.0);
199  scheme.addColor(RGBColor::BLUE, (SUMOReal)4.0);
200  laneColorer.addScheme(scheme);
201  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
202  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
203  scheme.addColor(RGBColor::RED, (SUMOReal)100);
204  scheme.setAllowsNegativeValues(true);
205  laneColorer.addScheme(scheme);
206  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
207  scheme.addColor(RGBColor::RED, (SUMOReal) - 20);
208  scheme.addColor(RGBColor::GREEN, (SUMOReal)20);
209  scheme.setAllowsNegativeValues(true);
210  laneColorer.addScheme(scheme);
211  scheme = GUIColorScheme("by height at start", RGBColor::RED);
212  scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10);
213  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
214  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
215  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200);
216  scheme.setAllowsNegativeValues(true);
217  laneColorer.addScheme(scheme);
218  scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::RED);
219  scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10);
220  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
221  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
222  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200);
223  scheme.setAllowsNegativeValues(true);
224  laneColorer.addScheme(scheme);
225  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
226  scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1);
227  scheme.addColor(RGBColor::RED, (SUMOReal) .3);
228  scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1);
229  scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3);
230  scheme.setAllowsNegativeValues(true);
231  laneColorer.addScheme(scheme);
232  scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
233  scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1);
234  scheme.addColor(RGBColor::RED, (SUMOReal) .3);
235  scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1);
236  scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3);
237  scheme.setAllowsNegativeValues(true);
238  laneColorer.addScheme(scheme);
239  scheme = GUIColorScheme("by average speed", RGBColor::RED);
240  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
241  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
242  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
243  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
244  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
245  laneColorer.addScheme(scheme);
246  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED);
247  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25));
248  scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5));
249  scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75));
250  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1));
251  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25));
252  laneColorer.addScheme(scheme);
253  scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED);
254  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
255  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
256  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
257  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
258  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
259  laneColorer.addScheme(scheme);
260  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
261  scheme.addColor(RGBColor::RED, (SUMOReal)(1 / 7.5 / 5.));
262  laneColorer.addScheme(scheme);
263  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY);
264  scheme.addColor(RGBColor::GREEN, (SUMOReal)1);
265  scheme.addColor(RGBColor::YELLOW, (SUMOReal)10);
266  scheme.addColor(RGBColor::RED, (SUMOReal)100);
267  laneColorer.addScheme(scheme);
268 
269 
271  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
273  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
274  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
275  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
276  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
277  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
278  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
279  scheme = GUIColorScheme("by speed", RGBColor::RED);
280  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
281  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
282  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
283  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
284  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
285  vehicleColorer.addScheme(scheme);
286  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
287  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
288  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
289  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
290  scheme.addColor(RGBColor::RED, (SUMOReal)300);
291  vehicleColorer.addScheme(scheme);
292  scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE);
293  scheme.addColor(RGBColor::CYAN, (SUMOReal)25);
294  scheme.addColor(RGBColor::GREEN, (SUMOReal)50);
295  scheme.addColor(RGBColor::YELLOW, (SUMOReal)75);
296  scheme.addColor(RGBColor::RED, (SUMOReal)100);
297  vehicleColorer.addScheme(scheme);
298  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0");
299  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
300  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
301  scheme.addColor(RGBColor(255, 0, 0, 255), -0.001);
302  scheme.addColor(RGBColor(0, 0, 255, 255), 0.001);
303  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
304  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
305  scheme.setAllowsNegativeValues(true);
306  vehicleColorer.addScheme(scheme);
307  scheme = GUIColorScheme("by max speed", RGBColor::RED);
308  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
309  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
310  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
311  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
312  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
313  vehicleColorer.addScheme(scheme);
314  // ... emissions ...
315  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
316  scheme.addColor(RGBColor::RED, (SUMOReal)5.);
317  vehicleColorer.addScheme(scheme);
318  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
319  scheme.addColor(RGBColor::RED, (SUMOReal)0.05);
320  vehicleColorer.addScheme(scheme);
321  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
322  scheme.addColor(RGBColor::RED, (SUMOReal).005);
323  vehicleColorer.addScheme(scheme);
324  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
325  scheme.addColor(RGBColor::RED, (SUMOReal).125);
326  vehicleColorer.addScheme(scheme);
327  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
328  scheme.addColor(RGBColor::RED, (SUMOReal).02);
329  vehicleColorer.addScheme(scheme);
330  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
331  scheme.addColor(RGBColor::RED, (SUMOReal).005);
332  vehicleColorer.addScheme(scheme);
333  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
334  scheme.addColor(RGBColor::RED, (SUMOReal)100.);
335  vehicleColorer.addScheme(scheme);
336  scheme = GUIColorScheme("by reroute number", RGBColor::RED);
337  scheme.addColor(RGBColor::YELLOW, (SUMOReal)1.);
338  scheme.addColor(RGBColor::WHITE, (SUMOReal)10.);
339  vehicleColorer.addScheme(scheme);
340  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
341  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
342  vehicleColorer.addScheme(scheme);
343  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0");
344  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
345  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
346  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
347  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
348  scheme.setAllowsNegativeValues(true);
349  vehicleColorer.addScheme(scheme);
350  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0");
351  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
352  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
353  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
354  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
355  scheme.setAllowsNegativeValues(true);
356  vehicleColorer.addScheme(scheme);
357  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0");
358  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
359  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
360  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
361  scheme.setAllowsNegativeValues(true);
362  vehicleColorer.addScheme(scheme);
363  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
364  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
365  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
366  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
367  scheme.addColor(RGBColor::RED, (SUMOReal)300);
368  vehicleColorer.addScheme(scheme);
369  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
370  scheme.addColor(RGBColor::RED, (SUMOReal)5);
371  vehicleColorer.addScheme(scheme);
372  scheme = GUIColorScheme("by time loss", RGBColor::BLUE);
373  scheme.addColor(RGBColor::CYAN, (SUMOReal)10);
374  scheme.addColor(RGBColor::GREEN, (SUMOReal)60);
375  scheme.addColor(RGBColor::YELLOW, (SUMOReal)180);
376  scheme.addColor(RGBColor::RED, (SUMOReal)900);
377  vehicleColorer.addScheme(scheme);
379 
381  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::YELLOW, "", true));
383  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::YELLOW, "", true));
384  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
385  scheme = GUIColorScheme("by speed", RGBColor::RED);
386  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6));
387  scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6));
388  scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6));
389  personColorer.addScheme(scheme);
390  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
391  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding
392  scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped
393  scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride
394  personColorer.addScheme(scheme);
395  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
396  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
397  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
398  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
399  scheme.addColor(RGBColor::RED, (SUMOReal)300);
400  personColorer.addScheme(scheme);
401  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
402  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
403  personColorer.addScheme(scheme);
404  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
406 
408  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
410  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
411  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
412  scheme = GUIColorScheme("by speed", RGBColor::RED);
413  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6));
414  scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6));
415  scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6));
416  containerColorer.addScheme(scheme);
417  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
418  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding
419  scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped
420  scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride
421  containerColorer.addScheme(scheme);
422  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
423  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
424  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
425  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
426  scheme.addColor(RGBColor::RED, (SUMOReal)300);
427  containerColorer.addScheme(scheme);
428  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
429  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
430  containerColorer.addScheme(scheme);
432 
434  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
435  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
436  junctionColorer.addScheme(scheme);
437  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
438  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
439  junctionColorer.addScheme(scheme);
440  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
441  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
442  scheme.addColor(RGBColor::YELLOW, 2, "priority");
443  scheme.addColor(RGBColor::RED, 3, "priority_stop");
444  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
445  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
446  scheme.addColor(RGBColor::GREY, 6, "district");
447  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
448  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
449  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
450  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper"); // light brown
451  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
452  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
453  junctionColorer.addScheme(scheme);
454 
455 
457  {
458  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
459  laneScaler.addScheme(scheme);
460  scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true);
461  scheme.addColor(5, 1, "selected");
462  laneScaler.addScheme(scheme);
463  // ... traffic states ...
464  scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
465  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
466  laneScaler.addScheme(scheme);
467  scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0);
468  scheme.addColor(10, (SUMOReal)0.95);
469  laneScaler.addScheme(scheme);
470  scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0);
471  scheme.addColor(10, (SUMOReal)0.95);
472  laneScaler.addScheme(scheme);
473  scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0);
474  scheme.addColor(10, (SUMOReal)300);
475  laneScaler.addScheme(scheme);
476  scheme = GUIScaleScheme("by lane number (streetwise)", 1);
477  scheme.addColor(10, (SUMOReal)5);
478  laneScaler.addScheme(scheme);
479  // ... emissions ...
480  scheme = GUIScaleScheme("by CO2 emissions", 0);
481  scheme.addColor(10, (SUMOReal)(10. / 7.5 / 5.));
482  laneScaler.addScheme(scheme);
483  scheme = GUIScaleScheme("by CO emissions", 0);
484  scheme.addColor(10, (SUMOReal)(0.05 / 7.5 / 2.));
485  laneScaler.addScheme(scheme);
486  scheme = GUIScaleScheme("by PMx emissions", 0);
487  scheme.addColor(10, (SUMOReal)(.005 / 7.5 / 5.));
488  laneScaler.addScheme(scheme);
489  scheme = GUIScaleScheme("by NOx emissions", 0);
490  scheme.addColor(10, (SUMOReal)(.125 / 7.5 / 5.));
491  laneScaler.addScheme(scheme);
492  scheme = GUIScaleScheme("by HC emissions", 0);
493  scheme.addColor(10, (SUMOReal)(.02 / 7.5 / 4.));
494  laneScaler.addScheme(scheme);
495  scheme = GUIScaleScheme("by fuel consumption", 0);
496  scheme.addColor(10, (SUMOReal)(.005 / 7.5 * 100.));
497  laneScaler.addScheme(scheme);
498  scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0);
499  scheme.addColor(10, (SUMOReal)100);
500  laneScaler.addScheme(scheme);
501  // ... weights (experimental) ...
502  scheme = GUIScaleScheme("by global travel time", 0);
503  scheme.addColor(10, (SUMOReal)100);
504  scheme.setAllowsNegativeValues(true);
505  laneScaler.addScheme(scheme);
506  scheme = GUIScaleScheme("by global speed percentage", 0);
507  scheme.addColor(10, (SUMOReal)100);
508  scheme.setAllowsNegativeValues(true);
509  laneScaler.addScheme(scheme);
510  scheme = GUIScaleScheme("by given length/geometrical length", 0);
511  scheme.addColor(10, (SUMOReal)10.0);
512  laneScaler.addScheme(scheme);
513  scheme = GUIScaleScheme("by loaded weight", 0);
514  scheme.addColor(-1000, (SUMOReal) - 1000);
515  scheme.addColor(1000, (SUMOReal)1000);
516  scheme.setAllowsNegativeValues(true);
517  laneScaler.addScheme(scheme);
518  scheme = GUIScaleScheme("by priority", 1);
519  scheme.addColor(0.5, (SUMOReal) - 20);
520  scheme.addColor(5, (SUMOReal)20);
521  scheme.setAllowsNegativeValues(true);
522  laneScaler.addScheme(scheme);
523  scheme = GUIScaleScheme("by average speed", 0);
524  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
525  laneScaler.addScheme(scheme);
526  scheme = GUIScaleScheme("by average relative speed", 0);
527  scheme.addColor(0.5, (SUMOReal)(0.5));
528  scheme.addColor(2, (SUMOReal)(1));
529  scheme.addColor(10, (SUMOReal)(2));
530  laneScaler.addScheme(scheme);
531  scheme = GUIScaleScheme("by electricity consumption", 0);
532  scheme.addColor(10, (SUMOReal)(1 / 7.5 / 5.));
533  laneScaler.addScheme(scheme);
534  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
535  scheme.addColor(1, (SUMOReal)1);
536  scheme.addColor(10, (SUMOReal)10);
537  scheme.addColor(50, (SUMOReal)100);
538  laneScaler.addScheme(scheme);
539  }
540 
541 
543  edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true));
544  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
545  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
546  edgeColorer.addScheme(scheme);
547  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
548  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
549  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
550  edgeColorer.addScheme(scheme);
551  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
552  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
553  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
554  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
555  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
556  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
557  edgeColorer.addScheme(scheme);
558  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE);
559  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
560  edgeColorer.addScheme(scheme);
561  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
562  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
563  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
564  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
565  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
566  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
567  edgeColorer.addScheme(scheme);
568  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
569  scheme.addColor(RGBColor::RED, (SUMOReal)5000);
570  edgeColorer.addScheme(scheme);
571  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
572  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25));
573  scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5));
574  scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75));
575  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1));
576  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25));
577  edgeColorer.addScheme(scheme);
578  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED);
579  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
580  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
581  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
582  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
583  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
584  edgeColorer.addScheme(scheme);
585  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
586  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
587  scheme.addColor(RGBColor::RED, 1, "even");
588  edgeColorer.addScheme(scheme);
589  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true);
590  scheme.addColor(RGBColor::RED, 1, "jammed");
591  edgeColorer.addScheme(scheme);
592  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE);
593  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
594  edgeColorer.addScheme(scheme);
595  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED);
596  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
597  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
598  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
599  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
600  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
601  edgeColorer.addScheme(scheme);
602  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE);
603  scheme.addColor(RGBColor::RED, (SUMOReal)5000);
604  edgeColorer.addScheme(scheme);
605  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED);
606  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25));
607  scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5));
608  scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75));
609  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1));
610  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25));
611  edgeColorer.addScheme(scheme);
612  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY);
613  scheme.addColor(RGBColor::GREEN, (SUMOReal)1);
614  scheme.addColor(RGBColor::YELLOW, (SUMOReal)10);
615  scheme.addColor(RGBColor::RED, (SUMOReal)100);
616  edgeColorer.addScheme(scheme);
617 
618 
620  {
621  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
622  GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true);
623  scheme.addColor(5, 1, "selected");
624  edgeScaler.addScheme(scheme);
625  scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
626  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
627  edgeScaler.addScheme(scheme);
628  scheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0);
629  scheme.addColor(10, (SUMOReal)0.95);
630  edgeScaler.addScheme(scheme);
631  scheme = GUIScaleScheme("by current speed (streetwise)", 0);
632  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
633  edgeScaler.addScheme(scheme);
634  scheme = GUIScaleScheme("by current flow (streetwise)", 0);
635  scheme.addColor(20, (SUMOReal)5000);
636  edgeScaler.addScheme(scheme);
637  scheme = GUIScaleScheme("by relative speed (streetwise)", 0);
638  scheme.addColor(20, (SUMOReal)1);
639  edgeScaler.addScheme(scheme);
640  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
641  scheme.addColor(1, (SUMOReal)1);
642  scheme.addColor(10, (SUMOReal)10);
643  scheme.addColor(50, (SUMOReal)100);
644  edgeScaler.addScheme(scheme);
645  }
646 
647 }
648 
649 
650 int
652  if (UseMesoSim) {
653  return edgeColorer.getActive();
654  }
655  return laneColorer.getActive();
656 }
657 
658 
659 int
661  if (UseMesoSim) {
662  return edgeScaler.getActive();
663  }
664  return laneScaler.getActive();
665 }
666 
667 
670  if (UseMesoSim) {
671  return edgeColorer.getScheme();
672  }
673  return laneColorer.getScheme();
674 }
675 
676 
679  if (UseMesoSim) {
680  return edgeScaler.getScheme();
681  }
682  return laneScaler.getScheme();
683 }
684 
685 void
690  dev.writeAttr("antialiase", antialiase);
691  dev.writeAttr("dither", dither);
692  dev.closeTag();
694  dev.writeAttr("backgroundColor", backgroundColor);
695  dev.writeAttr("showGrid", showGrid);
696  dev.writeAttr("gridXSize", gridXSize);
697  dev.writeAttr("gridYSize", gridYSize);
698  dev.closeTag();
699  // edges
701  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
702  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
703  dev.writeAttr("laneShowBorders", laneShowBorders);
704  dev.writeAttr("showLinkDecals", showLinkDecals);
705  dev.writeAttr("showLinkRules", showLinkRules);
706  dev.writeAttr("showRails", showRails);
707  dev.writeAttr("hideConnectors", hideConnectors);
708  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
709  dev.writeAttr("minSize", laneMinSize);
710  dev.writeAttr("showDirection", showLaneDirection);
711  dev.writeAttr("showSublanes", showSublanes);
712  dev.lf();
713  dev << " ";
714  edgeName.print(dev, "edgeName");
715  dev.lf();
716  dev << " ";
717  internalEdgeName.print(dev, "internalEdgeName");
718  dev.lf();
719  dev << " ";
720  cwaEdgeName.print(dev, "cwaEdgeName");
721  dev.lf();
722  dev << " ";
723  streetName.print(dev, "streetName");
724  laneColorer.save(dev);
725  laneScaler.save(dev);
726  edgeColorer.save(dev);
727  edgeScaler.save(dev);
728  dev.closeTag();
729  // vehicles
731  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
732  dev.writeAttr("vehicleQuality", vehicleQuality);
733  vehicleSize.print(dev, "vehicle");
734  dev.writeAttr("showBlinker", showBlinker);
735  dev.lf();
736  dev << " ";
737  vehicleName.print(dev, "vehicleName");
738  vehicleColorer.save(dev);
739  dev.closeTag();
740  // persons
742  dev.writeAttr("personMode", personColorer.getActive());
743  dev.writeAttr("personQuality", personQuality);
744  personSize.print(dev, "person");
745  dev.lf();
746  dev << " ";
747  personName.print(dev, "personName");
748  personColorer.save(dev);
749  dev.closeTag();
750  // persons
752  dev.writeAttr("containerMode", containerColorer.getActive());
753  dev.writeAttr("containerQuality", containerQuality);
754  personSize.print(dev, "container");
755  dev.lf();
756  dev << " ";
757  personName.print(dev, "containerName");
758  personColorer.save(dev);
759  dev.closeTag();
760  // junctions
762  dev.writeAttr("junctionMode", junctionColorer.getActive());
763  dev.lf();
764  dev << " ";
765  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
766  dev.lf();
767  dev << " ";
768  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
769  dev.lf();
770  dev << " ";
771  junctionName.print(dev, "junctionName");
772  dev.lf();
773  dev << " ";
774  internalJunctionName.print(dev, "internalJunctionName");
775  dev.lf();
776  dev << " ";
777  dev.writeAttr("showLane2Lane", showLane2Lane);
778  dev.writeAttr("drawShape", drawJunctionShape);
779  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
780  junctionSize.print(dev, "junction");
781  junctionColorer.save(dev);
782  dev.closeTag();
783  // additionals
785  dev.writeAttr("addMode", addMode);
786  addSize.print(dev, "add");
787  addName.print(dev, "addName");
788  dev.closeTag();
789  // pois
791  poiSize.print(dev, "poi");
792  poiName.print(dev, "poiName");
793  poiType.print(dev, "poiType");
794  dev.closeTag();
795  // polys
797  polySize.print(dev, "poly");
798  polyName.print(dev, "polyName");
799  polyType.print(dev, "polyType");
800  dev.closeTag();
801  // legend
803  dev.writeAttr("showSizeLegend", showSizeLegend);
804  dev.closeTag();
805 
806  dev.closeTag();
807 }
808 
809 
810 bool
812  if (antialiase != v2.antialiase) {
813  return false;
814  }
815  if (dither != v2.dither) {
816  return false;
817  }
818  if (backgroundColor != v2.backgroundColor) {
819  return false;
820  }
821  if (showGrid != v2.showGrid) {
822  return false;
823  }
824  if (gridXSize != v2.gridXSize) {
825  return false;
826  }
827  if (gridYSize != v2.gridYSize) {
828  return false;
829  }
830 
831  if (!(edgeColorer == v2.edgeColorer)) {
832  return false;
833  }
834  if (!(edgeScaler == v2.edgeScaler)) {
835  return false;
836  }
837  if (!(laneColorer == v2.laneColorer)) {
838  return false;
839  }
840  if (!(laneScaler == v2.laneScaler)) {
841  return false;
842  }
843  if (laneShowBorders != v2.laneShowBorders) {
844  return false;
845  }
846  if (showLinkDecals != v2.showLinkDecals) {
847  return false;
848  }
849  if (showLinkRules != v2.showLinkRules) {
850  return false;
851  }
852  if (showRails != v2.showRails) {
853  return false;
854  }
855  if (edgeName != v2.edgeName) {
856  return false;
857  }
859  return false;
860  }
861  if (cwaEdgeName != v2.cwaEdgeName) {
862  return false;
863  }
864  if (streetName != v2.streetName) {
865  return false;
866  }
867  if (hideConnectors != v2.hideConnectors) {
868  return false;
869  }
871  return false;
872  }
873  if (laneMinSize != v2.laneMinSize) {
874  return false;
875  }
877  return false;
878  }
879  if (showSublanes != v2.showSublanes) {
880  return false;
881  }
882  if (!(vehicleColorer == v2.vehicleColorer)) {
883  return false;
884  }
885  if (vehicleQuality != v2.vehicleQuality) {
886  return false;
887  }
888  if (vehicleSize != v2.vehicleSize) {
889  return false;
890  }
891  if (showBlinker != v2.showBlinker) {
892  return false;
893  }
895  return false;
896  }
897  if (drawMinGap != v2.drawMinGap) {
898  return false;
899  }
900  if (showBTRange != v2.showBTRange) {
901  return false;
902  }
903  if (vehicleName != v2.vehicleName) {
904  return false;
905  }
906  if (!(personColorer == v2.personColorer)) {
907  return false;
908  }
909  if (personQuality != v2.personQuality) {
910  return false;
911  }
912  if (personSize != v2.personSize) {
913  return false;
914  }
915  if (personName != v2.personName) {
916  return false;
917  }
918  if (!(containerColorer == v2.containerColorer)) {
919  return false;
920  }
922  return false;
923  }
924  if (containerSize != v2.containerSize) {
925  return false;
926  }
927  if (containerName != v2.containerName) {
928  return false;
929  }
930  if (!(junctionColorer == v2.junctionColorer)) {
931  return false;
932  }
933  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
934  return false;
935  }
937  return false;
938  }
939  if (junctionName != v2.junctionName) {
940  return false;
941  }
943  return false;
944  }
945 
946  if (showLane2Lane != v2.showLane2Lane) {
947  return false;
948  }
949 
951  return false;
952  }
953 
955  return false;
956  }
957  if (junctionSize != v2.junctionSize) {
958  return false;
959  }
960 
961  if (addMode != v2.addMode) {
962  return false;
963  }
964  if (addSize != v2.addSize) {
965  return false;
966  }
967  if (addName != v2.addName) {
968  return false;
969  }
970  if (poiSize != v2.poiSize) {
971  return false;
972  }
973  if (poiName != v2.poiName) {
974  return false;
975  }
976  if (poiType != v2.poiType) {
977  return false;
978  }
979  if (polySize != v2.polySize) {
980  return false;
981  }
982  if (polyName != v2.polyName) {
983  return false;
984  }
985  if (polyType != v2.polyType) {
986  return false;
987  }
988 
989  if (showSizeLegend != v2.showSizeLegend) {
990  return false;
991  }
992 
993  return true;
994 }
995 
996 
997 SUMOReal
1000  return (constantSize && !s.drawForSelecting) ? MAX2((SUMOReal)exaggeration, exaggeration * factor / s.scale) : exaggeration;
1001 }
1002 
1003 
1004 const RGBColor&
1006  switch (ls) {
1011  case LINKSTATE_TL_RED:
1012  return SUMO_color_TL_RED;
1014  return SUMO_color_TL_REDYELLOW;
1023  case LINKSTATE_MAJOR:
1024  return SUMO_color_MAJOR;
1025  case LINKSTATE_MINOR:
1026  return SUMO_color_MINOR;
1027  case LINKSTATE_EQUAL:
1028  return SUMO_color_EQUAL;
1029  case LINKSTATE_STOP:
1030  return SUMO_color_STOP;
1031  case LINKSTATE_ALLWAY_STOP:
1032  return SUMO_color_ALLWAY_STOP;
1033  case LINKSTATE_ZIPPER:
1034  return SUMO_color_ZIPPER;
1035  case LINKSTATE_DEADEND:
1036  return SUMO_color_DEADEND;
1037  default:
1038  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1039  }
1040 }
1041 
1042 /****************************************************************************/
1043 
1044 
GUIVisualizationSizeSettings junctionSize
SUMOReal getExaggeration(const GUIVisualizationSettings &s, SUMOReal factor=20) const
return the drawing size including exaggeration and constantSize values
GUIVisualizationTextSettings junctionName
The link has green light, may pass.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:256
static const RGBColor BLUE
Definition: RGBColor.h:191
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.
GUIVisualizationTextSettings poiType
GUIVisualizationTextSettings streetName
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:196
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
void print(OutputDevice &dev, const std::string &name) const
bool showBTRange
Information whether the communication range shall be drawn.
GUIColorer laneColorer
The lane colorer.
SUMOReal laneWidthExaggeration
The lane exaggeration (upscale thickness)
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:195
T MAX2(T a, T b)
Definition: StdDefs.h:70
bool showLaneDirection
Whether to show direction indicators for lanes.
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.
static const RGBColor BLACK
Definition: RGBColor.h:197
const SVCPermissions SVCAll
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.
SUMOReal scale
information about a lane&#39;s width (temporary, used for a single view)
GUIVisualizationSizeSettings polySize
const RGBColor SUMO_color_ZIPPER(192, 128, 64)
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings edgeName
GUIVisualizationSizeSettings addSize
void save(OutputDevice &dev) const
int addColor(const T &color, const SUMOReal threshold, const std::string &name="")
static const RGBColor GREEN
Definition: RGBColor.h:190
static const RGBColor GREY
Definition: RGBColor.h:198
std::string name
The name of this setting.
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 getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
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:194
GUIVisualizationTextSettings drawLinkTLIndex
GUIColorer personColorer
The person colorer.
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
GUIVisualizationTextSettings internalJunctionName
GUIColorer junctionColorer
The junction colorer.
SUMOReal gridXSize
Information about the grid spacings.
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.
bool antialiase
Information whether antialiase shall be enabled.
is an arbitrary ship
vehicle is a moped
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0)
vehicle is a taxi
GUIVisualizationSizeSettings poiSize
vehicle is a bus
static const RGBColor YELLOW
Definition: RGBColor.h:192
static const RGBColor RED
Definition: RGBColor.h:189
GUIPropertyScheme< SUMOReal > GUIScaleScheme
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:193
The link has yellow light, may pass.
GUIVisualizationSizeSettings containerSize
The link is controlled by a tls which is off and blinks, has to brake.
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)
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:71
bool closeTag()
Closes the most recently opened tag.
#define SUMOReal
Definition: config.h:208
void save(OutputDevice &dev) const
Writes the settings into an output device.
GUIVisualizationSizeSettings vehicleSize
bool drawJunctionShape
whether the shape of the junction should be drawn
GUIPropertyScheme< RGBColor > GUIColorScheme
void print(OutputDevice &dev, const std::string &name) const
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)
SUMOReal laneMinSize
The minimum visual lane width for drawing.
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
GUIScaler laneScaler
The lane scaler.
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:234
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName