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