SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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-2015 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 // ===========================================================================
45 #ifdef HAVE_INTERNAL
46 bool GUIVisualizationSettings::UseMesoSim = false;
47 #endif
48 
49 // ===========================================================================
50 // member method definitions
51 // ===========================================================================
53  : name(""), antialiase(false), dither(false),
54  backgroundColor(RGBColor::WHITE),
55  showGrid(false), gridXSize(100), gridYSize(100),
56  laneShowBorders(false), showLinkDecals(true), showRails(true),
57  edgeName(false, 50, RGBColor(255, 128, 0, 255)),
58  internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)),
59  cwaEdgeName(false, 50, RGBColor::MAGENTA),
60  streetName(false, 55, RGBColor::YELLOW),
61  hideConnectors(false), laneWidthExaggeration(1),
62  vehicleQuality(0), showBlinker(true),
63  drawLaneChangePreference(false), drawMinGap(false),
64  showBTRange(false), vehicleSize(1),
65  vehicleName(false, 50, RGBColor(204, 153, 0, 255)),
66  personQuality(0),
67  personSize(1),
68  personName(false, 50, RGBColor(0, 153, 204, 255)),
69  containerQuality(0),
70  containerSize(1),
71  containerName(false, 50, RGBColor(0, 153, 204, 255)),
72  drawLinkTLIndex(false), drawLinkJunctionIndex(false),
73  junctionName(false, 50, RGBColor(0, 255, 128, 255)),
74  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
75  showLane2Lane(false), drawJunctionShape(true), addMode(0),
76  addSize(1),
77  addName(false, 50, RGBColor(255, 0, 128, 255)),
78  poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
79  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
80  showSizeLegend(true),
81  gaming(false),
82  selectionScale(1),
83  drawForSelecting(false) {
85  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
86  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
87  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
88  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
89  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
90  laneColorer.addScheme(scheme);
91  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
92  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
93  laneColorer.addScheme(scheme);
94  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
95  scheme.addColor(RGBColor(10, 10, 10), (SUMOReal)SVC_PASSENGER, "passenger");
96  scheme.addColor(RGBColor(128, 128, 128), (SUMOReal)SVC_PEDESTRIAN, "pedestrian");
97  scheme.addColor(RGBColor(80, 80, 80), (SUMOReal)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
98  scheme.addColor(RGBColor(192, 66, 44), (SUMOReal)SVC_BICYCLE, "bicycle");
99  scheme.addColor(RGBColor(40, 100, 40), (SUMOReal)SVC_BUS, "bus");
100  scheme.addColor(RGBColor(166, 147, 26), (SUMOReal)SVC_TAXI, "taxi");
101  scheme.addColor(RGBColor::BLACK, (SUMOReal)(SVCAll & ~SVC_PEDESTRIAN), "disallow_pedestrian");
102  scheme.addColor(RGBColor(64, 0, 86), (SUMOReal)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED)), "disallow_apedestrian_bicycle");
103  scheme.addColor(RGBColor(150, 200, 200), (SUMOReal)SVC_SHIP, "waterway");
104  scheme.addColor(RGBColor::GREEN, (SUMOReal)SVCAll, "all");
105  laneColorer.addScheme(scheme);
106  // ... traffic states ...
107  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
108  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
109  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
110  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
111  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
112  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
113  laneColorer.addScheme(scheme);
114  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor::BLUE);
115  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
116  laneColorer.addScheme(scheme);
117  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor::BLUE);
118  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
119  laneColorer.addScheme(scheme);
120  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor::BLUE);
121  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
122  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
123  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
124  scheme.addColor(RGBColor::RED, (SUMOReal)300);
125  laneColorer.addScheme(scheme);
126  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
127  scheme.addColor(RGBColor::BLUE, (SUMOReal)5);
128  laneColorer.addScheme(scheme);
129  // ... emissions ...
130  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
131  scheme.addColor(RGBColor::RED, (SUMOReal)(10. / 7.5 / 5.));
132  laneColorer.addScheme(scheme);
133  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
134  scheme.addColor(RGBColor::RED, (SUMOReal)(0.05 / 7.5 / 2.));
135  laneColorer.addScheme(scheme);
136  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
137  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 / 5.));
138  laneColorer.addScheme(scheme);
139  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
140  scheme.addColor(RGBColor::RED, (SUMOReal)(.125 / 7.5 / 5.));
141  laneColorer.addScheme(scheme);
142  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
143  scheme.addColor(RGBColor::RED, (SUMOReal)(.02 / 7.5 / 4.));
144  laneColorer.addScheme(scheme);
145  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
146  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 * 100.));
147  laneColorer.addScheme(scheme);
148  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
149  scheme.addColor(RGBColor::RED, (SUMOReal)100);
150  laneColorer.addScheme(scheme);
151  // ... weights (experimental) ...
152  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
153  scheme.addColor(RGBColor::RED, (SUMOReal)100);
154  scheme.setAllowsNegativeValues(true);
155  laneColorer.addScheme(scheme);
156  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
157  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
158  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
159  scheme.setAllowsNegativeValues(true);
160  laneColorer.addScheme(scheme);
161  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
162  scheme.addColor(RGBColor::RED, (SUMOReal)0.25);
163  scheme.addColor(RGBColor::YELLOW, (SUMOReal)0.5);
164  scheme.addColor(RGBColor(179, 179, 179, 255), (SUMOReal)1.0);
165  scheme.addColor(RGBColor::GREEN, (SUMOReal)2.0);
166  scheme.addColor(RGBColor::BLUE, (SUMOReal)4.0);
167  laneColorer.addScheme(scheme);
168  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
169  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
170  scheme.addColor(RGBColor::RED, (SUMOReal)100);
171  scheme.setAllowsNegativeValues(true);
172  laneColorer.addScheme(scheme);
173  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
174  scheme.addColor(RGBColor::RED, (SUMOReal) - 20);
175  scheme.addColor(RGBColor::GREEN, (SUMOReal)20);
176  scheme.setAllowsNegativeValues(true);
177  laneColorer.addScheme(scheme);
178  scheme = GUIColorScheme("by height at start", RGBColor::RED);
179  scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10);
180  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
181  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
182  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200);
183  scheme.setAllowsNegativeValues(true);
184  laneColorer.addScheme(scheme);
185  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
186  scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10);
187  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
188  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
189  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200);
190  scheme.setAllowsNegativeValues(true);
191  laneColorer.addScheme(scheme);
192  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
193  scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1);
194  scheme.addColor(RGBColor::RED, (SUMOReal) .3);
195  scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1);
196  scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3);
197  scheme.setAllowsNegativeValues(true);
198  laneColorer.addScheme(scheme);
199  scheme = GUIColorScheme("by inclination at segment start", RGBColor::GREY);
200  scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1);
201  scheme.addColor(RGBColor::RED, (SUMOReal) .3);
202  scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1);
203  scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3);
204  scheme.setAllowsNegativeValues(true);
205  laneColorer.addScheme(scheme);
206  scheme = GUIColorScheme("by average speed", RGBColor::RED);
207  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
208  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
209  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
210  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
211  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
212  laneColorer.addScheme(scheme);
213  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED);
214  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25));
215  scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5));
216  scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75));
217  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1));
218  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25));
219  laneColorer.addScheme(scheme);
220 
221 
223  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
225  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
226  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
227  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
228  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
229  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
230  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
231  scheme = GUIColorScheme("by speed", RGBColor::RED);
232  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
233  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
234  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
235  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
236  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
237  vehicleColorer.addScheme(scheme);
238  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
239  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
240  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
241  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
242  scheme.addColor(RGBColor::RED, (SUMOReal)300);
243  vehicleColorer.addScheme(scheme);
244  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0");
245  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
246  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
247  scheme.addColor(RGBColor(255, 0, 0, 255), -1);
248  scheme.addColor(RGBColor(0, 0, 255, 255), 1);
249  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
250  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
251  scheme.setAllowsNegativeValues(true);
252  vehicleColorer.addScheme(scheme);
253  scheme = GUIColorScheme("by max 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  vehicleColorer.addScheme(scheme);
260  // ... emissions ...
261  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
262  scheme.addColor(RGBColor::RED, (SUMOReal)5.);
263  vehicleColorer.addScheme(scheme);
264  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
265  scheme.addColor(RGBColor::RED, (SUMOReal)0.05);
266  vehicleColorer.addScheme(scheme);
267  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
268  scheme.addColor(RGBColor::RED, (SUMOReal).005);
269  vehicleColorer.addScheme(scheme);
270  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
271  scheme.addColor(RGBColor::RED, (SUMOReal).125);
272  vehicleColorer.addScheme(scheme);
273  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
274  scheme.addColor(RGBColor::RED, (SUMOReal).02);
275  vehicleColorer.addScheme(scheme);
276  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
277  scheme.addColor(RGBColor::RED, (SUMOReal).005);
278  vehicleColorer.addScheme(scheme);
279  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
280  scheme.addColor(RGBColor::RED, (SUMOReal)100.);
281  vehicleColorer.addScheme(scheme);
282  scheme = GUIColorScheme("by reroute number", RGBColor::RED);
283  scheme.addColor(RGBColor::YELLOW, (SUMOReal)1.);
284  scheme.addColor(RGBColor::WHITE, (SUMOReal)10.);
285  vehicleColorer.addScheme(scheme);
286  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
287  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
288  vehicleColorer.addScheme(scheme);
289  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0");
290  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
291  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
292  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
293  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
294  scheme.setAllowsNegativeValues(true);
295  vehicleColorer.addScheme(scheme);
296  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0");
297  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
298  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
299  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
300  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
301  scheme.setAllowsNegativeValues(true);
302  vehicleColorer.addScheme(scheme);
303  scheme = GUIColorScheme("by time gap", RGBColor(255, 255, 0, 255), "0");
304  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
305  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
306  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
307  scheme.setAllowsNegativeValues(true);
308  vehicleColorer.addScheme(scheme);
310 
312  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::YELLOW, "", true));
314  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::YELLOW, "", true));
315  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
316  scheme = GUIColorScheme("by speed", RGBColor::RED);
317  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6));
318  scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6));
319  scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6));
320  personColorer.addScheme(scheme);
321  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
322  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding
323  scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped
324  scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride
325  personColorer.addScheme(scheme);
326  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
327  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
328  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
329  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
330  scheme.addColor(RGBColor::RED, (SUMOReal)300);
331  personColorer.addScheme(scheme);
332  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
333  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
334  personColorer.addScheme(scheme);
335  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
337 
339  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
341  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
342  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
343  scheme = GUIColorScheme("by speed", RGBColor::RED);
344  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6));
345  scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6));
346  scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6));
347  containerColorer.addScheme(scheme);
348  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
349  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding
350  scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped
351  scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride
352  containerColorer.addScheme(scheme);
353  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
354  scheme.addColor(RGBColor::CYAN, (SUMOReal)30);
355  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
356  scheme.addColor(RGBColor::YELLOW, (SUMOReal)200);
357  scheme.addColor(RGBColor::RED, (SUMOReal)300);
358  containerColorer.addScheme(scheme);
359  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
360  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
361  containerColorer.addScheme(scheme);
363 
365  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
366  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
367  junctionColorer.addScheme(scheme);
368  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
369  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
370  junctionColorer.addScheme(scheme);
371  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
372  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
373  scheme.addColor(RGBColor::YELLOW, 2, "priority");
374  scheme.addColor(RGBColor::RED, 3, "priority_stop");
375  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
376  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
377  scheme.addColor(RGBColor::GREY, 6, "district");
378  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
379  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
380  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
381  junctionColorer.addScheme(scheme);
382 
383 
385  {
386  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
387  laneScaler.addScheme(scheme);
388  scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true);
389  scheme.addColor(5, 1, "selected");
390  laneScaler.addScheme(scheme);
391  // ... traffic states ...
392  scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
393  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
394  laneScaler.addScheme(scheme);
395  scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0);
396  scheme.addColor(10, (SUMOReal)0.95);
397  laneScaler.addScheme(scheme);
398  scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0);
399  scheme.addColor(10, (SUMOReal)0.95);
400  laneScaler.addScheme(scheme);
401  scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0);
402  scheme.addColor(10, (SUMOReal)300);
403  laneScaler.addScheme(scheme);
404  scheme = GUIScaleScheme("by lane number (streetwise)", 1);
405  scheme.addColor(10, (SUMOReal)5);
406  laneScaler.addScheme(scheme);
407  // ... emissions ...
408  scheme = GUIScaleScheme("by CO2 emissions", 0);
409  scheme.addColor(10, (SUMOReal)(10. / 7.5 / 5.));
410  laneScaler.addScheme(scheme);
411  scheme = GUIScaleScheme("by CO emissions", 0);
412  scheme.addColor(10, (SUMOReal)(0.05 / 7.5 / 2.));
413  laneScaler.addScheme(scheme);
414  scheme = GUIScaleScheme("by PMx emissions", 0);
415  scheme.addColor(10, (SUMOReal)(.005 / 7.5 / 5.));
416  laneScaler.addScheme(scheme);
417  scheme = GUIScaleScheme("by NOx emissions", 0);
418  scheme.addColor(10, (SUMOReal)(.125 / 7.5 / 5.));
419  laneScaler.addScheme(scheme);
420  scheme = GUIScaleScheme("by HC emissions", 0);
421  scheme.addColor(10, (SUMOReal)(.02 / 7.5 / 4.));
422  laneScaler.addScheme(scheme);
423  scheme = GUIScaleScheme("by fuel consumption", 0);
424  scheme.addColor(10, (SUMOReal)(.005 / 7.5 * 100.));
425  laneScaler.addScheme(scheme);
426  scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0);
427  scheme.addColor(10, (SUMOReal)100);
428  laneScaler.addScheme(scheme);
429  // ... weights (experimental) ...
430  scheme = GUIScaleScheme("by global travel time", 0);
431  scheme.addColor(10, (SUMOReal)100);
432  scheme.setAllowsNegativeValues(true);
433  laneScaler.addScheme(scheme);
434  scheme = GUIScaleScheme("by global speed percentage", 0);
435  scheme.addColor(10, (SUMOReal)100);
436  scheme.setAllowsNegativeValues(true);
437  laneScaler.addScheme(scheme);
438  scheme = GUIScaleScheme("by given length/geometrical length", 0);
439  scheme.addColor(10, (SUMOReal)10.0);
440  laneScaler.addScheme(scheme);
441  scheme = GUIScaleScheme("by loaded weight", 0);
442  scheme.addColor(-1000, (SUMOReal) - 1000);
443  scheme.addColor(1000, (SUMOReal)1000);
444  scheme.setAllowsNegativeValues(true);
445  laneScaler.addScheme(scheme);
446  scheme = GUIScaleScheme("by priority", 1);
447  scheme.addColor(0.5, (SUMOReal) - 20);
448  scheme.addColor(5, (SUMOReal)20);
449  scheme.setAllowsNegativeValues(true);
450  laneScaler.addScheme(scheme);
451  scheme = GUIScaleScheme("by average speed", 0);
452  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
453  laneScaler.addScheme(scheme);
454  scheme = GUIScaleScheme("by average relative speed", 0);
455  scheme.addColor(0.5, (SUMOReal)(0.5));
456  scheme.addColor(2, (SUMOReal)(1));
457  scheme.addColor(10, (SUMOReal)(2));
458  laneScaler.addScheme(scheme);
459  }
460 
461 
462 #ifdef HAVE_INTERNAL
463  edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true));
465  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
466  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
467  edgeColorer.addScheme(scheme);
468  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
469  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
470  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
471  edgeColorer.addScheme(scheme);
472  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
473  scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6));
474  scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6));
475  scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6));
476  scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6));
477  scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6));
478  edgeColorer.addScheme(scheme);
479  scheme = GUIColorScheme("by current occupancy (streetwise)", RGBColor::BLUE);
480  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
481  edgeColorer.addScheme(scheme);
482  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
483  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
484  edgeColorer.addScheme(scheme);
485  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
486  scheme.addColor(RGBColor::RED, (SUMOReal)5000);
487  edgeColorer.addScheme(scheme);
488  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
489  scheme.addColor(RGBColor::BLUE, (SUMOReal)1);
490  edgeColorer.addScheme(scheme);
491 
493  {
494  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
495  GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true);
496  scheme.addColor(5, 1, "selected");
497  edgeScaler.addScheme(scheme);
498  scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
499  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
500  edgeScaler.addScheme(scheme);
501  scheme = GUIScaleScheme("by current occupancy (streetwise)", 0);
502  scheme.addColor(10, (SUMOReal)0.95);
503  edgeScaler.addScheme(scheme);
504  scheme = GUIScaleScheme("by current speed (streetwise)", 0);
505  scheme.addColor(10, (SUMOReal)(150.0 / 3.6));
506  edgeScaler.addScheme(scheme);
507  scheme = GUIScaleScheme("by current flow (streetwise)", 0);
508  scheme.addColor(20, (SUMOReal)5000);
509  edgeScaler.addScheme(scheme);
510  scheme = GUIScaleScheme("by relative speed (streetwise)", 0);
511  scheme.addColor(20, (SUMOReal)1);
512  edgeScaler.addScheme(scheme);
513  }
514 #endif
515 
516 }
517 
518 
519 size_t
521 #ifdef HAVE_INTERNAL
522  if (UseMesoSim) {
523  return edgeColorer.getActive();
524  }
525 #endif
526  return laneColorer.getActive();
527 }
528 
529 
530 size_t
532 #ifdef HAVE_INTERNAL
533  if (UseMesoSim) {
534  return edgeScaler.getActive();
535  }
536 #endif
537  return laneScaler.getActive();
538 }
539 
540 
543 #ifdef HAVE_INTERNAL
544  if (UseMesoSim) {
545  return edgeColorer.getScheme();
546  }
547 #endif
548  return laneColorer.getScheme();
549 }
550 
551 
554 #ifdef HAVE_INTERNAL
555  if (UseMesoSim) {
556  return edgeScaler.getScheme();
557  }
558 #endif
559  return laneScaler.getScheme();
560 }
561 
562 void
567  dev.writeAttr("antialiase", antialiase);
568  dev.writeAttr("dither", dither);
569  dev.closeTag();
571  dev.writeAttr("backgroundColor", backgroundColor);
572  dev.writeAttr("showGrid", showGrid);
573  dev.writeAttr("gridXSize", gridXSize);
574  dev.writeAttr("gridYSize", gridYSize);
575  dev.closeTag();
576  // edges
578  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
579  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
580  dev.writeAttr("laneShowBorders", laneShowBorders);
581  dev.writeAttr("showLinkDecals", showLinkDecals);
582  dev.writeAttr("showRails", showRails);
583  dev.writeAttr("hideConnectors", hideConnectors);
584  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
585  dev.lf();
586  dev << " ";
587  edgeName.print(dev, "edgeName");
588  dev.lf();
589  dev << " ";
590  internalEdgeName.print(dev, "internalEdgeName");
591  dev.lf();
592  dev << " ";
593  cwaEdgeName.print(dev, "cwaEdgeName");
594  dev.lf();
595  dev << " ";
596  streetName.print(dev, "streetName");
597  laneColorer.save(dev);
598  laneScaler.save(dev);
599 #ifdef HAVE_INTERNAL
600  edgeColorer.save(dev);
601  edgeScaler.save(dev);
602 #endif
603  dev.closeTag();
604  // vehicles
606  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
607  dev.writeAttr("vehicleQuality", vehicleQuality);
608  vehicleSize.print(dev, "vehicle");
609  dev.writeAttr("showBlinker", showBlinker);
610  dev.lf();
611  dev << " ";
612  vehicleName.print(dev, "vehicleName");
613  vehicleColorer.save(dev);
614  dev.closeTag();
615  // persons
617  dev.writeAttr("personMode", personColorer.getActive());
618  dev.writeAttr("personQuality", personQuality);
619  personSize.print(dev, "person");
620  dev.lf();
621  dev << " ";
622  personName.print(dev, "personName");
623  personColorer.save(dev);
624  dev.closeTag();
625  // persons
627  dev.writeAttr("containerMode", containerColorer.getActive());
628  dev.writeAttr("containerQuality", containerQuality);
629  personSize.print(dev, "container");
630  dev.lf();
631  dev << " ";
632  personName.print(dev, "containerName");
633  personColorer.save(dev);
634  dev.closeTag();
635  // junctions
637  dev.writeAttr("junctionMode", junctionColorer.getActive());
638  dev.writeAttr("drawLinkTLIndex", drawLinkTLIndex);
639  dev.writeAttr("drawLinkJunctionIndex", drawLinkJunctionIndex);
640  dev.lf();
641  dev << " ";
642  junctionName.print(dev, "junctionName");
643  dev.lf();
644  dev << " ";
645  internalJunctionName.print(dev, "internalJunctionName");
646  dev.lf();
647  dev << " ";
648  dev.writeAttr("showLane2Lane", showLane2Lane);
649  dev.writeAttr("drawShape", drawJunctionShape);
650  junctionColorer.save(dev);
651  dev.closeTag();
652  // additionals
654  dev.writeAttr("addMode", addMode);
655  addSize.print(dev, "add");
656  addName.print(dev, "addName");
657  dev.closeTag();
658  // pois
660  poiSize.print(dev, "poi");
661  poiName.print(dev, "poiName");
662  dev.closeTag();
663  // polys
665  polySize.print(dev, "poly");
666  polyName.print(dev, "polyName");
667  dev.closeTag();
668  // legend
670  dev.writeAttr("showSizeLegend", showSizeLegend);
671  dev.closeTag();
672 
673  dev.closeTag();
674 }
675 
676 
677 bool
679  if (antialiase != v2.antialiase) {
680  return false;
681  }
682  if (dither != v2.dither) {
683  return false;
684  }
685  if (backgroundColor != v2.backgroundColor) {
686  return false;
687  }
688  if (showGrid != v2.showGrid) {
689  return false;
690  }
691  if (gridXSize != v2.gridXSize) {
692  return false;
693  }
694  if (gridYSize != v2.gridYSize) {
695  return false;
696  }
697 
698 #ifdef HAVE_INTERNAL
699  if (!(edgeColorer == v2.edgeColorer)) {
700  return false;
701  }
702  if (!(edgeScaler == v2.edgeScaler)) {
703  return false;
704  }
705 #endif
706  if (!(laneColorer == v2.laneColorer)) {
707  return false;
708  }
709  if (!(laneScaler == v2.laneScaler)) {
710  return false;
711  }
712  if (laneShowBorders != v2.laneShowBorders) {
713  return false;
714  }
715  if (showLinkDecals != v2.showLinkDecals) {
716  return false;
717  }
718  if (showRails != v2.showRails) {
719  return false;
720  }
721  if (edgeName != v2.edgeName) {
722  return false;
723  }
725  return false;
726  }
727  if (cwaEdgeName != v2.cwaEdgeName) {
728  return false;
729  }
730  if (streetName != v2.streetName) {
731  return false;
732  }
733  if (hideConnectors != v2.hideConnectors) {
734  return false;
735  }
737  return false;
738  }
739  if (!(vehicleColorer == v2.vehicleColorer)) {
740  return false;
741  }
742  if (vehicleQuality != v2.vehicleQuality) {
743  return false;
744  }
745  if (vehicleSize != v2.vehicleSize) {
746  return false;
747  }
748  if (showBlinker != v2.showBlinker) {
749  return false;
750  }
752  return false;
753  }
754  if (drawMinGap != v2.drawMinGap) {
755  return false;
756  }
757  if (showBTRange != v2.showBTRange) {
758  return false;
759  }
760  if (vehicleName != v2.vehicleName) {
761  return false;
762  }
763  if (!(personColorer == v2.personColorer)) {
764  return false;
765  }
766  if (personQuality != v2.personQuality) {
767  return false;
768  }
769  if (personSize != v2.personSize) {
770  return false;
771  }
772  if (personName != v2.personName) {
773  return false;
774  }
775  if (!(containerColorer == v2.containerColorer)) {
776  return false;
777  }
779  return false;
780  }
781  if (containerSize != v2.containerSize) {
782  return false;
783  }
784  if (containerName != v2.containerName) {
785  return false;
786  }
787  if (!(junctionColorer == v2.junctionColorer)) {
788  return false;
789  }
790  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
791  return false;
792  }
794  return false;
795  }
796  if (junctionName != v2.junctionName) {
797  return false;
798  }
800  return false;
801  }
802 
803  if (showLane2Lane != v2.showLane2Lane) {
804  return false;
805  }
806 
808  return false;
809  }
810 
811  if (addMode != v2.addMode) {
812  return false;
813  }
814  if (addSize != v2.addSize) {
815  return false;
816  }
817  if (addName != v2.addName) {
818  return false;
819  }
820  if (poiSize != v2.poiSize) {
821  return false;
822  }
823  if (poiName != v2.poiName) {
824  return false;
825  }
826  if (polySize != v2.polySize) {
827  return false;
828  }
829  if (polyName != v2.polyName) {
830  return false;
831  }
832 
833  if (showSizeLegend != v2.showSizeLegend) {
834  return false;
835  }
836 
837  return true;
838 }
839 
840 
841 SUMOReal
844  return (constantSize && !s.drawForSelecting) ? MAX2((SUMOReal)exaggeration, exaggeration * 20 / s.scale) : exaggeration;
845 }
846 
847 /****************************************************************************/
848 
849 
GUIVisualizationTextSettings junctionName
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:257
static const RGBColor BLUE
Definition: RGBColor.h:191
bool showSizeLegend
Information whether the size legend shall be drawn.
GUIVisualizationTextSettings streetName
float laneWidthExaggeration
The lane exaggeration (upscale thickness)
size_t getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
is a pedestrian
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings personName
bool drawLinkTLIndex
Information whether a link's tls index shall be drawn.
void setAllowsNegativeValues(bool value)
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.
GUIColorer containerColorer
The container colorer.
Stores the information about how to visualize structures.
vehicle is a bicycle
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
bool operator==(const GUIVisualizationSettings &vs2)
Comparison operator.
static const RGBColor ORANGE
Definition: RGBColor.h:195
T MAX2(T a, T b)
Definition: StdDefs.h:74
GUIVisualizationTextSettings cwaEdgeName
bool laneShowBorders
Information whether lane borders shall be drawn.
static const RGBColor BLACK
Definition: RGBColor.h:197
const SVCPermissions SVCAll
bool dither
Information whether dithering shall be enabled.
SUMOReal scale
information about a lane's width (temporary, used for a single view)
GUIVisualizationSizeSettings polySize
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings edgeName
GUIVisualizationSizeSettings addSize
void save(OutputDevice &dev) const
static const RGBColor GREEN
Definition: RGBColor.h:190
static const RGBColor GREY
Definition: RGBColor.h:198
std::string name
The name of this setting.
GUIVisualizationTextSettings internalEdgeName
bool drawMinGap
Information whether the minimum gap shall be drawn.
int addMode
The additional structures visualization scheme.
static const RGBColor MAGENTA
Definition: RGBColor.h:194
GUIColorer personColorer
The person colorer.
GUIVisualizationTextSettings internalJunctionName
GUIColorer junctionColorer
The junction colorer.
SUMOReal gridXSize
Information about the grid spacings.
unsigned int addColor(const T &color, const SUMOReal threshold, const std::string &name="")
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
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
float exaggeration
The size exaggeration (upscale)
GUIPropertyScheme< SUMOReal > GUIScaleScheme
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
static const RGBColor CYAN
Definition: RGBColor.h:193
GUIVisualizationSizeSettings containerSize
bool drawLinkJunctionIndex
Information whether a link's junction index shall be drawn.
GUIVisualizationSizeSettings personSize
int personQuality
The quality of person drawing.
bool showGrid
Information whether a grid shall be shown.
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:218
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.
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
GUIScaler laneScaler
The lane scaler.
size_t getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
SUMOReal getExaggeration(const GUIVisualizationSettings &s) const
return the drawing size including exaggeration and constantSize values
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
void lf()
writes a line feed if applicable
Definition: OutputDevice.h:235
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName