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-sim.org/
12 // Copyright (C) 2001-2013 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 "GUIColorScheme.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  streetName(false, 55, RGBColor::YELLOW),
60  hideConnectors(false), laneWidthExaggeration(1),
61  vehicleQuality(0), minVehicleSize(1), vehicleExaggeration(1), showBlinker(true),
62  drawLaneChangePreference(false), drawMinGap(false),
63  vehicleName(false, 50, RGBColor(204, 153, 0, 255)),
64  personQuality(0), minPersonSize(1), personExaggeration(1),
65  personName(false, 50, RGBColor(0, 153, 204, 255)),
66  drawLinkTLIndex(false), drawLinkJunctionIndex(false),
67  junctionName(false, 50, RGBColor(0, 255, 128, 255)),
68  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
69  showLane2Lane(false), addMode(0), minAddSize(1), addExaggeration(1),
70  addName(false, 50, RGBColor(255, 0, 128, 255)),
71  minPOISize(0), poiExaggeration(1), poiName(false, 50, RGBColor(255, 0, 128, 255)),
72  minPolySize(0), polyExaggeration(1), polyName(false, 50, RGBColor(255, 0, 128, 255)),
73  showSizeLegend(true),
74  gaming(false),
75  selectionScale(1) {
77  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
78  laneColorer.addScheme(scheme);
79  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(179, 179, 179, 255), "unselected", true);
80  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
81  laneColorer.addScheme(scheme);
82  scheme = GUIColorScheme("by vclass", RGBColor::BLACK, "all", true);
83  scheme.addColor(RGBColor(0, 26, 128, 255), 1, "public");
84  laneColorer.addScheme(scheme);
85  // ... traffic states ...
86  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
87  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
88  laneColorer.addScheme(scheme);
89  scheme = GUIColorScheme("by current occupancy (lanewise)", RGBColor::BLUE);
90  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
91  laneColorer.addScheme(scheme);
92  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor::GREEN);
93  scheme.addColor(RGBColor::RED, (SUMOReal)200);
94  laneColorer.addScheme(scheme);
95  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
96  scheme.addColor(RGBColor::BLUE, (SUMOReal)5);
97  laneColorer.addScheme(scheme);
98  // ... emissions ...
99  scheme = GUIColorScheme("by CO2 emissions (HBEFA)", RGBColor::GREEN);
100  scheme.addColor(RGBColor::RED, (SUMOReal)(10. / 7.5 / 5.));
101  laneColorer.addScheme(scheme);
102  scheme = GUIColorScheme("by CO emissions (HBEFA)", RGBColor::GREEN);
103  scheme.addColor(RGBColor::RED, (SUMOReal)(0.05 / 7.5 / 2.));
104  laneColorer.addScheme(scheme);
105  scheme = GUIColorScheme("by PMx emissions (HBEFA)", RGBColor::GREEN);
106  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 / 5.));
107  laneColorer.addScheme(scheme);
108  scheme = GUIColorScheme("by NOx emissions (HBEFA)", RGBColor::GREEN);
109  scheme.addColor(RGBColor::RED, (SUMOReal)(.125 / 7.5 / 5.));
110  laneColorer.addScheme(scheme);
111  scheme = GUIColorScheme("by HC emissions (HBEFA)", RGBColor::GREEN);
112  scheme.addColor(RGBColor::RED, (SUMOReal)(.02 / 7.5 / 4.));
113  laneColorer.addScheme(scheme);
114  scheme = GUIColorScheme("by fuel consumption (HBEFA)", RGBColor::GREEN);
115  scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 * 100.));
116  laneColorer.addScheme(scheme);
117  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
118  scheme.addColor(RGBColor::RED, (SUMOReal)100);
119  laneColorer.addScheme(scheme);
120  // ... weights (experimental) ...
121  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
122  scheme.addColor(RGBColor::RED, (SUMOReal)100);
123  scheme.setAllowsNegativeValues(true);
124  laneColorer.addScheme(scheme);
125  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
126  scheme.addColor(RGBColor::YELLOW, (SUMOReal)50);
127  scheme.addColor(RGBColor::GREEN, (SUMOReal)100);
128  scheme.setAllowsNegativeValues(true);
129  laneColorer.addScheme(scheme);
130  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
131  scheme.addColor(RGBColor::RED, (SUMOReal)0.25);
132  scheme.addColor(RGBColor::YELLOW, (SUMOReal)0.5);
133  scheme.addColor(RGBColor(179, 179, 179, 255), (SUMOReal)1.0);
134  scheme.addColor(RGBColor::GREEN, (SUMOReal)2.0);
135  scheme.addColor(RGBColor::BLUE, (SUMOReal)4.0);
136  laneColorer.addScheme(scheme);
137 
138 
140  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
142  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
143  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
144  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
145  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
146  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
147  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
148  scheme = GUIColorScheme("by speed", RGBColor::RED);
149  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
150  vehicleColorer.addScheme(scheme);
151  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
152  scheme.addColor(RGBColor::RED, (SUMOReal)(5 * 60));
153  vehicleColorer.addScheme(scheme);
154  scheme = GUIColorScheme("by time since last lanechange", RGBColor::WHITE);
155  scheme.addColor(RGBColor::GREY, (SUMOReal)(5 * 60));
156  vehicleColorer.addScheme(scheme);
157  scheme = GUIColorScheme("by max speed", RGBColor::RED);
158  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
159  vehicleColorer.addScheme(scheme);
160  // ... emissions ...
161  scheme = GUIColorScheme("by CO2 emissions (HBEFA)", RGBColor::GREEN);
162  scheme.addColor(RGBColor::RED, (SUMOReal)5.);
163  vehicleColorer.addScheme(scheme);
164  scheme = GUIColorScheme("by CO emissions (HBEFA)", RGBColor::GREEN);
165  scheme.addColor(RGBColor::RED, (SUMOReal)0.05);
166  vehicleColorer.addScheme(scheme);
167  scheme = GUIColorScheme("by PMx emissions (HBEFA)", RGBColor::GREEN);
168  scheme.addColor(RGBColor::RED, (SUMOReal).005);
169  vehicleColorer.addScheme(scheme);
170  scheme = GUIColorScheme("by NOx emissions (HBEFA)", RGBColor::GREEN);
171  scheme.addColor(RGBColor::RED, (SUMOReal).125);
172  vehicleColorer.addScheme(scheme);
173  scheme = GUIColorScheme("by HC emissions (HBEFA)", RGBColor::GREEN);
174  scheme.addColor(RGBColor::RED, (SUMOReal).02);
175  vehicleColorer.addScheme(scheme);
176  scheme = GUIColorScheme("by fuel consumption (HBEFA)", RGBColor::GREEN);
177  scheme.addColor(RGBColor::RED, (SUMOReal).005);
178  vehicleColorer.addScheme(scheme);
179  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
180  scheme.addColor(RGBColor::RED, (SUMOReal)100.);
181  vehicleColorer.addScheme(scheme);
182  scheme = GUIColorScheme("by reroute number", RGBColor::RED);
183  scheme.addColor(RGBColor::YELLOW, (SUMOReal)1.);
184  scheme.addColor(RGBColor::WHITE, (SUMOReal)10.);
185  vehicleColorer.addScheme(scheme);
186  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
187  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
188  vehicleColorer.addScheme(scheme);
189 
191  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::YELLOW, "", true));
193  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::YELLOW, "", true));
194  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
195  scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking
196  scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding
197  scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped
198  scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride
199  personColorer.addScheme(scheme);
200  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
201  scheme.addColor(RGBColor::RED, (SUMOReal)(5 * 60));
202  personColorer.addScheme(scheme);
203 
204 
205 #ifdef HAVE_INTERNAL
206  edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true));
208  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(179, 179, 179, 255), "unselected", true);
209  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
210  edgeColorer.addScheme(scheme);
211  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
212  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
213  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
214  edgeColorer.addScheme(scheme);
215  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
216  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
217  edgeColorer.addScheme(scheme);
218  scheme = GUIColorScheme("by current occupancy (streetwise)", RGBColor::BLUE);
219  scheme.addColor(RGBColor::RED, (SUMOReal)0.95);
220  edgeColorer.addScheme(scheme);
221  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
222  scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6));
223  edgeColorer.addScheme(scheme);
224  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
225  scheme.addColor(RGBColor::RED, (SUMOReal)5000);
226  edgeColorer.addScheme(scheme);
227  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
228  scheme.addColor(RGBColor::BLUE, (SUMOReal)1);
229  edgeColorer.addScheme(scheme);
230 #endif
231 
233  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
234  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
235  junctionColorer.addScheme(scheme);
236 }
237 
238 
239 size_t
241 #ifdef HAVE_INTERNAL
242  if (UseMesoSim) {
243  return edgeColorer.getActive();
244  }
245 #endif
246  return laneColorer.getActive();
247 }
248 
249 
252 #ifdef HAVE_INTERNAL
253  if (UseMesoSim) {
254  return edgeColorer.getScheme();
255  }
256 #endif
257  return laneColorer.getScheme();
258 }
259 
260 
261 void
263  dev << "<viewsettings>\n";
264  dev << " <scheme name=\"" << name << "\">\n";
265  dev << " <opengl antialiase=\"" << antialiase << "\" dither=\"" << dither << "\"/>\n";
266  dev << " <background backgroundColor=\"" << backgroundColor << "\"\n"
267  << " showGrid=\"" << showGrid
268  << "\" gridXSize=\"" << gridXSize << "\" gridYSize=\"" << gridYSize << "\"/>\n";
269  dev << " <edges laneEdgeMode=\"" << getLaneEdgeMode()
270  << "\" laneShowBorders=\"" << laneShowBorders
271  << "\" showLinkDecals=\"" << showLinkDecals
272  << "\" showRails=\"" << showRails
273  << "\" hideConnectors=\"" << hideConnectors << "\"\n"
274  << " " << edgeName.print("edgeName") << "\n"
275  << " " << internalEdgeName.print("internalEdgeName") << "\n"
276  << " " << streetName.print("streetName") << ">\n";
277  laneColorer.save(dev);
278 #ifdef HAVE_INTERNAL
279  edgeColorer.save(dev);
280 #endif
281  dev << " </edges>\n";
282 
283  dev << " <vehicles vehicleMode=\"" << vehicleColorer.getActive()
284  << "\" vehicleQuality=\"" << vehicleQuality
285  << "\" minVehicleSize=\"" << minVehicleSize
286  << "\" vehicleExaggeration=\"" << vehicleExaggeration
287  << "\" showBlinker=\"" << showBlinker << "\"\n"
288  << " " << vehicleName.print("vehicleName")
289  << ">\n";
290  vehicleColorer.save(dev);
291  dev << " </vehicles>\n";
292  dev << " <persons personMode=\"" << personColorer.getActive()
293  << "\" personQuality=\"" << personQuality
294  << "\" minPersonSize=\"" << minPersonSize
295  << "\" personExaggeration=\"" << personExaggeration
296  << " " << personName.print("personName")
297  << ">\n";
298  personColorer.save(dev);
299  dev << " </persons>\n";
300 
301  dev << " <junctions junctionMode=\"" << junctionColorer.getActive()
302  << "\" drawLinkTLIndex=\"" << drawLinkTLIndex
303  << "\" drawLinkJunctionIndex=\"" << drawLinkJunctionIndex << "\"\n"
304  << " " << junctionName.print("junctionName") << "\n"
305  << " " << internalJunctionName.print("internalJunctionName") << "\n"
306  << " showLane2Lane=\"" << showLane2Lane << "\">\n";
307  junctionColorer.save(dev);
308  dev << " </junctions>\n";
309 
310  dev << " <additionals addMode=\"" << addMode
311  << "\" minAddSize=\"" << minAddSize
312  << "\" addExaggeration=\"" << addExaggeration << "\"\n"
313  << " " << addName.print("addName")
314  << "/>\n";
315 
316  dev << " <pois poiExaggeration=\"" << poiExaggeration
317  << "\" minPOISize=\"" << minPOISize << "\"\n"
318  << " " << poiName.print("poiName")
319  << "/>\n";
320 
321  dev << " <polys polyExaggeration=\"" << polyExaggeration
322  << "\" minPolySize=\"" << minPolySize << "\"\n"
323  << " " << polyName.print("polyName")
324  << "/>\n";
325 
326  dev << " <legend showSizeLegend=\"" << showSizeLegend << "\"/>\n";
327  dev << " </scheme>\n";
328  dev << "</viewsettings>\n";
329 }
330 
331 
332 bool
334  if (antialiase != v2.antialiase) {
335  return false;
336  }
337  if (dither != v2.dither) {
338  return false;
339  }
340  if (backgroundColor != v2.backgroundColor) {
341  return false;
342  }
343  if (showGrid != v2.showGrid) {
344  return false;
345  }
346  if (gridXSize != v2.gridXSize) {
347  return false;
348  }
349  if (gridYSize != v2.gridYSize) {
350  return false;
351  }
352 
353 #ifdef HAVE_INTERNAL
354  if (!(edgeColorer == v2.edgeColorer)) {
355  return false;
356  }
357 #endif
358  if (!(laneColorer == v2.laneColorer)) {
359  return false;
360  }
361  if (laneShowBorders != v2.laneShowBorders) {
362  return false;
363  }
364  if (showLinkDecals != v2.showLinkDecals) {
365  return false;
366  }
367  if (showRails != v2.showRails) {
368  return false;
369  }
370  if (edgeName != v2.edgeName) {
371  return false;
372  }
374  return false;
375  }
376  if (streetName != v2.streetName) {
377  return false;
378  }
379  if (hideConnectors != v2.hideConnectors) {
380  return false;
381  }
383  return false;
384  }
385  if (!(vehicleColorer == v2.vehicleColorer)) {
386  return false;
387  }
388  if (vehicleQuality != v2.vehicleQuality) {
389  return false;
390  }
391  if (minVehicleSize != v2.minVehicleSize) {
392  return false;
393  }
395  return false;
396  }
397  if (showBlinker != v2.showBlinker) {
398  return false;
399  }
401  return false;
402  }
403  if (drawMinGap != v2.drawMinGap) {
404  return false;
405  }
406  if (vehicleName != v2.vehicleName) {
407  return false;
408  }
409  if (!(personColorer == v2.personColorer)) {
410  return false;
411  }
412  if (personQuality != v2.personQuality) {
413  return false;
414  }
415  if (minPersonSize != v2.minPersonSize) {
416  return false;
417  }
419  return false;
420  }
421  if (personName != v2.personName) {
422  return false;
423  }
424  if (!(junctionColorer == v2.junctionColorer)) {
425  return false;
426  }
427  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
428  return false;
429  }
431  return false;
432  }
433  if (junctionName != v2.junctionName) {
434  return false;
435  }
437  return false;
438  }
439 
440  if (showLane2Lane != v2.showLane2Lane) {
441  return false;
442  }
443 
444  if (addMode != v2.addMode) {
445  return false;
446  }
447  if (minAddSize != v2.minAddSize) {
448  return false;
449  }
450  if (addExaggeration != v2.addExaggeration) {
451  return false;
452  }
453  if (addName != v2.addName) {
454  return false;
455  }
456 
457  if (minPOISize != v2.minPOISize) {
458  return false;
459  }
460  if (poiExaggeration != v2.poiExaggeration) {
461  return false;
462  }
463  if (poiName != v2.poiName) {
464  return false;
465  }
466 
467  if (minPolySize != v2.minPolySize) {
468  return false;
469  }
471  return false;
472  }
473  if (polyName != v2.polyName) {
474  return false;
475  }
476 
477  if (showSizeLegend != v2.showSizeLegend) {
478  return false;
479  }
480 
481  return true;
482 }
483 
484 
485 
486 /****************************************************************************/
487