SUMO - Simulation of Urban MObility
GUIVisualizationSettings.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2018 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
17 // Stores the information about how to visualize structures
18 /****************************************************************************/
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 #include <map>
27 #include <vector>
29 #include "GUIPropertyScheme.h"
30 
31 // ===========================================================================
32 // static members
33 // ===========================================================================
35 
36 /* -------------------------------------------------------------------------
37  * color constants for link states
38  * ----------------------------------------------------------------------- */
39 const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0);
40 const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0);
41 const RGBColor SUMO_color_TL_RED(255, 0, 0);
42 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
43 const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0);
44 const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0);
45 const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0);
46 const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255);
47 const RGBColor SUMO_color_MAJOR(255, 255, 255);
48 const RGBColor SUMO_color_MINOR(51, 51, 51);
49 const RGBColor SUMO_color_EQUAL(128, 128, 128);
50 const RGBColor SUMO_color_STOP(128, 0, 128);
51 const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192);
52 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
53 const RGBColor SUMO_color_DEADEND(0, 0, 0);
54 
55 // -------------------------------------------------------------------------
56 // color constants for other objects
57 // -------------------------------------------------------------------------
58 
68 
69 // ===========================================================================
70 // member method definitions
71 // ===========================================================================
73  name(""),
74  netedit(_netedit),
75  angle(0),
76  dither(false),
77  backgroundColor(RGBColor::WHITE),
78  showGrid(false), gridXSize(100), gridYSize(100),
79  laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
80  showLinkRules(true), showRails(true),
81  edgeName(false, 50, RGBColor(255, 128, 0, 255)),
82  internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)),
83  cwaEdgeName(false, 50, RGBColor::MAGENTA),
84  streetName(false, 55, RGBColor::YELLOW),
85  hideConnectors(false),
86  laneWidthExaggeration(1),
87  laneMinSize(0),
88  showLaneDirection(false),
89  showSublanes(true),
90  spreadSuperposed(false),
91  vehicleQuality(0), showBlinker(true),
92  drawLaneChangePreference(false), drawMinGap(false),
93  showBTRange(false), vehicleSize(1),
94  vehicleName(false, 50, RGBColor(204, 153, 0, 255)),
95  personQuality(0),
96  personSize(1),
97  personName(false, 50, RGBColor(0, 153, 204, 255)),
98  containerQuality(0),
99  containerSize(1),
100  containerName(false, 50, RGBColor(0, 153, 204, 255)),
101  drawLinkTLIndex(false, 50, RGBColor(128, 128, 255, 255)),
102  drawLinkJunctionIndex(false, 50, RGBColor(128, 128, 255, 255)),
103  junctionName(false, 50, RGBColor(0, 255, 128, 255)),
104  internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
105  showLane2Lane(false),
106  drawJunctionShape(true),
107  drawCrossingsAndWalkingareas(true),
108  junctionSize(1),
109  addMode(0),
110  addSize(1),
111  addName(false, 50, RGBColor(255, 0, 128, 255)),
112  addFullName(false, 50, RGBColor(255, 0, 128, 255)),
113  poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
114  poiType(false, 50, RGBColor(255, 0, 128, 255)),
115  polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
116  polyType(false, 50, RGBColor(255, 0, 128, 255)),
117  showSizeLegend(true),
118  gaming(false),
119  selectionScale(1),
120  drawForSelecting(false) {
121 
122  if (netedit) {
124  } else {
126  }
127 }
128 
129 
130 void
133  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
134  scheme.addColor(RGBColor::GREY, 1, "sidewalk");
135  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
136  scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
137  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
138  scheme.addColor(RGBColor::BLACK, 5, "railway");
139  scheme.addColor(RGBColor(92, 92, 92), 6, "no passenger"); // paths, service roads etc
140  scheme.addColor(RGBColor::RED, 7, "closed"); // road closing
141  scheme.addColor(RGBColor::GREEN, 8, "connector"); // macro-connector
142  laneColorer.addScheme(scheme);
143  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
144  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
145  laneColorer.addScheme(scheme);
146  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
147  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
148  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
149  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
150  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
151  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
152  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
153  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
154  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
155  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
156  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
157  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
158  laneColorer.addScheme(scheme);
159  // ... traffic states ...
160  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
161  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
162  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
163  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
164  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
165  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
166  laneColorer.addScheme(scheme);
167  scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor(235, 235, 235));
168  scheme.addColor(RGBColor::GREEN, 0.25);
169  scheme.addColor(RGBColor::YELLOW, 0.5);
170  scheme.addColor(RGBColor::ORANGE, 0.75);
171  scheme.addColor(RGBColor::RED, 1.0);
172  laneColorer.addScheme(scheme);
173  scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor(235, 235, 235));
174  scheme.addColor(RGBColor::GREEN, 0.25);
175  scheme.addColor(RGBColor::YELLOW, 0.5);
176  scheme.addColor(RGBColor::ORANGE, 0.75);
177  scheme.addColor(RGBColor::RED, 1.0);
178  laneColorer.addScheme(scheme);
179  scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(235, 235, 235));
180  scheme.addColor(RGBColor::CYAN, (double)30);
181  scheme.addColor(RGBColor::GREEN, (double)100);
182  scheme.addColor(RGBColor::YELLOW, (double)200);
183  scheme.addColor(RGBColor::RED, (double)300);
184  laneColorer.addScheme(scheme);
185  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
186  scheme.addColor(RGBColor::BLUE, (double)5);
187  laneColorer.addScheme(scheme);
188  // ... emissions ...
189  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
190  scheme.addColor(RGBColor::RED, (double)(10. / 7.5 / 5.));
191  laneColorer.addScheme(scheme);
192  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
193  scheme.addColor(RGBColor::RED, (double)(0.05 / 7.5 / 2.));
194  laneColorer.addScheme(scheme);
195  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
196  scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 / 5.));
197  laneColorer.addScheme(scheme);
198  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
199  scheme.addColor(RGBColor::RED, (double)(.125 / 7.5 / 5.));
200  laneColorer.addScheme(scheme);
201  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
202  scheme.addColor(RGBColor::RED, (double)(.02 / 7.5 / 4.));
203  laneColorer.addScheme(scheme);
204  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
205  scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 * 100.));
206  laneColorer.addScheme(scheme);
207  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
208  scheme.addColor(RGBColor::RED, (double)100);
209  laneColorer.addScheme(scheme);
210  // ... weights (experimental) ...
211  scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
212  scheme.addColor(RGBColor::RED, (double)100);
213  scheme.setAllowsNegativeValues(true);
214  laneColorer.addScheme(scheme);
215  scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
216  scheme.addColor(RGBColor::YELLOW, (double)50);
217  scheme.addColor(RGBColor::GREEN, (double)100);
218  scheme.setAllowsNegativeValues(true);
219  laneColorer.addScheme(scheme);
220  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
221  scheme.addColor(RGBColor::RED, 0.25);
222  scheme.addColor(RGBColor::YELLOW, 0.5);
223  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
224  scheme.addColor(RGBColor::GREEN, (double)2.0);
225  scheme.addColor(RGBColor::BLUE, (double)4.0);
226  laneColorer.addScheme(scheme);
227  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
228  scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
229  scheme.addColor(RGBColor::RED, (double)100);
230  scheme.setAllowsNegativeValues(true);
231  laneColorer.addScheme(scheme);
232  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
233  scheme.addColor(RGBColor::RED, (double) - 20);
234  scheme.addColor(RGBColor::GREEN, (double)20);
235  scheme.setAllowsNegativeValues(true);
236  laneColorer.addScheme(scheme);
237  scheme = GUIColorScheme("by height at start", RGBColor::GREY);
238  scheme.addColor(RGBColor::BLUE, (double) - 10);
239  scheme.addColor(RGBColor::RED, (double)10);
240  scheme.addColor(RGBColor::YELLOW, (double)50);
241  scheme.addColor(RGBColor::GREEN, (double)100);
242  scheme.addColor(RGBColor::MAGENTA, (double)200);
243  scheme.setAllowsNegativeValues(true);
244  laneColorer.addScheme(scheme);
245  scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::GREY);
246  scheme.addColor(RGBColor::BLUE, (double) - 10);
247  scheme.addColor(RGBColor::RED, (double)10);
248  scheme.addColor(RGBColor::YELLOW, (double)50);
249  scheme.addColor(RGBColor::GREEN, (double)100);
250  scheme.addColor(RGBColor::MAGENTA, (double)200);
251  scheme.setAllowsNegativeValues(true);
252  laneColorer.addScheme(scheme);
253  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
254  scheme.addColor(RGBColor::YELLOW, (double) .1);
255  scheme.addColor(RGBColor::RED, (double) .3);
256  scheme.addColor(RGBColor::GREEN, (double) - .1);
257  scheme.addColor(RGBColor::BLUE, (double) - .3);
258  scheme.setAllowsNegativeValues(true);
259  laneColorer.addScheme(scheme);
260  scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
261  scheme.addColor(RGBColor::YELLOW, (double) .1);
262  scheme.addColor(RGBColor::RED, (double) .3);
263  scheme.addColor(RGBColor::GREEN, (double) - .1);
264  scheme.addColor(RGBColor::BLUE, (double) - .3);
265  scheme.setAllowsNegativeValues(true);
266  laneColorer.addScheme(scheme);
267  scheme = GUIColorScheme("by average speed", RGBColor::RED);
268  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
269  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
270  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
271  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
272  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
273  laneColorer.addScheme(scheme);
274  scheme = GUIColorScheme("by average relative speed ", RGBColor::RED);
275  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
276  scheme.addColor(RGBColor::GREEN, (double)(0.5));
277  scheme.addColor(RGBColor::CYAN, (double)(0.75));
278  scheme.addColor(RGBColor::BLUE, (double)(1));
279  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
280  laneColorer.addScheme(scheme);
281  scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED);
282  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
283  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
284  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
285  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
286  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
287  laneColorer.addScheme(scheme);
288  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
289  scheme.addColor(RGBColor::RED, (double)(1 / 7.5 / 5.));
290  laneColorer.addScheme(scheme);
291  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor(204, 204, 204));
292  scheme.addColor(RGBColor::GREEN, (double)1);
293  scheme.addColor(RGBColor::YELLOW, (double)10);
294  scheme.addColor(RGBColor::RED, (double)100);
295  laneColorer.addScheme(scheme);
296 
297 
299  vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
301  vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
302  vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
303  vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
304  vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
305  vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
306  vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
307  scheme = GUIColorScheme("by speed", RGBColor::RED);
308  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
309  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
310  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
311  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
312  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
313  vehicleColorer.addScheme(scheme);
314  scheme = GUIColorScheme("by action step", RGBColor::GREY);
315  scheme.addColor(RGBColor(0, 255, 0, 255), 1.);
316  scheme.addColor(RGBColor(80, 160, 80, 255), 2.);
317  vehicleColorer.addScheme(scheme);
318  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
319  scheme.addColor(RGBColor::CYAN, (double)30);
320  scheme.addColor(RGBColor::GREEN, (double)100);
321  scheme.addColor(RGBColor::YELLOW, (double)200);
322  scheme.addColor(RGBColor::RED, (double)300);
323  vehicleColorer.addScheme(scheme);
324  scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE);
325  scheme.addColor(RGBColor::CYAN, (double)25);
326  scheme.addColor(RGBColor::GREEN, (double)50);
327  scheme.addColor(RGBColor::YELLOW, (double)75);
328  scheme.addColor(RGBColor::RED, (double)100);
329  vehicleColorer.addScheme(scheme);
330  scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0");
331  scheme.addColor(RGBColor(189, 189, 179, 255), -180);
332  scheme.addColor(RGBColor(255, 255, 0, 255), -20);
333  scheme.addColor(RGBColor(255, 0, 0, 255), -0.001);
334  scheme.addColor(RGBColor(0, 0, 255, 255), 0.001);
335  scheme.addColor(RGBColor(0, 255, 255, 255), 20);
336  scheme.addColor(RGBColor(179, 189, 189, 255), 180);
337  scheme.setAllowsNegativeValues(true);
338  vehicleColorer.addScheme(scheme);
339  scheme = GUIColorScheme("by max speed", RGBColor::RED);
340  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
341  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
342  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
343  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
344  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
345  vehicleColorer.addScheme(scheme);
346  // ... emissions ...
347  scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN);
348  scheme.addColor(RGBColor::RED, (double)5.);
349  vehicleColorer.addScheme(scheme);
350  scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN);
351  scheme.addColor(RGBColor::RED, 0.05);
352  vehicleColorer.addScheme(scheme);
353  scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN);
354  scheme.addColor(RGBColor::RED, (double).005);
355  vehicleColorer.addScheme(scheme);
356  scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN);
357  scheme.addColor(RGBColor::RED, (double).125);
358  vehicleColorer.addScheme(scheme);
359  scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN);
360  scheme.addColor(RGBColor::RED, (double).02);
361  vehicleColorer.addScheme(scheme);
362  scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN);
363  scheme.addColor(RGBColor::RED, (double).005);
364  vehicleColorer.addScheme(scheme);
365  scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN);
366  scheme.addColor(RGBColor::RED, (double)100.);
367  vehicleColorer.addScheme(scheme);
368  scheme = GUIColorScheme("by reroute number", RGBColor::RED);
369  scheme.addColor(RGBColor::YELLOW, (double)1.);
370  scheme.addColor(RGBColor::WHITE, (double)10.);
371  vehicleColorer.addScheme(scheme);
372  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
373  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
374  vehicleColorer.addScheme(scheme);
375  scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0");
376  scheme.addColor(RGBColor(255, 0, 255, 255), -100, "opposite lane");
377  scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
378  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
379  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
380  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
381  scheme.setAllowsNegativeValues(true);
382  vehicleColorer.addScheme(scheme);
383  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0");
384  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
385  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
386  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
387  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
388  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
389  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
390  scheme.setAllowsNegativeValues(true);
391  vehicleColorer.addScheme(scheme);
392  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0");
393  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
394  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
395  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
396  scheme.setAllowsNegativeValues(true);
397  vehicleColorer.addScheme(scheme);
398  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
399  scheme.addColor(RGBColor::CYAN, (double)30);
400  scheme.addColor(RGBColor::GREEN, (double)100);
401  scheme.addColor(RGBColor::YELLOW, (double)200);
402  scheme.addColor(RGBColor::RED, (double)300);
403  vehicleColorer.addScheme(scheme);
404  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
405  scheme.addColor(RGBColor::RED, (double)5);
406  vehicleColorer.addScheme(scheme);
407  scheme = GUIColorScheme("by time loss", RGBColor::BLUE);
408  scheme.addColor(RGBColor::CYAN, (double)10);
409  scheme.addColor(RGBColor::GREEN, (double)60);
410  scheme.addColor(RGBColor::YELLOW, (double)180);
411  scheme.addColor(RGBColor::RED, (double)900);
412  vehicleColorer.addScheme(scheme);
414 
416  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::BLUE, "", true));
417  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLUE, "", true));
418  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::BLUE, "", true));
419  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::BLUE, "", true));
420  scheme = GUIColorScheme("by speed", RGBColor::RED);
421  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
422  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
423  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
424  personColorer.addScheme(scheme);
425  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true);
426  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
427  scheme.addColor(RGBColor::GREEN, (double)(2), "walking");
428  scheme.addColor(RGBColor::BLUE, (double)(3), "riding");
429  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
430  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for ride");
431  personColorer.addScheme(scheme);
432  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
433  scheme.addColor(RGBColor::CYAN, (double)30);
434  scheme.addColor(RGBColor::GREEN, (double)100);
435  scheme.addColor(RGBColor::YELLOW, (double)200);
436  scheme.addColor(RGBColor::RED, (double)300);
437  personColorer.addScheme(scheme);
438  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
439  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
440  personColorer.addScheme(scheme);
441  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
443 
445  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
447  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
448  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
449  scheme = GUIColorScheme("by speed", RGBColor::RED);
450  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
451  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
452  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
453  containerColorer.addScheme(scheme);
454  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true);
455  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
456  scheme.addColor(RGBColor::GREEN, (double)(2), "tranship"); // walking
457  scheme.addColor(RGBColor::BLUE, (double)(3), "transport");
458  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
459  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for transport");
460  containerColorer.addScheme(scheme);
461  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
462  scheme.addColor(RGBColor::CYAN, (double)30);
463  scheme.addColor(RGBColor::GREEN, (double)100);
464  scheme.addColor(RGBColor::YELLOW, (double)200);
465  scheme.addColor(RGBColor::RED, (double)300);
466  containerColorer.addScheme(scheme);
467  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
468  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
469  containerColorer.addScheme(scheme);
471 
473  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
474  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
475  junctionColorer.addScheme(scheme);
476  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
477  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
478  junctionColorer.addScheme(scheme);
479  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
480  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
481  scheme.addColor(RGBColor::YELLOW, 2, "priority");
482  scheme.addColor(RGBColor::RED, 3, "priority_stop");
483  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
484  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
485  scheme.addColor(RGBColor::GREY, 6, "district");
486  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
487  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
488  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
489  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper"); // light brown
490  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
491  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
492  junctionColorer.addScheme(scheme);
493  scheme = GUIColorScheme("by height", RGBColor::GREY);
494  scheme.addColor(RGBColor::BLUE, (double) - 10);
495  scheme.addColor(RGBColor::RED, (double)10);
496  scheme.addColor(RGBColor::YELLOW, (double)50);
497  scheme.addColor(RGBColor::GREEN, (double)100);
498  scheme.addColor(RGBColor::MAGENTA, (double)200);
499  scheme.setAllowsNegativeValues(true);
500  junctionColorer.addScheme(scheme);
501 
503  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
504  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
505  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
506  poiColorer.addScheme(scheme);
507  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
508 
510  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
511  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
512  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
513  polyColorer.addScheme(scheme);
514  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
515 
517  {
518  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
519  laneScaler.addScheme(scheme);
520  scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true);
521  scheme.addColor(5, 1, "selected");
522  laneScaler.addScheme(scheme);
523  // ... traffic states ...
524  scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
525  scheme.addColor(10, (double)(150.0 / 3.6));
526  laneScaler.addScheme(scheme);
527  scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0);
528  scheme.addColor(10, 0.95);
529  laneScaler.addScheme(scheme);
530  scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0);
531  scheme.addColor(10, 0.95);
532  laneScaler.addScheme(scheme);
533  scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0);
534  scheme.addColor(10, (double)300);
535  laneScaler.addScheme(scheme);
536  scheme = GUIScaleScheme("by lane number (streetwise)", 1);
537  scheme.addColor(10, (double)5);
538  laneScaler.addScheme(scheme);
539  // ... emissions ...
540  scheme = GUIScaleScheme("by CO2 emissions", 0);
541  scheme.addColor(10, (double)(10. / 7.5 / 5.));
542  laneScaler.addScheme(scheme);
543  scheme = GUIScaleScheme("by CO emissions", 0);
544  scheme.addColor(10, (double)(0.05 / 7.5 / 2.));
545  laneScaler.addScheme(scheme);
546  scheme = GUIScaleScheme("by PMx emissions", 0);
547  scheme.addColor(10, (double)(.005 / 7.5 / 5.));
548  laneScaler.addScheme(scheme);
549  scheme = GUIScaleScheme("by NOx emissions", 0);
550  scheme.addColor(10, (double)(.125 / 7.5 / 5.));
551  laneScaler.addScheme(scheme);
552  scheme = GUIScaleScheme("by HC emissions", 0);
553  scheme.addColor(10, (double)(.02 / 7.5 / 4.));
554  laneScaler.addScheme(scheme);
555  scheme = GUIScaleScheme("by fuel consumption", 0);
556  scheme.addColor(10, (double)(.005 / 7.5 * 100.));
557  laneScaler.addScheme(scheme);
558  scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0);
559  scheme.addColor(10, (double)100);
560  laneScaler.addScheme(scheme);
561  // ... weights (experimental) ...
562  scheme = GUIScaleScheme("by global travel time", 0);
563  scheme.addColor(10, (double)100);
564  scheme.setAllowsNegativeValues(true);
565  laneScaler.addScheme(scheme);
566  scheme = GUIScaleScheme("by global speed percentage", 0);
567  scheme.addColor(10, (double)100);
568  scheme.setAllowsNegativeValues(true);
569  laneScaler.addScheme(scheme);
570  scheme = GUIScaleScheme("by given length/geometrical length", 0);
571  scheme.addColor(10, (double)10.0);
572  laneScaler.addScheme(scheme);
573  scheme = GUIScaleScheme("by loaded weight", 0);
574  scheme.addColor(-1000, (double) - 1000);
575  scheme.addColor(1000, (double)1000);
576  scheme.setAllowsNegativeValues(true);
577  laneScaler.addScheme(scheme);
578  scheme = GUIScaleScheme("by priority", 1);
579  scheme.addColor(0.5, (double) - 20);
580  scheme.addColor(5, (double)20);
581  scheme.setAllowsNegativeValues(true);
582  laneScaler.addScheme(scheme);
583  scheme = GUIScaleScheme("by average speed", 0);
584  scheme.addColor(10, (double)(150.0 / 3.6));
585  laneScaler.addScheme(scheme);
586  scheme = GUIScaleScheme("by average relative speed", 0);
587  scheme.addColor(0.5, (double)(0.5));
588  scheme.addColor(2, (double)(1));
589  scheme.addColor(10, (double)(2));
590  laneScaler.addScheme(scheme);
591  scheme = GUIScaleScheme("by electricity consumption", 0);
592  scheme.addColor(10, (double)(1 / 7.5 / 5.));
593  laneScaler.addScheme(scheme);
594  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
595  scheme.addColor(1, (double)1);
596  scheme.addColor(10, (double)10);
597  scheme.addColor(50, (double)100);
598  laneScaler.addScheme(scheme);
599  }
600 
601 
603  edgeColorer.addScheme(GUIColorScheme("uniform", RGBColor(0, 0, 0, 0), "", true));
604  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
605  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
606  edgeColorer.addScheme(scheme);
607  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
608  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
609  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
610  edgeColorer.addScheme(scheme);
611  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
612  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
613  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
614  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
615  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
616  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
617  edgeColorer.addScheme(scheme);
618  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE);
619  scheme.addColor(RGBColor::RED, 0.95);
620  edgeColorer.addScheme(scheme);
621  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
622  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
623  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
624  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
625  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
626  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
627  edgeColorer.addScheme(scheme);
628  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
629  scheme.addColor(RGBColor::RED, (double)5000);
630  edgeColorer.addScheme(scheme);
631  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
632  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
633  scheme.addColor(RGBColor::GREEN, (double)(0.5));
634  scheme.addColor(RGBColor::CYAN, (double)(0.75));
635  scheme.addColor(RGBColor::BLUE, (double)(1));
636  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
637  edgeColorer.addScheme(scheme);
638  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED);
639  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
640  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
641  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
642  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
643  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
644  edgeColorer.addScheme(scheme);
645  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
646  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
647  scheme.addColor(RGBColor::RED, 1, "even");
648  edgeColorer.addScheme(scheme);
649  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true);
650  scheme.addColor(RGBColor::RED, 1, "jammed");
651  edgeColorer.addScheme(scheme);
652  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE);
653  scheme.addColor(RGBColor::RED, 0.95);
654  edgeColorer.addScheme(scheme);
655  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED);
656  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
657  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
658  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
659  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
660  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
661  edgeColorer.addScheme(scheme);
662  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE);
663  scheme.addColor(RGBColor::RED, (double)5000);
664  edgeColorer.addScheme(scheme);
665  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED);
666  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
667  scheme.addColor(RGBColor::GREEN, (double)(0.5));
668  scheme.addColor(RGBColor::CYAN, (double)(0.75));
669  scheme.addColor(RGBColor::BLUE, (double)(1));
670  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
671  edgeColorer.addScheme(scheme);
672  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY);
673  scheme.addColor(RGBColor::GREEN, (double)1);
674  scheme.addColor(RGBColor::YELLOW, (double)10);
675  scheme.addColor(RGBColor::RED, (double)100);
676  edgeColorer.addScheme(scheme);
677 
678 
680  {
681  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
682  GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true);
683  scheme.addColor(5, 1, "selected");
684  edgeScaler.addScheme(scheme);
685  scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
686  scheme.addColor(10, (double)(150.0 / 3.6));
687  edgeScaler.addScheme(scheme);
688  scheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0);
689  scheme.addColor(10, 0.95);
690  edgeScaler.addScheme(scheme);
691  scheme = GUIScaleScheme("by current speed (streetwise)", 0);
692  scheme.addColor(10, (double)(150.0 / 3.6));
693  edgeScaler.addScheme(scheme);
694  scheme = GUIScaleScheme("by current flow (streetwise)", 0);
695  scheme.addColor(20, (double)5000);
696  edgeScaler.addScheme(scheme);
697  scheme = GUIScaleScheme("by relative speed (streetwise)", 0);
698  scheme.addColor(20, (double)1);
699  edgeScaler.addScheme(scheme);
700  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
701  scheme.addColor(1, (double)1);
702  scheme.addColor(10, (double)10);
703  scheme.addColor(50, (double)100);
704  edgeScaler.addScheme(scheme);
705  }
706 
707 }
708 
709 
710 void
712  // init color schemes
713  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
714  scheme.addColor(RGBColor::GREY, 1, "Sidewalk");
715  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
716  scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
717  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
718  scheme.addColor(RGBColor::BLACK, 5, "railway");
719  scheme.addColor(RGBColor(92, 92, 92), 6, "no passenger"); // paths, service roads etc
720  laneColorer.addScheme(scheme);
721  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
722  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
723  laneColorer.addScheme(scheme);
724  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
725  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
726  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
727  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
728  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
729  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
730  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
731  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
732  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
733  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
734  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
735  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
736  laneColorer.addScheme(scheme);
737 
738  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
739  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
740  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
741  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
742  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
743  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
744  laneColorer.addScheme(scheme);
745 
746  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
747  scheme.addColor(RGBColor::BLUE, (double)5);
748  laneColorer.addScheme(scheme);
749 
750  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
751  scheme.addColor(RGBColor::RED, 0.25);
752  scheme.addColor(RGBColor::YELLOW, 0.5);
753  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
754  scheme.addColor(RGBColor::GREEN, (double)2.0);
755  scheme.addColor(RGBColor::BLUE, (double)4.0);
756  laneColorer.addScheme(scheme);
757  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
758 
759  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
760  scheme.addColor(RGBColor::RED, (double) - 20);
761  scheme.addColor(RGBColor::GREEN, (double)20);
762  scheme.setAllowsNegativeValues(true);
763  laneColorer.addScheme(scheme);
764  scheme = GUIColorScheme("by height at start", RGBColor::RED);
765  scheme.addColor(RGBColor::BLUE, (double) - 10);
766  scheme.addColor(RGBColor::YELLOW, (double)50);
767  scheme.addColor(RGBColor::GREEN, (double)100);
768  scheme.addColor(RGBColor::MAGENTA, (double)200);
769  scheme.setAllowsNegativeValues(true);
770  laneColorer.addScheme(scheme);
771  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
772  scheme.addColor(RGBColor::BLUE, (double) - 10);
773  scheme.addColor(RGBColor::YELLOW, (double)50);
774  scheme.addColor(RGBColor::GREEN, (double)100);
775  scheme.addColor(RGBColor::MAGENTA, (double)200);
776  scheme.setAllowsNegativeValues(true);
777  laneColorer.addScheme(scheme);
778  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
779  scheme.addColor(RGBColor::YELLOW, (double) .1);
780  scheme.addColor(RGBColor::RED, (double) .3);
781  scheme.addColor(RGBColor::GREEN, (double) - .1);
782  scheme.addColor(RGBColor::BLUE, (double) - .3);
783  scheme.setAllowsNegativeValues(true);
784  laneColorer.addScheme(scheme);
785  scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
786  scheme.addColor(RGBColor::YELLOW, (double) .1);
787  scheme.addColor(RGBColor::RED, (double) .3);
788  scheme.addColor(RGBColor::GREEN, (double) - .1);
789  scheme.addColor(RGBColor::BLUE, (double) - .3);
790  scheme.setAllowsNegativeValues(true);
791  laneColorer.addScheme(scheme);
792 
793  scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
794  scheme.addColor(RGBColor(204, 0, 0), 1, "shape not computed");
795  scheme.addColor(RGBColor(153, 0, 0), 2, "geometry points");
796  scheme.addColor(RGBColor::GREEN, 3, "custom shape");
797  junctionColorer.addScheme(scheme);
798  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
799  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
800  junctionColorer.addScheme(scheme);
801  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
802  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
803  scheme.addColor(RGBColor::YELLOW, 2, "priority");
804  scheme.addColor(RGBColor::RED, 3, "priority_stop");
805  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
806  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
807  scheme.addColor(RGBColor::GREY, 6, "district");
808  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
809  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
810  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
811  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper");
812  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
813  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
814  junctionColorer.addScheme(scheme);
815  scheme = GUIColorScheme("by height", RGBColor::GREY);
816  scheme.addColor(RGBColor::BLUE, (double) - 10);
817  scheme.addColor(RGBColor::RED, (double)10);
818  scheme.addColor(RGBColor::YELLOW, (double)50);
819  scheme.addColor(RGBColor::GREEN, (double)100);
820  scheme.addColor(RGBColor::MAGENTA, (double)200);
821  scheme.setAllowsNegativeValues(true);
822  junctionColorer.addScheme(scheme);
823 
825  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
826  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
827  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
828  poiColorer.addScheme(scheme);
829  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
830 
832  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
833  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
834  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
835  polyColorer.addScheme(scheme);
836  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
837 
839  {
840  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
841  laneScaler.addScheme(scheme);
842  }
843 
844  // dummy schemes
848 }
849 
850 
851 int
853  if (UseMesoSim) {
854  return edgeColorer.getActive();
855  }
856  return laneColorer.getActive();
857 }
858 
859 
860 int
862  if (UseMesoSim) {
863  return edgeScaler.getActive();
864  }
865  return laneScaler.getActive();
866 }
867 
868 
871  if (UseMesoSim) {
872  return edgeColorer.getScheme();
873  }
874  return laneColorer.getScheme();
875 }
876 
877 
880  if (UseMesoSim) {
881  return edgeScaler.getScheme();
882  }
883  return laneScaler.getScheme();
884 }
885 
886 void
891  dev.writeAttr("dither", dither);
892  dev.closeTag();
894  dev.writeAttr("backgroundColor", backgroundColor);
895  dev.writeAttr("showGrid", showGrid);
896  dev.writeAttr("gridXSize", gridXSize);
897  dev.writeAttr("gridYSize", gridYSize);
898  dev.closeTag();
899  // edges
901  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
902  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
903  dev.writeAttr("laneShowBorders", laneShowBorders);
904  dev.writeAttr("showBikeMarkings", showBikeMarkings);
905  dev.writeAttr("showLinkDecals", showLinkDecals);
906  dev.writeAttr("showLinkRules", showLinkRules);
907  dev.writeAttr("showRails", showRails);
908  dev.writeAttr("hideConnectors", hideConnectors);
909  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
910  dev.writeAttr("minSize", laneMinSize);
911  dev.writeAttr("showDirection", showLaneDirection);
912  dev.writeAttr("showSublanes", showSublanes);
913  dev.writeAttr("spreadSuperposed", spreadSuperposed);
914  dev.lf();
915  dev << " ";
916  edgeName.print(dev, "edgeName");
917  dev.lf();
918  dev << " ";
919  internalEdgeName.print(dev, "internalEdgeName");
920  dev.lf();
921  dev << " ";
922  cwaEdgeName.print(dev, "cwaEdgeName");
923  dev.lf();
924  dev << " ";
925  streetName.print(dev, "streetName");
926  laneColorer.save(dev);
927  laneScaler.save(dev);
928  edgeColorer.save(dev);
929  edgeScaler.save(dev);
930  dev.closeTag();
931  // vehicles
933  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
934  dev.writeAttr("vehicleQuality", vehicleQuality);
935  vehicleSize.print(dev, "vehicle");
936  dev.writeAttr("showBlinker", showBlinker);
937  dev.lf();
938  dev << " ";
939  vehicleName.print(dev, "vehicleName");
940  vehicleColorer.save(dev);
941  dev.closeTag();
942  // persons
944  dev.writeAttr("personMode", personColorer.getActive());
945  dev.writeAttr("personQuality", personQuality);
946  personSize.print(dev, "person");
947  dev.lf();
948  dev << " ";
949  personName.print(dev, "personName");
950  personColorer.save(dev);
951  dev.closeTag();
952  // containers
954  dev.writeAttr("containerMode", containerColorer.getActive());
955  dev.writeAttr("containerQuality", containerQuality);
956  containerSize.print(dev, "container");
957  dev.lf();
958  dev << " ";
959  containerName.print(dev, "containerName");
960  containerColorer.save(dev);
961  dev.closeTag();
962  // junctions
964  dev.writeAttr("junctionMode", junctionColorer.getActive());
965  dev.lf();
966  dev << " ";
967  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
968  dev.lf();
969  dev << " ";
970  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
971  dev.lf();
972  dev << " ";
973  junctionName.print(dev, "junctionName");
974  dev.lf();
975  dev << " ";
976  internalJunctionName.print(dev, "internalJunctionName");
977  dev.lf();
978  dev << " ";
979  dev.writeAttr("showLane2Lane", showLane2Lane);
980  dev.writeAttr("drawShape", drawJunctionShape);
981  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
982  junctionSize.print(dev, "junction");
983  junctionColorer.save(dev);
984  dev.closeTag();
985  // additionals
987  dev.writeAttr("addMode", addMode);
988  addSize.print(dev, "add");
989  addName.print(dev, "addName");
990  addFullName.print(dev, "addFullName");
991  dev.closeTag();
992  // pois
994  poiSize.print(dev, "poi");
995  poiName.print(dev, "poiName");
996  poiType.print(dev, "poiType");
997  poiColorer.save(dev);
998  dev.closeTag();
999  // polys
1001  polySize.print(dev, "poly");
1002  polyName.print(dev, "polyName");
1003  polyType.print(dev, "polyType");
1004  polyColorer.save(dev);
1005  dev.closeTag();
1006  // legend
1008  dev.writeAttr("showSizeLegend", showSizeLegend);
1009  dev.closeTag();
1010 
1011  dev.closeTag();
1012 }
1013 
1014 
1015 bool
1017  if (dither != v2.dither) {
1018  return false;
1019  }
1020  if (backgroundColor != v2.backgroundColor) {
1021  return false;
1022  }
1023  if (showGrid != v2.showGrid) {
1024  return false;
1025  }
1026  if (gridXSize != v2.gridXSize) {
1027  return false;
1028  }
1029  if (gridYSize != v2.gridYSize) {
1030  return false;
1031  }
1032 
1033  if (!(edgeColorer == v2.edgeColorer)) {
1034  return false;
1035  }
1036  if (!(edgeScaler == v2.edgeScaler)) {
1037  return false;
1038  }
1039  if (!(laneColorer == v2.laneColorer)) {
1040  return false;
1041  }
1042  if (!(laneScaler == v2.laneScaler)) {
1043  return false;
1044  }
1045  if (laneShowBorders != v2.laneShowBorders) {
1046  return false;
1047  }
1048  if (showBikeMarkings != v2.showBikeMarkings) {
1049  return false;
1050  }
1051  if (showLinkDecals != v2.showLinkDecals) {
1052  return false;
1053  }
1054  if (showLinkRules != v2.showLinkRules) {
1055  return false;
1056  }
1057  if (showRails != v2.showRails) {
1058  return false;
1059  }
1060  if (edgeName != v2.edgeName) {
1061  return false;
1062  }
1063  if (internalEdgeName != v2.internalEdgeName) {
1064  return false;
1065  }
1066  if (cwaEdgeName != v2.cwaEdgeName) {
1067  return false;
1068  }
1069  if (streetName != v2.streetName) {
1070  return false;
1071  }
1072  if (hideConnectors != v2.hideConnectors) {
1073  return false;
1074  }
1076  return false;
1077  }
1078  if (laneMinSize != v2.laneMinSize) {
1079  return false;
1080  }
1082  return false;
1083  }
1084  if (showSublanes != v2.showSublanes) {
1085  return false;
1086  }
1087  if (spreadSuperposed != v2.spreadSuperposed) {
1088  return false;
1089  }
1090  if (!(vehicleColorer == v2.vehicleColorer)) {
1091  return false;
1092  }
1093  if (vehicleQuality != v2.vehicleQuality) {
1094  return false;
1095  }
1096  if (vehicleSize != v2.vehicleSize) {
1097  return false;
1098  }
1099  if (showBlinker != v2.showBlinker) {
1100  return false;
1101  }
1103  return false;
1104  }
1105  if (drawMinGap != v2.drawMinGap) {
1106  return false;
1107  }
1108  if (showBTRange != v2.showBTRange) {
1109  return false;
1110  }
1111  if (vehicleName != v2.vehicleName) {
1112  return false;
1113  }
1114  if (!(personColorer == v2.personColorer)) {
1115  return false;
1116  }
1117  if (personQuality != v2.personQuality) {
1118  return false;
1119  }
1120  if (personSize != v2.personSize) {
1121  return false;
1122  }
1123  if (personName != v2.personName) {
1124  return false;
1125  }
1126  if (!(containerColorer == v2.containerColorer)) {
1127  return false;
1128  }
1129  if (containerQuality != v2.containerQuality) {
1130  return false;
1131  }
1132  if (containerSize != v2.containerSize) {
1133  return false;
1134  }
1135  if (containerName != v2.containerName) {
1136  return false;
1137  }
1138  if (!(junctionColorer == v2.junctionColorer)) {
1139  return false;
1140  }
1141  if (!(poiColorer == v2.poiColorer)) {
1142  return false;
1143  }
1144  if (!(polyColorer == v2.polyColorer)) {
1145  return false;
1146  }
1147  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
1148  return false;
1149  }
1151  return false;
1152  }
1153  if (junctionName != v2.junctionName) {
1154  return false;
1155  }
1157  return false;
1158  }
1159 
1160  if (showLane2Lane != v2.showLane2Lane) {
1161  return false;
1162  }
1163 
1165  return false;
1166  }
1167 
1169  return false;
1170  }
1171  if (junctionSize != v2.junctionSize) {
1172  return false;
1173  }
1174 
1175  if (addMode != v2.addMode) {
1176  return false;
1177  }
1178  if (addSize != v2.addSize) {
1179  return false;
1180  }
1181  if (addName != v2.addName) {
1182  return false;
1183  }
1184  if (addFullName != v2.addFullName) {
1185  return false;
1186  }
1187  if (poiSize != v2.poiSize) {
1188  return false;
1189  }
1190  if (poiName != v2.poiName) {
1191  return false;
1192  }
1193  if (poiType != v2.poiType) {
1194  return false;
1195  }
1196  if (polySize != v2.polySize) {
1197  return false;
1198  }
1199  if (polyName != v2.polyName) {
1200  return false;
1201  }
1202  if (polyType != v2.polyType) {
1203  return false;
1204  }
1205 
1206  if (showSizeLegend != v2.showSizeLegend) {
1207  return false;
1208  }
1209 
1210  return true;
1211 }
1212 
1213 
1214 double
1217  return (constantSize && !s.drawForSelecting) ? MAX2((double)exaggeration, exaggeration * factor / s.scale) : exaggeration;
1218 }
1219 
1220 
1221 const RGBColor&
1223  switch (ls) {
1228  case LINKSTATE_TL_RED:
1229  return SUMO_color_TL_RED;
1231  return SUMO_color_TL_REDYELLOW;
1240  case LINKSTATE_MAJOR:
1241  return SUMO_color_MAJOR;
1242  case LINKSTATE_MINOR:
1243  return SUMO_color_MINOR;
1244  case LINKSTATE_EQUAL:
1245  return SUMO_color_EQUAL;
1246  case LINKSTATE_STOP:
1247  return SUMO_color_STOP;
1248  case LINKSTATE_ALLWAY_STOP:
1249  return SUMO_color_ALLWAY_STOP;
1250  case LINKSTATE_ZIPPER:
1251  return SUMO_color_ZIPPER;
1252  case LINKSTATE_DEADEND:
1253  return SUMO_color_DEADEND;
1254  default:
1255  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1256  }
1257 }
1258 
1259 double
1260 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
1261  double viewAngle = objectAngle - angle;
1262  while (viewAngle < 0) {
1263  viewAngle += 360;
1264  }
1265  // fmod round towards zero which is not want we want for negative numbers
1266  viewAngle = fmod(viewAngle, 360);
1267  if (viewAngle > 90 && viewAngle < 270) {
1268  // avoid reading text on it's head
1269  objectAngle -= 180;
1270  }
1271  return objectAngle;
1272 }
1273 
1274 /****************************************************************************/
1275 
1276 
GUIVisualizationSizeSettings junctionSize
GUIVisualizationTextSettings junctionName
The link has green light, may pass.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:256
static const RGBColor BLUE
Definition: RGBColor.h:174
const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0)
const RGBColor SUMO_color_TL_RED(255, 0, 0)
bool showSizeLegend
Information whether the size legend shall be drawn.
double scale
information about a lane&#39;s width (temporary, used for a single view)
GUIVisualizationTextSettings poiType
GUIVisualizationTextSettings streetName
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIPropertyScheme< double > GUIScaleScheme
is a pedestrian
static const RGBColor SUMO_color_busStop_sign
color for busStops signs
bool showBlinker
Information whether vehicle blinkers shall be drawn.
static const RGBColor SUMO_color_chargingStation_charge
color for chargingStation during charging
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings personName
void setAllowsNegativeValues(bool value)
const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0)
GUIVisualizationTextSettings poiName
static const RGBColor WHITE
Definition: RGBColor.h:179
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
bool showBTRange
Information whether the communication range shall be drawn.
static const RGBColor SUMO_color_chargingStation_sign
color for chargingStation sign
GUIColorer laneColorer
The lane colorer.
GUIColorer containerColorer
The container colorer.
The link has green light, has to brake.
Stores the information about how to visualize structures.
This is an uncontrolled, minor link, has to stop.
vehicle is a bicycle
GUIColorer edgeColorer
The mesoscopic edge colorer.
vehicle is a small delivery vehicle
bool drawLaneChangePreference
Information whether the lane change preference shall be drawn.
bool showRails
Information whether rails shall be drawn.
GUIVisualizationTextSettings vehicleName
classes which (normally) do not drive on normal roads
static const RGBColor SUMO_color_chargingStation
color for chargingStations
const RGBColor SUMO_color_MINOR(51, 51, 51)
bool operator==(const GUIVisualizationSettings &vs2)
Comparison operator.
This is a dead end link.
static const RGBColor ORANGE
Definition: RGBColor.h:178
T MAX2(T a, T b)
Definition: StdDefs.h:76
bool showLaneDirection
Whether to show direction indicators for lanes.
void print(OutputDevice &dev, const std::string &name) const
GUIVisualizationTextSettings cwaEdgeName
const RGBColor SUMO_color_EQUAL(128, 128, 128)
bool laneShowBorders
Information whether lane borders shall be drawn.
This is an uncontrolled, right-before-left link.
bool netedit
Whether the settings are for Netedit.
static const RGBColor BLACK
Definition: RGBColor.h:180
const SVCPermissions SVCAll
all VClasses are allowed
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
The link is controlled by a tls which is off, not blinking, may pass.
This is an uncontrolled, all-way stop link.
bool dither
Information whether dithering shall be enabled.
const RGBColor SUMO_color_STOP(128, 0, 128)
This is an uncontrolled, zipper-merge link.
GUIVisualizationSettings(bool _netedit=false)
constructor
GUIVisualizationSizeSettings polySize
const RGBColor SUMO_color_ZIPPER(192, 128, 64)
GUIColorer vehicleColorer
The vehicle colorer.
GUIVisualizationTextSettings edgeName
GUIVisualizationSizeSettings addSize
GUIColorer poiColorer
The POI colorer.
int getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
void save(OutputDevice &dev) const
Writes the settings into an output device.
static const RGBColor GREEN
Definition: RGBColor.h:173
static const RGBColor GREY
Definition: RGBColor.h:181
int addColor(const T &color, const double threshold, const std::string &name="")
std::string name
The name of this setting.
double gridXSize
Information about the grid spacings.
double getTextAngle(double objectAngle) const
return an angle that is suitable for reading text aligned with the given angle (degrees) ...
const RGBColor SUMO_color_MAJOR(255, 255, 255)
static const RGBColor SUMO_color_containerStop_sign
color for containerStop signs
GUIVisualizationTextSettings internalEdgeName
This is an uncontrolled, minor link, has to brake.
bool drawMinGap
Information whether the minimum gap shall be drawn.
int addMode
The additional structures visualization scheme.
const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192)
GUIVisualizationTextSettings polyType
bool showSublanes
Whether to show sublane boundaries.
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0)
static const RGBColor MAGENTA
Definition: RGBColor.h:177
GUIVisualizationTextSettings drawLinkTLIndex
GUIColorer polyColorer
The polygon colorer.
GUIColorer personColorer
The person colorer.
GUIVisualizationTextSettings internalJunctionName
GUIColorer junctionColorer
The junction colorer.
double angle
The current view rotation angle.
static const RGBColor SUMO_color_E3Entry
color for Entrys
static const RGBColor SUMO_color_busStop
color for busStops
double laneMinSize
The minimum visual lane width for drawing.
GUIScaler edgeScaler
The mesoscopic edge scaler.
vehicle is a passenger car (a "normal" car)
GUIScaleScheme & getLaneEdgeScaleScheme()
Returns the current lane (edge) scaling schme.
int containerQuality
The quality of container drawing.
RGBColor backgroundColor
The background color to use.
is an arbitrary ship
static const RGBColor SUMO_color_containerStop
color for containerStops
vehicle is a moped
const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0)
vehicle is a taxi
void print(OutputDevice &dev, const std::string &name) const
GUIVisualizationSizeSettings poiSize
vehicle is a bus
static const RGBColor YELLOW
Definition: RGBColor.h:175
static const RGBColor RED
named colors
Definition: RGBColor.h:172
const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0)
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
static const RGBColor CYAN
Definition: RGBColor.h:176
The link has yellow light, may pass.
GUIVisualizationSizeSettings containerSize
The link is controlled by a tls which is off and blinks, has to brake.
GUIVisualizationTextSettings addFullName
The link has red light (must brake)
const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255)
This is an uncontrolled, major link, may pass.
GUIVisualizationSizeSettings personSize
int personQuality
The quality of person drawing.
bool showGrid
Information whether a grid shall be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0)
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
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:64
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static const RGBColor SUMO_color_E3Exit
color for Exits
GUIVisualizationSizeSettings vehicleSize
bool drawJunctionShape
whether the shape of the junction should be drawn
GUIPropertyScheme< RGBColor > GUIColorScheme
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
int vehicleQuality
The quality of vehicle drawing.
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
The link has yellow light, has to brake anyway.
const RGBColor SUMO_color_DEADEND(0, 0, 0)
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
GUIScaler laneScaler
The lane scaler.
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
void save(OutputDevice &dev) const
static const RGBColor & getLinkColor(const LinkState &ls)
map from LinkState to color constants
The link has red light (must brake) but indicates upcoming green.
GUIVisualizationTextSettings drawLinkJunctionIndex
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
void lf()
writes a line feed if applicable
Definition: OutputDevice.h:234
bool showBikeMarkings
Information whether bicycle lane marking shall be drawn.
void initNeteditDefaults()
init default settings
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName