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, 0, 255), -3, "-3");
377  scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
378  scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
379  scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
380  scheme.setAllowsNegativeValues(true);
381  vehicleColorer.addScheme(scheme);
382  scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0");
383  scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
384  scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
385  scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
386  scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
387  scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
388  scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
389  scheme.setAllowsNegativeValues(true);
390  vehicleColorer.addScheme(scheme);
391  scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0");
392  scheme.addColor(RGBColor(179, 179, 179, 255), -1);
393  scheme.addColor(RGBColor(0, 255, 255, 255), 1);
394  scheme.addColor(RGBColor(0, 0, 255, 255), 2);
395  scheme.setAllowsNegativeValues(true);
396  vehicleColorer.addScheme(scheme);
397  scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
398  scheme.addColor(RGBColor::CYAN, (double)30);
399  scheme.addColor(RGBColor::GREEN, (double)100);
400  scheme.addColor(RGBColor::YELLOW, (double)200);
401  scheme.addColor(RGBColor::RED, (double)300);
402  vehicleColorer.addScheme(scheme);
403  scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN);
404  scheme.addColor(RGBColor::RED, (double)5);
405  vehicleColorer.addScheme(scheme);
406  scheme = GUIColorScheme("by time loss", RGBColor::BLUE);
407  scheme.addColor(RGBColor::CYAN, (double)10);
408  scheme.addColor(RGBColor::GREEN, (double)60);
409  scheme.addColor(RGBColor::YELLOW, (double)180);
410  scheme.addColor(RGBColor::RED, (double)900);
411  vehicleColorer.addScheme(scheme);
413 
415  personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::BLUE, "", true));
416  personColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLUE, "", true));
417  personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::BLUE, "", true));
418  personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::BLUE, "", true));
419  scheme = GUIColorScheme("by speed", RGBColor::RED);
420  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
421  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
422  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
423  personColorer.addScheme(scheme);
424  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true);
425  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
426  scheme.addColor(RGBColor::GREEN, (double)(2), "walking");
427  scheme.addColor(RGBColor::BLUE, (double)(3), "riding");
428  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
429  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for ride");
430  personColorer.addScheme(scheme);
431  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
432  scheme.addColor(RGBColor::CYAN, (double)30);
433  scheme.addColor(RGBColor::GREEN, (double)100);
434  scheme.addColor(RGBColor::YELLOW, (double)200);
435  scheme.addColor(RGBColor::RED, (double)300);
436  personColorer.addScheme(scheme);
437  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
438  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
439  personColorer.addScheme(scheme);
440  personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
442 
444  containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
446  containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
447  containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
448  scheme = GUIColorScheme("by speed", RGBColor::RED);
449  scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
450  scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
451  scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
452  containerColorer.addScheme(scheme);
453  scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true);
454  scheme.addColor(RGBColor::RED, (double)(1), "stopped");
455  scheme.addColor(RGBColor::GREEN, (double)(2), "tranship"); // walking
456  scheme.addColor(RGBColor::BLUE, (double)(3), "transport");
457  scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
458  scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for transport");
459  containerColorer.addScheme(scheme);
460  scheme = GUIColorScheme("by waiting time", RGBColor::BLUE);
461  scheme.addColor(RGBColor::CYAN, (double)30);
462  scheme.addColor(RGBColor::GREEN, (double)100);
463  scheme.addColor(RGBColor::YELLOW, (double)200);
464  scheme.addColor(RGBColor::RED, (double)300);
465  containerColorer.addScheme(scheme);
466  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
467  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
468  containerColorer.addScheme(scheme);
470 
472  scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
473  scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
474  junctionColorer.addScheme(scheme);
475  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
476  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
477  junctionColorer.addScheme(scheme);
478  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
479  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
480  scheme.addColor(RGBColor::YELLOW, 2, "priority");
481  scheme.addColor(RGBColor::RED, 3, "priority_stop");
482  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
483  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
484  scheme.addColor(RGBColor::GREY, 6, "district");
485  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
486  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
487  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
488  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper"); // light brown
489  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
490  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
491  junctionColorer.addScheme(scheme);
492  scheme = GUIColorScheme("by height", RGBColor::GREY);
493  scheme.addColor(RGBColor::BLUE, (double) - 10);
494  scheme.addColor(RGBColor::RED, (double)10);
495  scheme.addColor(RGBColor::YELLOW, (double)50);
496  scheme.addColor(RGBColor::GREEN, (double)100);
497  scheme.addColor(RGBColor::MAGENTA, (double)200);
498  scheme.setAllowsNegativeValues(true);
499  junctionColorer.addScheme(scheme);
500 
502  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
503  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
504  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
505  poiColorer.addScheme(scheme);
506  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
507 
509  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
510  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
511  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
512  polyColorer.addScheme(scheme);
513  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
514 
516  {
517  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
518  laneScaler.addScheme(scheme);
519  scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true);
520  scheme.addColor(5, 1, "selected");
521  laneScaler.addScheme(scheme);
522  // ... traffic states ...
523  scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
524  scheme.addColor(10, (double)(150.0 / 3.6));
525  laneScaler.addScheme(scheme);
526  scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0);
527  scheme.addColor(10, 0.95);
528  laneScaler.addScheme(scheme);
529  scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0);
530  scheme.addColor(10, 0.95);
531  laneScaler.addScheme(scheme);
532  scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0);
533  scheme.addColor(10, (double)300);
534  laneScaler.addScheme(scheme);
535  scheme = GUIScaleScheme("by lane number (streetwise)", 1);
536  scheme.addColor(10, (double)5);
537  laneScaler.addScheme(scheme);
538  // ... emissions ...
539  scheme = GUIScaleScheme("by CO2 emissions", 0);
540  scheme.addColor(10, (double)(10. / 7.5 / 5.));
541  laneScaler.addScheme(scheme);
542  scheme = GUIScaleScheme("by CO emissions", 0);
543  scheme.addColor(10, (double)(0.05 / 7.5 / 2.));
544  laneScaler.addScheme(scheme);
545  scheme = GUIScaleScheme("by PMx emissions", 0);
546  scheme.addColor(10, (double)(.005 / 7.5 / 5.));
547  laneScaler.addScheme(scheme);
548  scheme = GUIScaleScheme("by NOx emissions", 0);
549  scheme.addColor(10, (double)(.125 / 7.5 / 5.));
550  laneScaler.addScheme(scheme);
551  scheme = GUIScaleScheme("by HC emissions", 0);
552  scheme.addColor(10, (double)(.02 / 7.5 / 4.));
553  laneScaler.addScheme(scheme);
554  scheme = GUIScaleScheme("by fuel consumption", 0);
555  scheme.addColor(10, (double)(.005 / 7.5 * 100.));
556  laneScaler.addScheme(scheme);
557  scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0);
558  scheme.addColor(10, (double)100);
559  laneScaler.addScheme(scheme);
560  // ... weights (experimental) ...
561  scheme = GUIScaleScheme("by global travel time", 0);
562  scheme.addColor(10, (double)100);
563  scheme.setAllowsNegativeValues(true);
564  laneScaler.addScheme(scheme);
565  scheme = GUIScaleScheme("by global speed percentage", 0);
566  scheme.addColor(10, (double)100);
567  scheme.setAllowsNegativeValues(true);
568  laneScaler.addScheme(scheme);
569  scheme = GUIScaleScheme("by given length/geometrical length", 0);
570  scheme.addColor(10, (double)10.0);
571  laneScaler.addScheme(scheme);
572  scheme = GUIScaleScheme("by loaded weight", 0);
573  scheme.addColor(-1000, (double) - 1000);
574  scheme.addColor(1000, (double)1000);
575  scheme.setAllowsNegativeValues(true);
576  laneScaler.addScheme(scheme);
577  scheme = GUIScaleScheme("by priority", 1);
578  scheme.addColor(0.5, (double) - 20);
579  scheme.addColor(5, (double)20);
580  scheme.setAllowsNegativeValues(true);
581  laneScaler.addScheme(scheme);
582  scheme = GUIScaleScheme("by average speed", 0);
583  scheme.addColor(10, (double)(150.0 / 3.6));
584  laneScaler.addScheme(scheme);
585  scheme = GUIScaleScheme("by average relative speed", 0);
586  scheme.addColor(0.5, (double)(0.5));
587  scheme.addColor(2, (double)(1));
588  scheme.addColor(10, (double)(2));
589  laneScaler.addScheme(scheme);
590  scheme = GUIScaleScheme("by electricity consumption", 0);
591  scheme.addColor(10, (double)(1 / 7.5 / 5.));
592  laneScaler.addScheme(scheme);
593  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
594  scheme.addColor(1, (double)1);
595  scheme.addColor(10, (double)10);
596  scheme.addColor(50, (double)100);
597  laneScaler.addScheme(scheme);
598  }
599 
600 
602  edgeColorer.addScheme(GUIColorScheme("uniform", RGBColor(0, 0, 0, 0), "", true));
603  scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
604  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
605  edgeColorer.addScheme(scheme);
606  scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
607  scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
608  scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
609  edgeColorer.addScheme(scheme);
610  scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
611  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
612  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
613  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
614  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
615  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
616  edgeColorer.addScheme(scheme);
617  scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE);
618  scheme.addColor(RGBColor::RED, 0.95);
619  edgeColorer.addScheme(scheme);
620  scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED);
621  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
622  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
623  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
624  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
625  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
626  edgeColorer.addScheme(scheme);
627  scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE);
628  scheme.addColor(RGBColor::RED, (double)5000);
629  edgeColorer.addScheme(scheme);
630  scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED);
631  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
632  scheme.addColor(RGBColor::GREEN, (double)(0.5));
633  scheme.addColor(RGBColor::CYAN, (double)(0.75));
634  scheme.addColor(RGBColor::BLUE, (double)(1));
635  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
636  edgeColorer.addScheme(scheme);
637  scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED);
638  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
639  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
640  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
641  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
642  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
643  edgeColorer.addScheme(scheme);
644  edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
645  scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
646  scheme.addColor(RGBColor::RED, 1, "even");
647  edgeColorer.addScheme(scheme);
648  scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true);
649  scheme.addColor(RGBColor::RED, 1, "jammed");
650  edgeColorer.addScheme(scheme);
651  scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE);
652  scheme.addColor(RGBColor::RED, 0.95);
653  edgeColorer.addScheme(scheme);
654  scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED);
655  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
656  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
657  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
658  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
659  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
660  edgeColorer.addScheme(scheme);
661  scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE);
662  scheme.addColor(RGBColor::RED, (double)5000);
663  edgeColorer.addScheme(scheme);
664  scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED);
665  scheme.addColor(RGBColor::YELLOW, (double)(0.25));
666  scheme.addColor(RGBColor::GREEN, (double)(0.5));
667  scheme.addColor(RGBColor::CYAN, (double)(0.75));
668  scheme.addColor(RGBColor::BLUE, (double)(1));
669  scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
670  edgeColorer.addScheme(scheme);
671  scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY);
672  scheme.addColor(RGBColor::GREEN, (double)1);
673  scheme.addColor(RGBColor::YELLOW, (double)10);
674  scheme.addColor(RGBColor::RED, (double)100);
675  edgeColorer.addScheme(scheme);
676 
677 
679  {
680  edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
681  GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true);
682  scheme.addColor(5, 1, "selected");
683  edgeScaler.addScheme(scheme);
684  scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
685  scheme.addColor(10, (double)(150.0 / 3.6));
686  edgeScaler.addScheme(scheme);
687  scheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0);
688  scheme.addColor(10, 0.95);
689  edgeScaler.addScheme(scheme);
690  scheme = GUIScaleScheme("by current speed (streetwise)", 0);
691  scheme.addColor(10, (double)(150.0 / 3.6));
692  edgeScaler.addScheme(scheme);
693  scheme = GUIScaleScheme("by current flow (streetwise)", 0);
694  scheme.addColor(20, (double)5000);
695  edgeScaler.addScheme(scheme);
696  scheme = GUIScaleScheme("by relative speed (streetwise)", 0);
697  scheme.addColor(20, (double)1);
698  edgeScaler.addScheme(scheme);
699  scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0);
700  scheme.addColor(1, (double)1);
701  scheme.addColor(10, (double)10);
702  scheme.addColor(50, (double)100);
703  edgeScaler.addScheme(scheme);
704  }
705 
706 }
707 
708 
709 void
711  // init color schemes
712  GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
713  scheme.addColor(RGBColor::GREY, 1, "Sidewalk");
714  scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
715  scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
716  scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
717  scheme.addColor(RGBColor::BLACK, 5, "railway");
718  scheme.addColor(RGBColor(92, 92, 92), 6, "no passenger"); // paths, service roads etc
719  laneColorer.addScheme(scheme);
720  scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true);
721  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
722  laneColorer.addScheme(scheme);
723  scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
724  scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
725  scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
726  scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
727  scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
728  scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
729  scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
730  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
731  scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
732  scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
733  scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
734  scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
735  laneColorer.addScheme(scheme);
736 
737  scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
738  scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
739  scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
740  scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
741  scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
742  scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
743  laneColorer.addScheme(scheme);
744 
745  scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
746  scheme.addColor(RGBColor::BLUE, (double)5);
747  laneColorer.addScheme(scheme);
748 
749  scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
750  scheme.addColor(RGBColor::RED, 0.25);
751  scheme.addColor(RGBColor::YELLOW, 0.5);
752  scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
753  scheme.addColor(RGBColor::GREEN, (double)2.0);
754  scheme.addColor(RGBColor::BLUE, (double)4.0);
755  laneColorer.addScheme(scheme);
756  laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
757 
758  scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
759  scheme.addColor(RGBColor::RED, (double) - 20);
760  scheme.addColor(RGBColor::GREEN, (double)20);
761  scheme.setAllowsNegativeValues(true);
762  laneColorer.addScheme(scheme);
763  scheme = GUIColorScheme("by height at start", RGBColor::RED);
764  scheme.addColor(RGBColor::BLUE, (double) - 10);
765  scheme.addColor(RGBColor::YELLOW, (double)50);
766  scheme.addColor(RGBColor::GREEN, (double)100);
767  scheme.addColor(RGBColor::MAGENTA, (double)200);
768  scheme.setAllowsNegativeValues(true);
769  laneColorer.addScheme(scheme);
770  scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
771  scheme.addColor(RGBColor::BLUE, (double) - 10);
772  scheme.addColor(RGBColor::YELLOW, (double)50);
773  scheme.addColor(RGBColor::GREEN, (double)100);
774  scheme.addColor(RGBColor::MAGENTA, (double)200);
775  scheme.setAllowsNegativeValues(true);
776  laneColorer.addScheme(scheme);
777  scheme = GUIColorScheme("by inclination", RGBColor::GREY);
778  scheme.addColor(RGBColor::YELLOW, (double) .1);
779  scheme.addColor(RGBColor::RED, (double) .3);
780  scheme.addColor(RGBColor::GREEN, (double) - .1);
781  scheme.addColor(RGBColor::BLUE, (double) - .3);
782  scheme.setAllowsNegativeValues(true);
783  laneColorer.addScheme(scheme);
784  scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
785  scheme.addColor(RGBColor::YELLOW, (double) .1);
786  scheme.addColor(RGBColor::RED, (double) .3);
787  scheme.addColor(RGBColor::GREEN, (double) - .1);
788  scheme.addColor(RGBColor::BLUE, (double) - .3);
789  scheme.setAllowsNegativeValues(true);
790  laneColorer.addScheme(scheme);
791 
792  scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
793  scheme.addColor(RGBColor(204, 0, 0), 1, "shape not computed");
794  scheme.addColor(RGBColor(153, 0, 0), 2, "geometry points");
795  scheme.addColor(RGBColor::GREEN, 3, "custom shape");
796  junctionColorer.addScheme(scheme);
797  scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true);
798  scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
799  junctionColorer.addScheme(scheme);
800  scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
801  scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
802  scheme.addColor(RGBColor::YELLOW, 2, "priority");
803  scheme.addColor(RGBColor::RED, 3, "priority_stop");
804  scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
805  scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
806  scheme.addColor(RGBColor::GREY, 6, "district");
807  scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
808  scheme.addColor(RGBColor::BLACK, 8, "dead_end");
809  scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
810  scheme.addColor(RGBColor(192, 128, 64), 10, "zipper");
811  scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
812  scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
813  junctionColorer.addScheme(scheme);
814  scheme = GUIColorScheme("by height", RGBColor::GREY);
815  scheme.addColor(RGBColor::BLUE, (double) - 10);
816  scheme.addColor(RGBColor::RED, (double)10);
817  scheme.addColor(RGBColor::YELLOW, (double)50);
818  scheme.addColor(RGBColor::GREEN, (double)100);
819  scheme.addColor(RGBColor::MAGENTA, (double)200);
820  scheme.setAllowsNegativeValues(true);
821  junctionColorer.addScheme(scheme);
822 
824  poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
825  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
826  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
827  poiColorer.addScheme(scheme);
828  poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
829 
831  polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
832  scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true);
833  scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
834  polyColorer.addScheme(scheme);
835  polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
836 
838  {
839  GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
840  laneScaler.addScheme(scheme);
841  }
842 
843  // dummy schemes
847 }
848 
849 
850 int
852  if (UseMesoSim) {
853  return edgeColorer.getActive();
854  }
855  return laneColorer.getActive();
856 }
857 
858 
859 int
861  if (UseMesoSim) {
862  return edgeScaler.getActive();
863  }
864  return laneScaler.getActive();
865 }
866 
867 
870  if (UseMesoSim) {
871  return edgeColorer.getScheme();
872  }
873  return laneColorer.getScheme();
874 }
875 
876 
879  if (UseMesoSim) {
880  return edgeScaler.getScheme();
881  }
882  return laneScaler.getScheme();
883 }
884 
885 void
890  dev.writeAttr("dither", dither);
891  dev.closeTag();
893  dev.writeAttr("backgroundColor", backgroundColor);
894  dev.writeAttr("showGrid", showGrid);
895  dev.writeAttr("gridXSize", gridXSize);
896  dev.writeAttr("gridYSize", gridYSize);
897  dev.closeTag();
898  // edges
900  dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
901  dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
902  dev.writeAttr("laneShowBorders", laneShowBorders);
903  dev.writeAttr("showBikeMarkings", showBikeMarkings);
904  dev.writeAttr("showLinkDecals", showLinkDecals);
905  dev.writeAttr("showLinkRules", showLinkRules);
906  dev.writeAttr("showRails", showRails);
907  dev.writeAttr("hideConnectors", hideConnectors);
908  dev.writeAttr("widthExaggeration", laneWidthExaggeration);
909  dev.writeAttr("minSize", laneMinSize);
910  dev.writeAttr("showDirection", showLaneDirection);
911  dev.writeAttr("showSublanes", showSublanes);
912  dev.writeAttr("spreadSuperposed", spreadSuperposed);
913  dev.lf();
914  dev << " ";
915  edgeName.print(dev, "edgeName");
916  dev.lf();
917  dev << " ";
918  internalEdgeName.print(dev, "internalEdgeName");
919  dev.lf();
920  dev << " ";
921  cwaEdgeName.print(dev, "cwaEdgeName");
922  dev.lf();
923  dev << " ";
924  streetName.print(dev, "streetName");
925  laneColorer.save(dev);
926  laneScaler.save(dev);
927  edgeColorer.save(dev);
928  edgeScaler.save(dev);
929  dev.closeTag();
930  // vehicles
932  dev.writeAttr("vehicleMode", vehicleColorer.getActive());
933  dev.writeAttr("vehicleQuality", vehicleQuality);
934  vehicleSize.print(dev, "vehicle");
935  dev.writeAttr("showBlinker", showBlinker);
936  dev.lf();
937  dev << " ";
938  vehicleName.print(dev, "vehicleName");
939  vehicleColorer.save(dev);
940  dev.closeTag();
941  // persons
943  dev.writeAttr("personMode", personColorer.getActive());
944  dev.writeAttr("personQuality", personQuality);
945  personSize.print(dev, "person");
946  dev.lf();
947  dev << " ";
948  personName.print(dev, "personName");
949  personColorer.save(dev);
950  dev.closeTag();
951  // containers
953  dev.writeAttr("containerMode", containerColorer.getActive());
954  dev.writeAttr("containerQuality", containerQuality);
955  containerSize.print(dev, "container");
956  dev.lf();
957  dev << " ";
958  containerName.print(dev, "containerName");
959  containerColorer.save(dev);
960  dev.closeTag();
961  // junctions
963  dev.writeAttr("junctionMode", junctionColorer.getActive());
964  dev.lf();
965  dev << " ";
966  drawLinkTLIndex.print(dev, "drawLinkTLIndex");
967  dev.lf();
968  dev << " ";
969  drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
970  dev.lf();
971  dev << " ";
972  junctionName.print(dev, "junctionName");
973  dev.lf();
974  dev << " ";
975  internalJunctionName.print(dev, "internalJunctionName");
976  dev.lf();
977  dev << " ";
978  dev.writeAttr("showLane2Lane", showLane2Lane);
979  dev.writeAttr("drawShape", drawJunctionShape);
980  dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
981  junctionSize.print(dev, "junction");
982  junctionColorer.save(dev);
983  dev.closeTag();
984  // additionals
986  dev.writeAttr("addMode", addMode);
987  addSize.print(dev, "add");
988  addName.print(dev, "addName");
989  addFullName.print(dev, "addFullName");
990  dev.closeTag();
991  // pois
993  poiSize.print(dev, "poi");
994  poiName.print(dev, "poiName");
995  poiType.print(dev, "poiType");
996  poiColorer.save(dev);
997  dev.closeTag();
998  // polys
1000  polySize.print(dev, "poly");
1001  polyName.print(dev, "polyName");
1002  polyType.print(dev, "polyType");
1003  polyColorer.save(dev);
1004  dev.closeTag();
1005  // legend
1007  dev.writeAttr("showSizeLegend", showSizeLegend);
1008  dev.closeTag();
1009 
1010  dev.closeTag();
1011 }
1012 
1013 
1014 bool
1016  if (dither != v2.dither) {
1017  return false;
1018  }
1019  if (backgroundColor != v2.backgroundColor) {
1020  return false;
1021  }
1022  if (showGrid != v2.showGrid) {
1023  return false;
1024  }
1025  if (gridXSize != v2.gridXSize) {
1026  return false;
1027  }
1028  if (gridYSize != v2.gridYSize) {
1029  return false;
1030  }
1031 
1032  if (!(edgeColorer == v2.edgeColorer)) {
1033  return false;
1034  }
1035  if (!(edgeScaler == v2.edgeScaler)) {
1036  return false;
1037  }
1038  if (!(laneColorer == v2.laneColorer)) {
1039  return false;
1040  }
1041  if (!(laneScaler == v2.laneScaler)) {
1042  return false;
1043  }
1044  if (laneShowBorders != v2.laneShowBorders) {
1045  return false;
1046  }
1047  if (showBikeMarkings != v2.showBikeMarkings) {
1048  return false;
1049  }
1050  if (showLinkDecals != v2.showLinkDecals) {
1051  return false;
1052  }
1053  if (showLinkRules != v2.showLinkRules) {
1054  return false;
1055  }
1056  if (showRails != v2.showRails) {
1057  return false;
1058  }
1059  if (edgeName != v2.edgeName) {
1060  return false;
1061  }
1062  if (internalEdgeName != v2.internalEdgeName) {
1063  return false;
1064  }
1065  if (cwaEdgeName != v2.cwaEdgeName) {
1066  return false;
1067  }
1068  if (streetName != v2.streetName) {
1069  return false;
1070  }
1071  if (hideConnectors != v2.hideConnectors) {
1072  return false;
1073  }
1075  return false;
1076  }
1077  if (laneMinSize != v2.laneMinSize) {
1078  return false;
1079  }
1081  return false;
1082  }
1083  if (showSublanes != v2.showSublanes) {
1084  return false;
1085  }
1086  if (spreadSuperposed != v2.spreadSuperposed) {
1087  return false;
1088  }
1089  if (!(vehicleColorer == v2.vehicleColorer)) {
1090  return false;
1091  }
1092  if (vehicleQuality != v2.vehicleQuality) {
1093  return false;
1094  }
1095  if (vehicleSize != v2.vehicleSize) {
1096  return false;
1097  }
1098  if (showBlinker != v2.showBlinker) {
1099  return false;
1100  }
1102  return false;
1103  }
1104  if (drawMinGap != v2.drawMinGap) {
1105  return false;
1106  }
1107  if (showBTRange != v2.showBTRange) {
1108  return false;
1109  }
1110  if (vehicleName != v2.vehicleName) {
1111  return false;
1112  }
1113  if (!(personColorer == v2.personColorer)) {
1114  return false;
1115  }
1116  if (personQuality != v2.personQuality) {
1117  return false;
1118  }
1119  if (personSize != v2.personSize) {
1120  return false;
1121  }
1122  if (personName != v2.personName) {
1123  return false;
1124  }
1125  if (!(containerColorer == v2.containerColorer)) {
1126  return false;
1127  }
1128  if (containerQuality != v2.containerQuality) {
1129  return false;
1130  }
1131  if (containerSize != v2.containerSize) {
1132  return false;
1133  }
1134  if (containerName != v2.containerName) {
1135  return false;
1136  }
1137  if (!(junctionColorer == v2.junctionColorer)) {
1138  return false;
1139  }
1140  if (!(poiColorer == v2.poiColorer)) {
1141  return false;
1142  }
1143  if (!(polyColorer == v2.polyColorer)) {
1144  return false;
1145  }
1146  if (drawLinkTLIndex != v2.drawLinkTLIndex) {
1147  return false;
1148  }
1150  return false;
1151  }
1152  if (junctionName != v2.junctionName) {
1153  return false;
1154  }
1156  return false;
1157  }
1158 
1159  if (showLane2Lane != v2.showLane2Lane) {
1160  return false;
1161  }
1162 
1164  return false;
1165  }
1166 
1168  return false;
1169  }
1170  if (junctionSize != v2.junctionSize) {
1171  return false;
1172  }
1173 
1174  if (addMode != v2.addMode) {
1175  return false;
1176  }
1177  if (addSize != v2.addSize) {
1178  return false;
1179  }
1180  if (addName != v2.addName) {
1181  return false;
1182  }
1183  if (addFullName != v2.addFullName) {
1184  return false;
1185  }
1186  if (poiSize != v2.poiSize) {
1187  return false;
1188  }
1189  if (poiName != v2.poiName) {
1190  return false;
1191  }
1192  if (poiType != v2.poiType) {
1193  return false;
1194  }
1195  if (polySize != v2.polySize) {
1196  return false;
1197  }
1198  if (polyName != v2.polyName) {
1199  return false;
1200  }
1201  if (polyType != v2.polyType) {
1202  return false;
1203  }
1204 
1205  if (showSizeLegend != v2.showSizeLegend) {
1206  return false;
1207  }
1208 
1209  return true;
1210 }
1211 
1212 
1213 double
1216  return (constantSize && !s.drawForSelecting) ? MAX2((double)exaggeration, exaggeration * factor / s.scale) : exaggeration;
1217 }
1218 
1219 
1220 const RGBColor&
1222  switch (ls) {
1227  case LINKSTATE_TL_RED:
1228  return SUMO_color_TL_RED;
1230  return SUMO_color_TL_REDYELLOW;
1239  case LINKSTATE_MAJOR:
1240  return SUMO_color_MAJOR;
1241  case LINKSTATE_MINOR:
1242  return SUMO_color_MINOR;
1243  case LINKSTATE_EQUAL:
1244  return SUMO_color_EQUAL;
1245  case LINKSTATE_STOP:
1246  return SUMO_color_STOP;
1247  case LINKSTATE_ALLWAY_STOP:
1248  return SUMO_color_ALLWAY_STOP;
1249  case LINKSTATE_ZIPPER:
1250  return SUMO_color_ZIPPER;
1251  case LINKSTATE_DEADEND:
1252  return SUMO_color_DEADEND;
1253  default:
1254  throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1255  }
1256 }
1257 
1258 double
1259 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
1260  double viewAngle = objectAngle - angle;
1261  while (viewAngle < 0) {
1262  viewAngle += 360;
1263  }
1264  // fmod round towards zero which is not want we want for negative numbers
1265  viewAngle = fmod(viewAngle, 360);
1266  if (viewAngle > 90 && viewAngle < 270) {
1267  // avoid reading text on it's head
1268  objectAngle -= 180;
1269  }
1270  return objectAngle;
1271 }
1272 
1273 /****************************************************************************/
1274 
1275 
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:68
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