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