1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 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 /****************************************************************************/
10 /// @file GUIVisualizationSettings.cpp
11 /// @author Daniel Krajzewicz
12 /// @author Jakob Erdmann
13 /// @author Michael Behrisch
14 /// @date Sept 2002
15 /// @version $Id$
16 ///
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>
28 #include <utils/gui/div/GUIGlobalSelection.h>
29 #include "GUIVisualizationSettings.h"
30 #include "GUIPropertyScheme.h"
31
32 // ===========================================================================
33 // static members
34 // ===========================================================================
35 bool GUIVisualizationSettings::UseMesoSim = false;
36
37 /* -------------------------------------------------------------------------
38 * color constants for link states
39 * ----------------------------------------------------------------------- */
40 const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0);
41 const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0);
42 const RGBColor SUMO_color_TL_RED(255, 0, 0);
43 const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
44 const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 0);
45 const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0);
46 const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0);
47 const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255);
48 const RGBColor SUMO_color_MAJOR(255, 255, 255);
49 const RGBColor SUMO_color_MINOR(51, 51, 51);
50 const RGBColor SUMO_color_EQUAL(128, 128, 128);
51 const RGBColor SUMO_color_STOP(128, 0, 128);
52 const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192);
53 const RGBColor SUMO_color_ZIPPER(192, 128, 64);
54 const RGBColor SUMO_color_DEADEND(0, 0, 0);
55
56 // -------------------------------------------------------------------------
57 // color constants for other objects
58 // -------------------------------------------------------------------------
59
60 const RGBColor GUIVisualizationSettings::SUMO_color_busStop(76, 170, 50);
61 const RGBColor GUIVisualizationSettings::SUMO_color_busStop_sign(255, 235, 0);
62 const RGBColor GUIVisualizationSettings::SUMO_color_containerStop(83, 89, 172);
63 const RGBColor GUIVisualizationSettings::SUMO_color_containerStop_sign(177, 184, 186, 171);
64 const RGBColor GUIVisualizationSettings::SUMO_color_chargingStation(114, 210, 252);
65 const RGBColor GUIVisualizationSettings::SUMO_color_chargingStation_sign(255, 235, 0);
66 const RGBColor GUIVisualizationSettings::SUMO_color_chargingStation_charge(255, 180, 0);
67 const RGBColor GUIVisualizationSettings::SUMO_color_E1(255, 255, 0);
68 const RGBColor GUIVisualizationSettings::SUMO_color_E1Instant(255, 0, 255);
69 const RGBColor GUIVisualizationSettings::SUMO_color_E2(0, 204, 204);
70 const RGBColor GUIVisualizationSettings::SUMO_color_E3Entry(0, 92, 64);
71 const RGBColor GUIVisualizationSettings::SUMO_color_E3Exit(92, 0, 0);
72 const RGBColor GUIVisualizationSettings::SUMO_color_stops(220, 20, 30);
73
74 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL("by param (numerical, streetwise)");
75 const std::string GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL("by param (numerical, lanewise)");
76 const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL("by edgeData (numerical, streetwise)");
77
78 // color constants for scheme background
79 #define COL_SCHEME_EMISSION RGBColor(255,255,210)
80 #define COL_SCHEME_MISC RGBColor(210,220,255)
81 #define COL_SCHEME_STATIC RGBColor(230,230,230)
82 #define COL_SCHEME_DYNAMIC RGBColor(220,255,220)
83
84 // ===========================================================================
85 // member method definitions
86 // ===========================================================================
GUIVisualizationSettings(bool _netedit)87 GUIVisualizationSettings::GUIVisualizationSettings(bool _netedit) :
88 name(""),
89 netedit(_netedit),
90 angle(0),
91 dither(false),
92 fps(false),
93 backgroundColor(RGBColor::WHITE),
94 showGrid(false), gridXSize(100), gridYSize(100),
95 laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
96 showLinkRules(true), showRails(true),
97 edgeName(false, 60, RGBColor(255, 128, 0, 255)),
98 internalEdgeName(false, 45, RGBColor(128, 64, 0, 255)),
99 cwaEdgeName(false, 60, RGBColor::MAGENTA),
100 streetName(false, 60, RGBColor::YELLOW),
101 edgeValue(false, 100, RGBColor::CYAN),
102 hideConnectors(false),
103 laneWidthExaggeration(1),
104 laneMinSize(0),
105 showLaneDirection(false),
106 showSublanes(true),
107 spreadSuperposed(false),
108 edgeParam("EDGE_KEY"),
109 laneParam("LANE_KEY"),
110 edgeData("speed"),
111 vehicleQuality(0), showBlinker(true),
112 drawLaneChangePreference(false), drawMinGap(false),
113 showBTRange(false), vehicleSize(1),
114 vehicleName(false, 60, RGBColor(204, 153, 0, 255)),
115 vehicleValue(false, 80, RGBColor::CYAN),
116 personQuality(0),
117 personSize(1),
118 personName(false, 60, RGBColor(0, 153, 204, 255)),
119 personValue(false, 80, RGBColor::CYAN),
120 containerQuality(0),
121 containerSize(1),
122 containerName(false, 60, RGBColor(0, 153, 204, 255)),
123 drawLinkTLIndex(false, 50, RGBColor(128, 128, 255, 255)),
124 drawLinkJunctionIndex(false, 50, RGBColor(128, 128, 255, 255)),
125 junctionName(false, 60, RGBColor(0, 255, 128, 255)),
126 internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
127 tlsPhaseIndex(false, 150, RGBColor(255, 255, 0, 255)),
128 showLane2Lane(false),
129 drawJunctionShape(true),
130 drawCrossingsAndWalkingareas(true),
131 junctionSize(1),
132 addMode(0),
133 addSize(1),
134 addName(false, 60, RGBColor(255, 0, 128, 255)),
135 addFullName(false, 60, RGBColor(255, 0, 128, 255)),
136 poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)),
137 poiType(false, 60, RGBColor(255, 0, 128, 255)),
138 polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
139 polyType(false, 60, RGBColor(255, 0, 128, 255)),
140 showSizeLegend(true),
141 gaming(false),
142 selectionColor(0, 0, 204, 255),
143 selectedEdgeColor(0, 0, 204, 255),
144 selectedLaneColor(0, 0, 128, 255),
145 selectedConnectionColor(0, 0, 100, 255),
146 selectedAdditionalColor(0, 0, 150, 255),
147 selectionScale(1.),
148 drawForSelecting(false) {
149
150 if (netedit) {
151 initNeteditDefaults();
152 } else {
153 initSumoGuiDefaults();
154 }
155 }
156
157
158 void
initSumoGuiDefaults()159 GUIVisualizationSettings::initSumoGuiDefaults() {
160 /// add lane coloring schemes
161 GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true, 0);
162 scheme.addColor(RGBColor::GREY, 1, "sidewalk");
163 scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
164 scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge");
165 scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
166 scheme.addColor(RGBColor::BLACK, 5, "railway");
167 scheme.addColor(RGBColor(92, 92, 92), 6, "no passenger"); // paths, service roads etc
168 scheme.addColor(RGBColor::RED, 7, "closed"); // road closing
169 scheme.addColor(RGBColor::GREEN, 8, "connector"); // macro-connector
170 laneColorer.addScheme(scheme);
171 scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
172 scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
173 laneColorer.addScheme(scheme);
174 scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
175 scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
176 scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
177 scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
178 scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
179 scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
180 scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
181 scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
182 scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
183 scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
184 scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
185 scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
186 laneColorer.addScheme(scheme);
187 // ... traffic states ...
188 scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
189 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
190 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
191 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
192 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
193 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
194 laneColorer.addScheme(scheme);
195 scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
196 scheme.addColor(RGBColor::GREEN, 0.25);
197 scheme.addColor(RGBColor::YELLOW, 0.5);
198 scheme.addColor(RGBColor::ORANGE, 0.75);
199 scheme.addColor(RGBColor::RED, 1.0);
200 laneColorer.addScheme(scheme);
201 scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
202 scheme.addColor(RGBColor::GREEN, 0.25);
203 scheme.addColor(RGBColor::YELLOW, 0.5);
204 scheme.addColor(RGBColor::ORANGE, 0.75);
205 scheme.addColor(RGBColor::RED, 1.0);
206 laneColorer.addScheme(scheme);
207 scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
208 scheme.addColor(RGBColor::CYAN, (double)30);
209 scheme.addColor(RGBColor::GREEN, (double)100);
210 scheme.addColor(RGBColor::YELLOW, (double)200);
211 scheme.addColor(RGBColor::RED, (double)300);
212 laneColorer.addScheme(scheme);
213 scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
214 scheme.addColor(RGBColor::BLUE, (double)5);
215 laneColorer.addScheme(scheme);
216 // ... emissions ...
217 scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
218 scheme.addColor(RGBColor::RED, (double)(10. / 7.5 / 5.));
219 laneColorer.addScheme(scheme);
220 scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
221 scheme.addColor(RGBColor::RED, (double)(0.05 / 7.5 / 2.));
222 laneColorer.addScheme(scheme);
223 scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
224 scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 / 5.));
225 laneColorer.addScheme(scheme);
226 scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
227 scheme.addColor(RGBColor::RED, (double)(.125 / 7.5 / 5.));
228 laneColorer.addScheme(scheme);
229 scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
230 scheme.addColor(RGBColor::RED, (double)(.02 / 7.5 / 4.));
231 laneColorer.addScheme(scheme);
232 scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
233 scheme.addColor(RGBColor::RED, (double)(.005 / 7.5 * 100.));
234 laneColorer.addScheme(scheme);
235 scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
236 scheme.addColor(RGBColor::RED, (double)100);
237 laneColorer.addScheme(scheme);
238 // ... weights (experimental) ...
239 scheme = GUIColorScheme("by global travel time", RGBColor::GREEN);
240 scheme.addColor(RGBColor::RED, (double)100);
241 scheme.setAllowsNegativeValues(true);
242 laneColorer.addScheme(scheme);
243 scheme = GUIColorScheme("by global speed percentage", RGBColor::RED);
244 scheme.addColor(RGBColor::YELLOW, (double)50);
245 scheme.addColor(RGBColor::GREEN, (double)100);
246 scheme.setAllowsNegativeValues(true);
247 laneColorer.addScheme(scheme);
248 scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
249 scheme.addColor(RGBColor::RED, 0.25);
250 scheme.addColor(RGBColor::YELLOW, 0.5);
251 scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
252 scheme.addColor(RGBColor::GREEN, (double)2.0);
253 scheme.addColor(RGBColor::BLUE, (double)4.0);
254 laneColorer.addScheme(scheme);
255 laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
256 scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN);
257 scheme.addColor(RGBColor::RED, (double)100);
258 scheme.setAllowsNegativeValues(true);
259 laneColorer.addScheme(scheme);
260 scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
261 scheme.addColor(RGBColor::RED, (double) - 20);
262 scheme.addColor(RGBColor::GREEN, (double)20);
263 scheme.setAllowsNegativeValues(true);
264 laneColorer.addScheme(scheme);
265 scheme = GUIColorScheme("by height at start", RGBColor::GREY);
266 scheme.addColor(RGBColor::BLUE, (double) - 10);
267 scheme.addColor(RGBColor::RED, (double)10);
268 scheme.addColor(RGBColor::YELLOW, (double)50);
269 scheme.addColor(RGBColor::GREEN, (double)100);
270 scheme.addColor(RGBColor::MAGENTA, (double)200);
271 scheme.setAllowsNegativeValues(true);
272 laneColorer.addScheme(scheme);
273 scheme = GUIColorScheme("by height at geometry-segment start", RGBColor::GREY);
274 scheme.addColor(RGBColor::BLUE, (double) - 10);
275 scheme.addColor(RGBColor::RED, (double)10);
276 scheme.addColor(RGBColor::YELLOW, (double)50);
277 scheme.addColor(RGBColor::GREEN, (double)100);
278 scheme.addColor(RGBColor::MAGENTA, (double)200);
279 scheme.setAllowsNegativeValues(true);
280 laneColorer.addScheme(scheme);
281 scheme = GUIColorScheme("by inclination", RGBColor::GREY);
282 scheme.addColor(RGBColor::YELLOW, (double) .1);
283 scheme.addColor(RGBColor::RED, (double) .3);
284 scheme.addColor(RGBColor::GREEN, (double) - .1);
285 scheme.addColor(RGBColor::BLUE, (double) - .3);
286 scheme.setAllowsNegativeValues(true);
287 laneColorer.addScheme(scheme);
288 scheme = GUIColorScheme("by geometry-segment inclination", RGBColor::GREY);
289 scheme.addColor(RGBColor::YELLOW, (double) .1);
290 scheme.addColor(RGBColor::RED, (double) .3);
291 scheme.addColor(RGBColor::GREEN, (double) - .1);
292 scheme.addColor(RGBColor::BLUE, (double) - .3);
293 scheme.setAllowsNegativeValues(true);
294 laneColorer.addScheme(scheme);
295 scheme = GUIColorScheme("by average speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
296 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
297 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
298 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
299 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
300 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
301 laneColorer.addScheme(scheme);
302 scheme = GUIColorScheme("by average relative speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
303 scheme.addColor(RGBColor::YELLOW, (double)(0.25));
304 scheme.addColor(RGBColor::GREEN, (double)(0.5));
305 scheme.addColor(RGBColor::CYAN, (double)(0.75));
306 scheme.addColor(RGBColor::BLUE, (double)(1));
307 scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
308 laneColorer.addScheme(scheme);
309 scheme = GUIColorScheme("by routing device assumed speed ", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
310 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
311 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
312 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
313 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
314 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
315 laneColorer.addScheme(scheme);
316 scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
317 scheme.addColor(RGBColor::RED, (double)(1 / 7.5 / 5.));
318 laneColorer.addScheme(scheme);
319 scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
320 scheme.addColor(RGBColor::GREEN, (double)1);
321 scheme.addColor(RGBColor::YELLOW, (double)10);
322 scheme.addColor(RGBColor::RED, (double)100);
323 laneColorer.addScheme(scheme);
324 scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
325 laneColorer.addScheme(scheme);
326 scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
327 scheme.setAllowsNegativeValues(true);
328 laneColorer.addScheme(scheme);
329 scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
330 scheme.setAllowsNegativeValues(true);
331 laneColorer.addScheme(scheme);
332 scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, RGBColor(204, 204, 204));
333 scheme.setAllowsNegativeValues(true);
334 laneColorer.addScheme(scheme);
335
336
337 /// add vehicle coloring schemes
338 vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true));
339 vehicleColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
340 vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true));
341 vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
342 vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true));
343 vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true));
344 vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true));
345 vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true));
346 scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
347 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
348 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
349 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
350 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
351 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
352 vehicleColorer.addScheme(scheme);
353 scheme = GUIColorScheme("by action step", RGBColor::GREY, "no action", true, 0, COL_SCHEME_DYNAMIC);
354 scheme.addColor(RGBColor(0, 255, 0, 255), 1., "action in next step");
355 scheme.addColor(RGBColor(80, 160, 80, 255), 2., "had action step");
356 vehicleColorer.addScheme(scheme);
357 scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
358 scheme.addColor(RGBColor::CYAN, (double)30);
359 scheme.addColor(RGBColor::GREEN, (double)100);
360 scheme.addColor(RGBColor::YELLOW, (double)200);
361 scheme.addColor(RGBColor::RED, (double)300);
362 vehicleColorer.addScheme(scheme);
363 scheme = GUIColorScheme("by accumulated waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
364 scheme.addColor(RGBColor::CYAN, (double)25);
365 scheme.addColor(RGBColor::GREEN, (double)50);
366 scheme.addColor(RGBColor::YELLOW, (double)75);
367 scheme.addColor(RGBColor::RED, (double)100);
368 vehicleColorer.addScheme(scheme);
369 scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
370 scheme.addColor(RGBColor(189, 189, 179, 255), -180);
371 scheme.addColor(RGBColor(255, 255, 0, 255), -20);
372 scheme.addColor(RGBColor(255, 0, 0, 255), -0.001);
373 scheme.addColor(RGBColor(0, 0, 255, 255), 0.001);
374 scheme.addColor(RGBColor(0, 255, 255, 255), 20);
375 scheme.addColor(RGBColor(179, 189, 189, 255), 180);
376 scheme.setAllowsNegativeValues(true);
377 vehicleColorer.addScheme(scheme);
378 scheme = GUIColorScheme("by max speed", RGBColor::RED);
379 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
380 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
381 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
382 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
383 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
384 vehicleColorer.addScheme(scheme);
385 // ... emissions ...
386 scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
387 scheme.addColor(RGBColor::RED, (double)5.);
388 vehicleColorer.addScheme(scheme);
389 scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
390 scheme.addColor(RGBColor::RED, 0.05);
391 vehicleColorer.addScheme(scheme);
392 scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
393 scheme.addColor(RGBColor::RED, (double).005);
394 vehicleColorer.addScheme(scheme);
395 scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
396 scheme.addColor(RGBColor::RED, (double).125);
397 vehicleColorer.addScheme(scheme);
398 scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
399 scheme.addColor(RGBColor::RED, (double).02);
400 vehicleColorer.addScheme(scheme);
401 scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
402 scheme.addColor(RGBColor::RED, (double).005);
403 vehicleColorer.addScheme(scheme);
404 scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
405 scheme.addColor(RGBColor::RED, (double)100.);
406 vehicleColorer.addScheme(scheme);
407 scheme = GUIColorScheme("by reroute number", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
408 scheme.addColor(RGBColor::YELLOW, (double)1.);
409 scheme.addColor(RGBColor::WHITE, (double)10.);
410 vehicleColorer.addScheme(scheme);
411 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
412 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
413 vehicleColorer.addScheme(scheme);
414 scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
415 scheme.addColor(RGBColor(255, 0, 255, 255), -100, "opposite lane");
416 scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
417 scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
418 scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
419 scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
420 scheme.setAllowsNegativeValues(true);
421 vehicleColorer.addScheme(scheme);
422 scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
423 scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
424 scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
425 scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
426 scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
427 scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
428 scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
429 scheme.setAllowsNegativeValues(true);
430 vehicleColorer.addScheme(scheme);
431 scheme = GUIColorScheme("by time gap on lane", RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
432 scheme.addColor(RGBColor(179, 179, 179, 255), -1);
433 scheme.addColor(RGBColor(0, 255, 255, 255), 1);
434 scheme.addColor(RGBColor(0, 0, 255, 255), 2);
435 scheme.setAllowsNegativeValues(true);
436 vehicleColorer.addScheme(scheme);
437 scheme = GUIColorScheme("by depart delay", RGBColor::BLUE);
438 scheme.addColor(RGBColor::CYAN, (double)30);
439 scheme.addColor(RGBColor::GREEN, (double)100);
440 scheme.addColor(RGBColor::YELLOW, (double)200);
441 scheme.addColor(RGBColor::RED, (double)300);
442 vehicleColorer.addScheme(scheme);
443 scheme = GUIColorScheme("by electricity consumption", RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
444 scheme.addColor(RGBColor::RED, (double)5);
445 vehicleColorer.addScheme(scheme);
446 scheme = GUIColorScheme("by time loss", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
447 scheme.addColor(RGBColor::CYAN, (double)10);
448 scheme.addColor(RGBColor::GREEN, (double)60);
449 scheme.addColor(RGBColor::YELLOW, (double)180);
450 scheme.addColor(RGBColor::RED, (double)900);
451 vehicleColorer.addScheme(scheme);
452 scheme = GUIColorScheme("by lateral speed", RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
453 scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");
454 scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");
455 scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");
456 scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");
457 scheme.setAllowsNegativeValues(true);
458 vehicleColorer.addScheme(scheme);
459 vehicleColorer.addScheme(GUIColorScheme("random", RGBColor::YELLOW, "", true));
460
461 /// add person coloring schemes
462 personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::BLUE, "", true));
463 personColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLUE, "", true));
464 personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::BLUE, "", true));
465 personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::BLUE, "", true));
466 scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
467 scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
468 scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
469 scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
470 personColorer.addScheme(scheme);
471 scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
472 scheme.addColor(RGBColor::RED, (double)(1), "stopped");
473 scheme.addColor(RGBColor::GREEN, (double)(2), "walking");
474 scheme.addColor(RGBColor::BLUE, (double)(3), "riding");
475 scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
476 scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for ride");
477 personColorer.addScheme(scheme);
478 scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
479 scheme.addColor(RGBColor::CYAN, (double)30);
480 scheme.addColor(RGBColor::GREEN, (double)100);
481 scheme.addColor(RGBColor::YELLOW, (double)200);
482 scheme.addColor(RGBColor::RED, (double)300);
483 personColorer.addScheme(scheme);
484 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
485 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
486 personColorer.addScheme(scheme);
487 personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
488 personColorer.addScheme(GUIColorScheme("random", RGBColor::YELLOW, "", true));
489
490 /// add container coloring schemes
491 containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true));
492 containerColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
493 containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true));
494 containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true));
495 scheme = GUIColorScheme("by speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
496 scheme.addColor(RGBColor::YELLOW, (double)(2.5 / 3.6));
497 scheme.addColor(RGBColor::GREEN, (double)(5 / 3.6));
498 scheme.addColor(RGBColor::BLUE, (double)(10 / 3.6));
499 containerColorer.addScheme(scheme);
500 scheme = GUIColorScheme("by mode", RGBColor::GREY, "waiting for insertion", true, 0, COL_SCHEME_DYNAMIC);
501 scheme.addColor(RGBColor::RED, (double)(1), "stopped");
502 scheme.addColor(RGBColor::GREEN, (double)(2), "tranship"); // walking
503 scheme.addColor(RGBColor::BLUE, (double)(3), "transport");
504 scheme.addColor(RGBColor::CYAN, (double)(4), "accessing trainStop");
505 scheme.addColor(RGBColor::YELLOW, (double)(5), "waiting for transport");
506 containerColorer.addScheme(scheme);
507 scheme = GUIColorScheme("by waiting time", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
508 scheme.addColor(RGBColor::CYAN, (double)30);
509 scheme.addColor(RGBColor::GREEN, (double)100);
510 scheme.addColor(RGBColor::YELLOW, (double)200);
511 scheme.addColor(RGBColor::RED, (double)300);
512 containerColorer.addScheme(scheme);
513 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
514 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
515 containerColorer.addScheme(scheme);
516 containerColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
517
518 /// add junction coloring schemes
519 scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true);
520 scheme.addColor(RGBColor(150, 200, 200), 1, "waterway");
521 scheme.addColor(RGBColor(0, 0, 0, 0), 2, "railway");
522 junctionColorer.addScheme(scheme);
523 scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
524 scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
525 junctionColorer.addScheme(scheme);
526 scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
527 scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
528 scheme.addColor(RGBColor::YELLOW, 2, "priority");
529 scheme.addColor(RGBColor::RED, 3, "priority_stop");
530 scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
531 scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
532 scheme.addColor(RGBColor::GREY, 6, "district");
533 scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
534 scheme.addColor(RGBColor::BLACK, 8, "dead_end");
535 scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
536 scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
537 scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
538 scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
539 junctionColorer.addScheme(scheme);
540 scheme = GUIColorScheme("by height", RGBColor::GREY);
541 scheme.addColor(RGBColor::BLUE, (double) - 10);
542 scheme.addColor(RGBColor::RED, (double)10);
543 scheme.addColor(RGBColor::YELLOW, (double)50);
544 scheme.addColor(RGBColor::GREEN, (double)100);
545 scheme.addColor(RGBColor::MAGENTA, (double)200);
546 scheme.setAllowsNegativeValues(true);
547 junctionColorer.addScheme(scheme);
548
549 /// add POI coloring schemes
550 poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
551 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
552 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
553 poiColorer.addScheme(scheme);
554 poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
555
556 /// add polygon coloring schemes
557 polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
558 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
559 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
560 polyColorer.addScheme(scheme);
561 polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
562
563 /// add lane scaling schemes
564 {
565 GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
566 laneScaler.addScheme(scheme);
567 scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true, 0, COL_SCHEME_MISC);
568 scheme.addColor(5, 1, "selected");
569 laneScaler.addScheme(scheme);
570 // ... traffic states ...
571 scheme = GUIScaleScheme("by allowed speed (lanewise)", 0);
572 scheme.addColor(10, (double)(150.0 / 3.6));
573 laneScaler.addScheme(scheme);
574 scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
575 scheme.addColor(10, 0.95);
576 laneScaler.addScheme(scheme);
577 scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
578 scheme.addColor(10, 0.95);
579 laneScaler.addScheme(scheme);
580 scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
581 scheme.addColor(10, (double)300);
582 laneScaler.addScheme(scheme);
583 scheme = GUIScaleScheme("by lane number (streetwise)", 1);
584 scheme.addColor(10, (double)5);
585 laneScaler.addScheme(scheme);
586 // ... emissions ...
587 scheme = GUIScaleScheme("by CO2 emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
588 scheme.addColor(10, (double)(10. / 7.5 / 5.));
589 laneScaler.addScheme(scheme);
590 scheme = GUIScaleScheme("by CO emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
591 scheme.addColor(10, (double)(0.05 / 7.5 / 2.));
592 laneScaler.addScheme(scheme);
593 scheme = GUIScaleScheme("by PMx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
594 scheme.addColor(10, (double)(.005 / 7.5 / 5.));
595 laneScaler.addScheme(scheme);
596 scheme = GUIScaleScheme("by NOx emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
597 scheme.addColor(10, (double)(.125 / 7.5 / 5.));
598 laneScaler.addScheme(scheme);
599 scheme = GUIScaleScheme("by HC emissions", 0, "", false, 0, COL_SCHEME_EMISSION);
600 scheme.addColor(10, (double)(.02 / 7.5 / 4.));
601 laneScaler.addScheme(scheme);
602 scheme = GUIScaleScheme("by fuel consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
603 scheme.addColor(10, (double)(.005 / 7.5 * 100.));
604 laneScaler.addScheme(scheme);
605 scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0, "", false, 0, COL_SCHEME_EMISSION);
606 scheme.addColor(10, (double)100);
607 laneScaler.addScheme(scheme);
608 // ... weights (experimental) ...
609 scheme = GUIScaleScheme("by global travel time", 0);
610 scheme.addColor(10, (double)100);
611 scheme.setAllowsNegativeValues(true);
612 laneScaler.addScheme(scheme);
613 scheme = GUIScaleScheme("by global speed percentage", 0);
614 scheme.addColor(10, (double)100);
615 scheme.setAllowsNegativeValues(true);
616 laneScaler.addScheme(scheme);
617 scheme = GUIScaleScheme("by given length/geometrical length", 0);
618 scheme.addColor(10, (double)10.0);
619 laneScaler.addScheme(scheme);
620 scheme = GUIScaleScheme("by loaded weight", 0);
621 scheme.addColor(-1000, (double) - 1000);
622 scheme.addColor(1000, (double)1000);
623 scheme.setAllowsNegativeValues(true);
624 laneScaler.addScheme(scheme);
625 scheme = GUIScaleScheme("by priority", 1);
626 scheme.addColor(0.5, (double) - 20);
627 scheme.addColor(5, (double)20);
628 scheme.setAllowsNegativeValues(true);
629 laneScaler.addScheme(scheme);
630 scheme = GUIScaleScheme("by average speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
631 scheme.addColor(10, (double)(150.0 / 3.6));
632 laneScaler.addScheme(scheme);
633 scheme = GUIScaleScheme("by average relative speed", 0, "", false, 0, COL_SCHEME_DYNAMIC);
634 scheme.addColor(0.5, (double)(0.5));
635 scheme.addColor(2, (double)(1));
636 scheme.addColor(10, (double)(2));
637 laneScaler.addScheme(scheme);
638 scheme = GUIScaleScheme("by electricity consumption", 0, "", false, 0, COL_SCHEME_EMISSION);
639 scheme.addColor(10, (double)(1 / 7.5 / 5.));
640 laneScaler.addScheme(scheme);
641 scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
642 scheme.addColor(1, (double)1);
643 scheme.addColor(10, (double)10);
644 scheme.addColor(50, (double)100);
645 laneScaler.addScheme(scheme);
646 }
647
648
649 /// add edge coloring schemes
650 edgeColorer.addScheme(GUIColorScheme("uniform", RGBColor(0, 0, 0, 0), "", true));
651 scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
652 scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
653 edgeColorer.addScheme(scheme);
654 scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true);
655 scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
656 scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
657 edgeColorer.addScheme(scheme);
658 scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED);
659 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
660 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
661 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
662 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
663 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
664 edgeColorer.addScheme(scheme);
665 scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
666 scheme.addColor(RGBColor::RED, 0.95);
667 edgeColorer.addScheme(scheme);
668 scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
669 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
670 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
671 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
672 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
673 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
674 edgeColorer.addScheme(scheme);
675 scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
676 scheme.addColor(RGBColor::RED, (double)5000);
677 edgeColorer.addScheme(scheme);
678 scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
679 scheme.addColor(RGBColor::YELLOW, (double)(0.25));
680 scheme.addColor(RGBColor::GREEN, (double)(0.5));
681 scheme.addColor(RGBColor::CYAN, (double)(0.75));
682 scheme.addColor(RGBColor::BLUE, (double)(1));
683 scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
684 edgeColorer.addScheme(scheme);
685 scheme = GUIColorScheme("by routing device assumed speed", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
686 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
687 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
688 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
689 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
690 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
691 edgeColorer.addScheme(scheme);
692 edgeColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
693 scheme = GUIColorScheme("by segments (alternating)", RGBColor::BLUE, "odd", true);
694 scheme.addColor(RGBColor::RED, 1, "even");
695 edgeColorer.addScheme(scheme);
696 scheme = GUIColorScheme("by jammed state (segmentwise)", RGBColor::GREEN, "free", true, 0, COL_SCHEME_DYNAMIC);
697 scheme.addColor(RGBColor::RED, 1, "jammed");
698 edgeColorer.addScheme(scheme);
699 scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
700 scheme.addColor(RGBColor::RED, 0.95);
701 edgeColorer.addScheme(scheme);
702 scheme = GUIColorScheme("by current speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
703 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
704 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
705 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
706 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
707 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
708 edgeColorer.addScheme(scheme);
709 scheme = GUIColorScheme("by current flow (segmentwise)", RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
710 scheme.addColor(RGBColor::RED, (double)5000);
711 edgeColorer.addScheme(scheme);
712 scheme = GUIColorScheme("by relative speed (segmentwise)", RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
713 scheme.addColor(RGBColor::YELLOW, (double)(0.25));
714 scheme.addColor(RGBColor::GREEN, (double)(0.5));
715 scheme.addColor(RGBColor::CYAN, (double)(0.75));
716 scheme.addColor(RGBColor::BLUE, (double)(1));
717 scheme.addColor(RGBColor::MAGENTA, (double)(1.25));
718 edgeColorer.addScheme(scheme);
719 scheme = GUIColorScheme("by insertion-backlog (streetwise)", RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
720 scheme.addColor(RGBColor::GREEN, (double)1);
721 scheme.addColor(RGBColor::YELLOW, (double)10);
722 scheme.addColor(RGBColor::RED, (double)100);
723 edgeColorer.addScheme(scheme);
724 scheme = GUIColorScheme("by TAZ (streetwise)", RGBColor(204, 204, 204), "no TAZ", true);
725 edgeColorer.addScheme(scheme);
726
727
728 /// add edge scaling schemes
729 {
730 edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true));
731 GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true, 0, COL_SCHEME_MISC);
732 scheme.addColor(5, 1, "selected");
733 edgeScaler.addScheme(scheme);
734 scheme = GUIScaleScheme("by allowed speed (streetwise)", 0);
735 scheme.addColor(10, (double)(150.0 / 3.6));
736 edgeScaler.addScheme(scheme);
737 scheme = GUIScaleScheme("by current occupancy (streetwise, brutto)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
738 scheme.addColor(10, 0.95);
739 edgeScaler.addScheme(scheme);
740 scheme = GUIScaleScheme("by current speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
741 scheme.addColor(10, (double)(150.0 / 3.6));
742 edgeScaler.addScheme(scheme);
743 scheme = GUIScaleScheme("by current flow (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
744 scheme.addColor(20, (double)5000);
745 edgeScaler.addScheme(scheme);
746 scheme = GUIScaleScheme("by relative speed (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
747 scheme.addColor(20, (double)1);
748 edgeScaler.addScheme(scheme);
749 scheme = GUIScaleScheme("by insertion-backlog (streetwise)", 0, "", false, 0, COL_SCHEME_DYNAMIC);
750 scheme.addColor(1, (double)1);
751 scheme.addColor(10, (double)10);
752 scheme.addColor(50, (double)100);
753 edgeScaler.addScheme(scheme);
754 }
755
756 }
757
758
759 void
initNeteditDefaults()760 GUIVisualizationSettings::initNeteditDefaults() {
761 // init color schemes
762 GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true);
763 scheme.addColor(RGBColor::GREY, 1, "Sidewalk");
764 scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane");
765 scheme.addColor(RGBColor(200, 255, 200), 3, "green verge");
766 scheme.addColor(RGBColor(150, 200, 200), 4, "waterway");
767 scheme.addColor(RGBColor::BLACK, 5, "railway");
768 scheme.addColor(RGBColor(92, 92, 92), 6, "no passenger"); // paths, service roads etc
769 laneColorer.addScheme(scheme);
770 scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
771 scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
772 laneColorer.addScheme(scheme);
773 scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody");
774 scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
775 scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
776 scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
777 scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
778 scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
779 scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
780 scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
781 scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
782 scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
783 scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
784 scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
785 laneColorer.addScheme(scheme);
786
787 scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
788 scheme.addColor(RGBColor::YELLOW, (double)(30 / 3.6));
789 scheme.addColor(RGBColor::GREEN, (double)(55 / 3.6));
790 scheme.addColor(RGBColor::CYAN, (double)(80 / 3.6));
791 scheme.addColor(RGBColor::BLUE, (double)(120 / 3.6));
792 scheme.addColor(RGBColor::MAGENTA, (double)(150 / 3.6));
793 laneColorer.addScheme(scheme);
794
795 scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
796 scheme.addColor(RGBColor::BLUE, (double)5);
797 laneColorer.addScheme(scheme);
798
799 scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK);
800 scheme.addColor(RGBColor::RED, 0.25);
801 scheme.addColor(RGBColor::YELLOW, 0.5);
802 scheme.addColor(RGBColor(179, 179, 179, 255), (double)1.0);
803 scheme.addColor(RGBColor::GREEN, (double)2.0);
804 scheme.addColor(RGBColor::BLUE, (double)4.0);
805 laneColorer.addScheme(scheme);
806 laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true));
807
808 scheme = GUIColorScheme("by priority", RGBColor::YELLOW);
809 scheme.addColor(RGBColor::RED, (double) - 20);
810 scheme.addColor(RGBColor::GREEN, (double)20);
811 scheme.setAllowsNegativeValues(true);
812 laneColorer.addScheme(scheme);
813 scheme = GUIColorScheme("by height at start", RGBColor::RED);
814 scheme.addColor(RGBColor::BLUE, (double) - 10);
815 scheme.addColor(RGBColor::YELLOW, (double)50);
816 scheme.addColor(RGBColor::GREEN, (double)100);
817 scheme.addColor(RGBColor::MAGENTA, (double)200);
818 scheme.setAllowsNegativeValues(true);
819 laneColorer.addScheme(scheme);
820 scheme = GUIColorScheme("by height at segment start", RGBColor::RED);
821 scheme.addColor(RGBColor::BLUE, (double) - 10);
822 scheme.addColor(RGBColor::YELLOW, (double)50);
823 scheme.addColor(RGBColor::GREEN, (double)100);
824 scheme.addColor(RGBColor::MAGENTA, (double)200);
825 scheme.setAllowsNegativeValues(true);
826 laneColorer.addScheme(scheme);
827 scheme = GUIColorScheme("by inclination", RGBColor::GREY);
828 scheme.addColor(RGBColor::YELLOW, (double) .1);
829 scheme.addColor(RGBColor::RED, (double) .3);
830 scheme.addColor(RGBColor::GREEN, (double) - .1);
831 scheme.addColor(RGBColor::BLUE, (double) - .3);
832 scheme.setAllowsNegativeValues(true);
833 laneColorer.addScheme(scheme);
834 scheme = GUIColorScheme("by segment inclination", RGBColor::GREY);
835 scheme.addColor(RGBColor::YELLOW, (double) .1);
836 scheme.addColor(RGBColor::RED, (double) .3);
837 scheme.addColor(RGBColor::GREEN, (double) - .1);
838 scheme.addColor(RGBColor::BLUE, (double) - .3);
839 scheme.setAllowsNegativeValues(true);
840 laneColorer.addScheme(scheme);
841 scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
842 scheme.setAllowsNegativeValues(true);
843 laneColorer.addScheme(scheme);
844 scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
845 scheme.setAllowsNegativeValues(true);
846 laneColorer.addScheme(scheme);
847
848 scheme = GUIColorScheme("uniform", RGBColor(102, 0, 0), "", true);
849 scheme.addColor(RGBColor(204, 0, 0), 1, "shape not computed");
850 scheme.addColor(RGBColor(153, 0, 0), 2, "geometry points");
851 scheme.addColor(RGBColor::GREEN, 3, "custom shape");
852 junctionColorer.addScheme(scheme);
853 scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true, 0, COL_SCHEME_MISC);
854 scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected");
855 junctionColorer.addScheme(scheme);
856 scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true);
857 scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
858 scheme.addColor(RGBColor::YELLOW, 2, "priority");
859 scheme.addColor(RGBColor::RED, 3, "priority_stop");
860 scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
861 scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
862 scheme.addColor(RGBColor::GREY, 6, "district");
863 scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
864 scheme.addColor(RGBColor::BLACK, 8, "dead_end");
865 scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
866 scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
867 scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
868 scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
869 junctionColorer.addScheme(scheme);
870 scheme = GUIColorScheme("by height", RGBColor::GREY);
871 scheme.addColor(RGBColor::BLUE, (double) - 10);
872 scheme.addColor(RGBColor::RED, (double)10);
873 scheme.addColor(RGBColor::YELLOW, (double)50);
874 scheme.addColor(RGBColor::GREEN, (double)100);
875 scheme.addColor(RGBColor::MAGENTA, (double)200);
876 scheme.setAllowsNegativeValues(true);
877 junctionColorer.addScheme(scheme);
878
879 /// add POI coloring schemes
880 poiColorer.addScheme(GUIColorScheme("given POI color", RGBColor::RED, "", true));
881 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
882 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
883 poiColorer.addScheme(scheme);
884 poiColorer.addScheme(GUIColorScheme("uniform", RGBColor::RED, "", true));
885
886 /// add polygon coloring schemes
887 polyColorer.addScheme(GUIColorScheme("given polygon color", RGBColor::ORANGE, "", true));
888 scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true, 0, COL_SCHEME_MISC);
889 scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected");
890 polyColorer.addScheme(scheme);
891 polyColorer.addScheme(GUIColorScheme("uniform", RGBColor::ORANGE, "", true));
892
893 /// add edge scaling schemes
894 {
895 GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true);
896 laneScaler.addScheme(scheme);
897 }
898
899 // dummy schemes
900 vehicleColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
901 personColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
902 containerColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true));
903 }
904
905
906 int
getLaneEdgeMode() const907 GUIVisualizationSettings::getLaneEdgeMode() const {
908 if (UseMesoSim) {
909 return edgeColorer.getActive();
910 }
911 return laneColorer.getActive();
912 }
913
914
915 int
getLaneEdgeScaleMode() const916 GUIVisualizationSettings::getLaneEdgeScaleMode() const {
917 if (UseMesoSim) {
918 return edgeScaler.getActive();
919 }
920 return laneScaler.getActive();
921 }
922
923
924 GUIColorScheme&
getLaneEdgeScheme()925 GUIVisualizationSettings::getLaneEdgeScheme() {
926 if (UseMesoSim) {
927 return edgeColorer.getScheme();
928 }
929 return laneColorer.getScheme();
930 }
931
932
933 GUIScaleScheme&
getLaneEdgeScaleScheme()934 GUIVisualizationSettings::getLaneEdgeScaleScheme() {
935 if (UseMesoSim) {
936 return edgeScaler.getScheme();
937 }
938 return laneScaler.getScheme();
939 }
940
941 void
save(OutputDevice & dev) const942 GUIVisualizationSettings::save(OutputDevice& dev) const {
943 dev.openTag(SUMO_TAG_VIEWSETTINGS_SCHEME);
944 dev.writeAttr(SUMO_ATTR_NAME, name);
945 dev.openTag(SUMO_TAG_VIEWSETTINGS_OPENGL);
946 dev.writeAttr("dither", dither);
947 dev.writeAttr("fps", fps);
948 dev.closeTag();
949 dev.openTag(SUMO_TAG_VIEWSETTINGS_BACKGROUND);
950 dev.writeAttr("backgroundColor", backgroundColor);
951 dev.writeAttr("showGrid", showGrid);
952 dev.writeAttr("gridXSize", gridXSize);
953 dev.writeAttr("gridYSize", gridYSize);
954 dev.closeTag();
955 // edges
956 dev.openTag(SUMO_TAG_VIEWSETTINGS_EDGES);
957 dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
958 dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
959 dev.writeAttr("laneShowBorders", laneShowBorders);
960 dev.writeAttr("showBikeMarkings", showBikeMarkings);
961 dev.writeAttr("showLinkDecals", showLinkDecals);
962 dev.writeAttr("showLinkRules", showLinkRules);
963 dev.writeAttr("showRails", showRails);
964 dev.writeAttr("hideConnectors", hideConnectors);
965 dev.writeAttr("widthExaggeration", laneWidthExaggeration);
966 dev.writeAttr("minSize", laneMinSize);
967 dev.writeAttr("showDirection", showLaneDirection);
968 dev.writeAttr("showSublanes", showSublanes);
969 dev.writeAttr("spreadSuperposed", spreadSuperposed);
970 dev.writeAttr("edgeParam", edgeParam);
971 dev.writeAttr("laneParam", laneParam);
972 dev.writeAttr("edgeData", edgeData);
973 dev.lf();
974 dev << " ";
975 edgeName.print(dev, "edgeName");
976 dev.lf();
977 dev << " ";
978 internalEdgeName.print(dev, "internalEdgeName");
979 dev.lf();
980 dev << " ";
981 cwaEdgeName.print(dev, "cwaEdgeName");
982 dev.lf();
983 dev << " ";
984 streetName.print(dev, "streetName");
985 dev.lf();
986 dev << " ";
987 edgeValue.print(dev, "edgeValue");
988 laneColorer.save(dev);
989 laneScaler.save(dev);
990 edgeColorer.save(dev);
991 edgeScaler.save(dev);
992 dev.closeTag();
993 // vehicles
994 dev.openTag(SUMO_TAG_VIEWSETTINGS_VEHICLES);
995 dev.writeAttr("vehicleMode", vehicleColorer.getActive());
996 dev.writeAttr("vehicleQuality", vehicleQuality);
997 vehicleSize.print(dev, "vehicle");
998 dev.writeAttr("showBlinker", showBlinker);
999 dev.writeAttr("drawMinGap", drawMinGap);
1000 dev.lf();
1001 dev << " ";
1002 vehicleName.print(dev, "vehicleName");
1003 dev.lf();
1004 dev << " ";
1005 vehicleValue.print(dev, "vehicleValue");
1006 vehicleColorer.save(dev);
1007 dev.closeTag();
1008 // persons
1009 dev.openTag(SUMO_TAG_VIEWSETTINGS_PERSONS);
1010 dev.writeAttr("personMode", personColorer.getActive());
1011 dev.writeAttr("personQuality", personQuality);
1012 personSize.print(dev, "person");
1013 dev.lf();
1014 dev << " ";
1015 personName.print(dev, "personName");
1016 dev.lf();
1017 dev << " ";
1018 personValue.print(dev, "personValue");
1019 personColorer.save(dev);
1020 dev.closeTag();
1021 // containers
1022 dev.openTag(SUMO_TAG_VIEWSETTINGS_CONTAINERS);
1023 dev.writeAttr("containerMode", containerColorer.getActive());
1024 dev.writeAttr("containerQuality", containerQuality);
1025 containerSize.print(dev, "container");
1026 dev.lf();
1027 dev << " ";
1028 containerName.print(dev, "containerName");
1029 containerColorer.save(dev);
1030 dev.closeTag();
1031 // junctions
1032 dev.openTag(SUMO_TAG_VIEWSETTINGS_JUNCTIONS);
1033 dev.writeAttr("junctionMode", junctionColorer.getActive());
1034 dev.lf();
1035 dev << " ";
1036 drawLinkTLIndex.print(dev, "drawLinkTLIndex");
1037 dev.lf();
1038 dev << " ";
1039 drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
1040 dev.lf();
1041 dev << " ";
1042 junctionName.print(dev, "junctionName");
1043 dev.lf();
1044 dev << " ";
1045 internalJunctionName.print(dev, "internalJunctionName");
1046 dev.lf();
1047 dev << " ";
1048 tlsPhaseIndex.print(dev, "tlsPhaseIndex");
1049 dev.lf();
1050 dev << " ";
1051 dev.writeAttr("showLane2Lane", showLane2Lane);
1052 dev.writeAttr("drawShape", drawJunctionShape);
1053 dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
1054 junctionSize.print(dev, "junction");
1055 junctionColorer.save(dev);
1056 dev.closeTag();
1057 // additionals
1058 dev.openTag(SUMO_TAG_VIEWSETTINGS_ADDITIONALS);
1059 dev.writeAttr("addMode", addMode);
1060 addSize.print(dev, "add");
1061 addName.print(dev, "addName");
1062 addFullName.print(dev, "addFullName");
1063 dev.closeTag();
1064 // pois
1065 dev.openTag(SUMO_TAG_VIEWSETTINGS_POIS);
1066 poiSize.print(dev, "poi");
1067 poiName.print(dev, "poiName");
1068 poiType.print(dev, "poiType");
1069 poiColorer.save(dev);
1070 dev.closeTag();
1071 // polys
1072 dev.openTag(SUMO_TAG_VIEWSETTINGS_POLYS);
1073 polySize.print(dev, "poly");
1074 polyName.print(dev, "polyName");
1075 polyType.print(dev, "polyType");
1076 polyColorer.save(dev);
1077 dev.closeTag();
1078 // legend
1079 dev.openTag(SUMO_TAG_VIEWSETTINGS_LEGEND);
1080 dev.writeAttr("showSizeLegend", showSizeLegend);
1081 dev.closeTag();
1082
1083 dev.closeTag();
1084 }
1085
1086
1087 bool
operator ==(const GUIVisualizationSettings & v2)1088 GUIVisualizationSettings::operator==(const GUIVisualizationSettings& v2) {
1089 if (dither != v2.dither) {
1090 return false;
1091 }
1092 if (fps != v2.fps) {
1093 return false;
1094 }
1095 if (backgroundColor != v2.backgroundColor) {
1096 return false;
1097 }
1098 if (selectionColor != v2.selectionColor) {
1099 return false;
1100 }
1101 if (selectedEdgeColor != v2.selectedEdgeColor) {
1102 return false;
1103 }
1104 if (selectedLaneColor != v2.selectedLaneColor) {
1105 return false;
1106 }
1107 if (selectedConnectionColor != v2.selectedConnectionColor) {
1108 return false;
1109 }
1110 if (selectedAdditionalColor != v2.selectedAdditionalColor) {
1111 return false;
1112 }
1113 if (showGrid != v2.showGrid) {
1114 return false;
1115 }
1116 if (gridXSize != v2.gridXSize) {
1117 return false;
1118 }
1119 if (gridYSize != v2.gridYSize) {
1120 return false;
1121 }
1122
1123 if (!(edgeColorer == v2.edgeColorer)) {
1124 return false;
1125 }
1126 if (!(edgeScaler == v2.edgeScaler)) {
1127 return false;
1128 }
1129 if (!(laneColorer == v2.laneColorer)) {
1130 return false;
1131 }
1132 if (!(laneScaler == v2.laneScaler)) {
1133 return false;
1134 }
1135 if (laneShowBorders != v2.laneShowBorders) {
1136 return false;
1137 }
1138 if (showBikeMarkings != v2.showBikeMarkings) {
1139 return false;
1140 }
1141 if (showLinkDecals != v2.showLinkDecals) {
1142 return false;
1143 }
1144 if (showLinkRules != v2.showLinkRules) {
1145 return false;
1146 }
1147 if (showRails != v2.showRails) {
1148 return false;
1149 }
1150 if (edgeName != v2.edgeName) {
1151 return false;
1152 }
1153 if (internalEdgeName != v2.internalEdgeName) {
1154 return false;
1155 }
1156 if (cwaEdgeName != v2.cwaEdgeName) {
1157 return false;
1158 }
1159 if (streetName != v2.streetName) {
1160 return false;
1161 }
1162 if (edgeValue != v2.edgeValue) {
1163 return false;
1164 }
1165 if (hideConnectors != v2.hideConnectors) {
1166 return false;
1167 }
1168 if (laneWidthExaggeration != v2.laneWidthExaggeration) {
1169 return false;
1170 }
1171 if (laneMinSize != v2.laneMinSize) {
1172 return false;
1173 }
1174 if (showLaneDirection != v2.showLaneDirection) {
1175 return false;
1176 }
1177 if (showSublanes != v2.showSublanes) {
1178 return false;
1179 }
1180 if (spreadSuperposed != v2.spreadSuperposed) {
1181 return false;
1182 }
1183 if (edgeParam != v2.edgeParam) {
1184 return false;
1185 }
1186 if (laneParam != v2.laneParam) {
1187 return false;
1188 }
1189 if (edgeData != v2.edgeData) {
1190 return false;
1191 }
1192 if (!(vehicleColorer == v2.vehicleColorer)) {
1193 return false;
1194 }
1195 if (vehicleQuality != v2.vehicleQuality) {
1196 return false;
1197 }
1198 if (vehicleSize != v2.vehicleSize) {
1199 return false;
1200 }
1201 if (showBlinker != v2.showBlinker) {
1202 return false;
1203 }
1204 if (drawLaneChangePreference != v2.drawLaneChangePreference) {
1205 return false;
1206 }
1207 if (drawMinGap != v2.drawMinGap) {
1208 return false;
1209 }
1210 if (showBTRange != v2.showBTRange) {
1211 return false;
1212 }
1213 if (vehicleName != v2.vehicleName) {
1214 return false;
1215 }
1216 if (vehicleValue != v2.vehicleValue) {
1217 return false;
1218 }
1219 if (!(personColorer == v2.personColorer)) {
1220 return false;
1221 }
1222 if (personQuality != v2.personQuality) {
1223 return false;
1224 }
1225 if (personSize != v2.personSize) {
1226 return false;
1227 }
1228 if (personName != v2.personName) {
1229 return false;
1230 }
1231 if (personValue != v2.personValue) {
1232 return false;
1233 }
1234 if (!(containerColorer == v2.containerColorer)) {
1235 return false;
1236 }
1237 if (containerQuality != v2.containerQuality) {
1238 return false;
1239 }
1240 if (containerSize != v2.containerSize) {
1241 return false;
1242 }
1243 if (containerName != v2.containerName) {
1244 return false;
1245 }
1246 if (!(junctionColorer == v2.junctionColorer)) {
1247 return false;
1248 }
1249 if (!(poiColorer == v2.poiColorer)) {
1250 return false;
1251 }
1252 if (!(polyColorer == v2.polyColorer)) {
1253 return false;
1254 }
1255 if (drawLinkTLIndex != v2.drawLinkTLIndex) {
1256 return false;
1257 }
1258 if (drawLinkJunctionIndex != v2.drawLinkJunctionIndex) {
1259 return false;
1260 }
1261 if (junctionName != v2.junctionName) {
1262 return false;
1263 }
1264 if (internalJunctionName != v2.internalJunctionName) {
1265 return false;
1266 }
1267 if (tlsPhaseIndex != v2.tlsPhaseIndex) {
1268 return false;
1269 }
1270
1271 if (showLane2Lane != v2.showLane2Lane) {
1272 return false;
1273 }
1274
1275 if (drawJunctionShape != v2.drawJunctionShape) {
1276 return false;
1277 }
1278
1279 if (drawCrossingsAndWalkingareas != v2.drawCrossingsAndWalkingareas) {
1280 return false;
1281 }
1282 if (junctionSize != v2.junctionSize) {
1283 return false;
1284 }
1285
1286 if (addMode != v2.addMode) {
1287 return false;
1288 }
1289 if (addSize != v2.addSize) {
1290 return false;
1291 }
1292 if (addName != v2.addName) {
1293 return false;
1294 }
1295 if (addFullName != v2.addFullName) {
1296 return false;
1297 }
1298 if (poiSize != v2.poiSize) {
1299 return false;
1300 }
1301 if (poiName != v2.poiName) {
1302 return false;
1303 }
1304 if (poiType != v2.poiType) {
1305 return false;
1306 }
1307 if (polySize != v2.polySize) {
1308 return false;
1309 }
1310 if (polyName != v2.polyName) {
1311 return false;
1312 }
1313 if (polyType != v2.polyType) {
1314 return false;
1315 }
1316
1317 if (showSizeLegend != v2.showSizeLegend) {
1318 return false;
1319 }
1320
1321 return true;
1322 }
1323
1324
1325 double
getExaggeration(const GUIVisualizationSettings & s,const GUIGlObject * o,double factor) const1326 GUIVisualizationSizeSettings::getExaggeration(const GUIVisualizationSettings& s, const GUIGlObject* o, double factor) const {
1327 /// @note should look normal-sized at zoom 1000
1328 return (constantSize && (!constantSizeSelected || o == nullptr || gSelected.isSelected(o)))
1329 ? MAX2((double)exaggeration, exaggeration * factor / s.scale)
1330 : (!constantSizeSelected || o == nullptr || gSelected.isSelected(o) ? exaggeration : 1);
1331 }
1332
1333
1334 const RGBColor&
getLinkColor(const LinkState & ls)1335 GUIVisualizationSettings::getLinkColor(const LinkState& ls) {
1336 switch (ls) {
1337 case LINKSTATE_TL_GREEN_MAJOR:
1338 return SUMO_color_TL_GREEN_MAJOR;
1339 case LINKSTATE_TL_GREEN_MINOR:
1340 return SUMO_color_TL_GREEN_MINOR;
1341 case LINKSTATE_TL_RED:
1342 return SUMO_color_TL_RED;
1343 case LINKSTATE_TL_REDYELLOW:
1344 return SUMO_color_TL_REDYELLOW;
1345 case LINKSTATE_TL_YELLOW_MAJOR:
1346 return SUMO_color_TL_YELLOW_MAJOR;
1347 case LINKSTATE_TL_YELLOW_MINOR:
1348 return SUMO_color_TL_YELLOW_MINOR;
1349 case LINKSTATE_TL_OFF_BLINKING:
1350 return SUMO_color_TL_OFF_BLINKING;
1351 case LINKSTATE_TL_OFF_NOSIGNAL:
1352 return SUMO_color_TL_OFF_NOSIGNAL;
1353 case LINKSTATE_MAJOR:
1354 return SUMO_color_MAJOR;
1355 case LINKSTATE_MINOR:
1356 return SUMO_color_MINOR;
1357 case LINKSTATE_EQUAL:
1358 return SUMO_color_EQUAL;
1359 case LINKSTATE_STOP:
1360 return SUMO_color_STOP;
1361 case LINKSTATE_ALLWAY_STOP:
1362 return SUMO_color_ALLWAY_STOP;
1363 case LINKSTATE_ZIPPER:
1364 return SUMO_color_ZIPPER;
1365 case LINKSTATE_DEADEND:
1366 return SUMO_color_DEADEND;
1367 default:
1368 throw ProcessError("No color defined for LinkState '" + std::string(ls, 1) + "'");
1369 }
1370 }
1371
1372 double
getTextAngle(double objectAngle) const1373 GUIVisualizationSettings::getTextAngle(double objectAngle) const {
1374 double viewAngle = objectAngle - angle;
1375 while (viewAngle < 0) {
1376 viewAngle += 360;
1377 }
1378 // fmod round towards zero which is not want we want for negative numbers
1379 viewAngle = fmod(viewAngle, 360);
1380 if (viewAngle > 90 && viewAngle < 270) {
1381 // avoid reading text on it's head
1382 objectAngle -= 180;
1383 }
1384 return objectAngle;
1385 }
1386
1387 /****************************************************************************/
1388
1389
1390