Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 : // This program and the accompanying materials are made available under the
5 : // terms of the Eclipse Public License 2.0 which is available at
6 : // https://www.eclipse.org/legal/epl-2.0/
7 : // This Source Code may also be made available under the following Secondary
8 : // Licenses when the conditions for such availability set forth in the Eclipse
9 : // Public License 2.0 are satisfied: GNU General Public License, version 2
10 : // or later which is available at
11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 : /****************************************************************************/
14 : /// @file GUIVisualizationSettings.cpp
15 : /// @author Daniel Krajzewicz
16 : /// @author Jakob Erdmann
17 : /// @author Michael Behrisch
18 : /// @date Sept 2002
19 : ///
20 : // Stores the information about how to visualize structures
21 : /****************************************************************************/
22 : #include <config.h>
23 :
24 : #include <map>
25 : #include <vector>
26 : #include <utils/common/MsgHandler.h>
27 : #include <utils/gui/div/GUIGlobalSelection.h>
28 :
29 : #include "GUIVisualizationSettings.h"
30 : #include "GUIPropertyScheme.h"
31 :
32 : // ===========================================================================
33 : // static members
34 : // ===========================================================================
35 :
36 : bool GUIVisualizationSettings::UseMesoSim = false;
37 :
38 : // -------------------------------------------------------------------------
39 : // color constants for link states
40 : // -------------------------------------------------------------------------
41 :
42 : const RGBColor SUMO_color_TL_GREEN_MAJOR(0, 255, 0);
43 : const RGBColor SUMO_color_TL_GREEN_MINOR(0, 179, 0);
44 : const RGBColor SUMO_color_TL_RED(255, 0, 0);
45 : const RGBColor SUMO_color_TL_REDYELLOW(255, 128, 0);
46 : const RGBColor SUMO_color_TL_YELLOW_MAJOR(255, 255, 128);
47 : const RGBColor SUMO_color_TL_YELLOW_MINOR(255, 255, 0);
48 : const RGBColor SUMO_color_TL_OFF_BLINKING(128, 64, 0);
49 : const RGBColor SUMO_color_TL_OFF_NOSIGNAL(0, 255, 255);
50 : const RGBColor SUMO_color_MAJOR(255, 255, 255);
51 : const RGBColor SUMO_color_MINOR(51, 51, 51);
52 : const RGBColor SUMO_color_EQUAL(128, 128, 128);
53 : const RGBColor SUMO_color_STOP(128, 0, 128);
54 : const RGBColor SUMO_color_ALLWAY_STOP(0, 0, 192);
55 : const RGBColor SUMO_color_ZIPPER(192, 128, 64);
56 : const RGBColor SUMO_color_DEADEND(0, 0, 0);
57 :
58 : // -------------------------------------------------------------------------
59 : // color constants for other objects
60 : // -------------------------------------------------------------------------
61 :
62 : const RGBColor GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW(255, 0, 255);
63 : const RGBColor GUIVisualizationColorSettings::childConnectionColor(255, 235, 0);
64 : const RGBColor GUIVisualizationColorSettings::editShapeColor(0, 200, 0);
65 : const RGBColor GUIVisualizationColorSettings::crossingColor(25, 25, 25);
66 : const RGBColor GUIVisualizationColorSettings::crossingPriorityColor(229, 229, 229);
67 : const RGBColor GUIVisualizationColorSettings::crossingInvalidColor(255, 25, 25);
68 :
69 :
70 : // -------------------------------------------------------------------------
71 : // color constants for other objects
72 : // -------------------------------------------------------------------------
73 :
74 : const RGBColor GUIVisualizationCandidateColorSettings::possible(0, 64, 0, 255);
75 : const RGBColor GUIVisualizationCandidateColorSettings::source(0, 255, 255, 255); // Cyan
76 : const RGBColor GUIVisualizationCandidateColorSettings::target(0, 255, 0, 255); // Green
77 : const RGBColor GUIVisualizationCandidateColorSettings::special(255, 0, 255, 255); // Magenta
78 : const RGBColor GUIVisualizationCandidateColorSettings::conflict(255, 255, 0, 255); // Yellow
79 : const RGBColor GUIVisualizationCandidateColorSettings::invalid(128, 128, 128, 255); // Yellow
80 :
81 : // -------------------------------------------------------------------------
82 : // Netedit size values
83 : // -------------------------------------------------------------------------
84 :
85 : const double GUIVisualizationNeteditSizeSettings::junctionBubbleRadius(4);
86 : const double GUIVisualizationNeteditSizeSettings::junctionGeometryPointRadius(1);
87 : const double GUIVisualizationNeteditSizeSettings::edgeGeometryPointRadius(1.2);
88 : const double GUIVisualizationNeteditSizeSettings::laneGeometryPointRadius(1);
89 : const double GUIVisualizationNeteditSizeSettings::connectionGeometryPointRadius(0.8);
90 : const double GUIVisualizationNeteditSizeSettings::crossingGeometryPointRadius(1);
91 : const double GUIVisualizationNeteditSizeSettings::polygonGeometryPointRadius(1.2);
92 : const double GUIVisualizationNeteditSizeSettings::polygonContourWidth(0.3);
93 : const double GUIVisualizationNeteditSizeSettings::polylineWidth(1);
94 : const double GUIVisualizationNeteditSizeSettings::additionalGeometryPointRadius(0.9);
95 :
96 : // -------------------------------------------------------------------------
97 : // additional values
98 : // -------------------------------------------------------------------------
99 :
100 : const double GUIVisualizationConnectionSettings::connectionWidth(0.2);
101 :
102 : // -------------------------------------------------------------------------
103 : // additional values
104 : // -------------------------------------------------------------------------
105 :
106 : const RGBColor GUIVisualizationAdditionalSettings::rerouterColor(255, 0, 0, 255);
107 : const double GUIVisualizationAdditionalSettings::rerouterSize(1);
108 : const RGBColor GUIVisualizationAdditionalSettings::VSSColor(255, 255, 255, 255);
109 : const double GUIVisualizationAdditionalSettings::VSSSize(1);
110 : const RGBColor GUIVisualizationAdditionalSettings::calibratorColor(255, 204, 0, 255);
111 : const double GUIVisualizationAdditionalSettings::calibratorWidth(1.4);
112 : const double GUIVisualizationAdditionalSettings::calibratorHeight(6);
113 : const RGBColor GUIVisualizationAdditionalSettings::routeProbeColor(255, 216, 0, 255);
114 : const double GUIVisualizationAdditionalSettings::routeProbeSize(1);
115 : const RGBColor GUIVisualizationAdditionalSettings::vaporizerColor(120, 216, 0, 255);
116 : const double GUIVisualizationAdditionalSettings::vaporizerSize(1);
117 : const double GUIVisualizationAdditionalSettings::stopEdgeSize(1);
118 : const RGBColor GUIVisualizationAdditionalSettings::connectionColor(255, 216, 0, 255);
119 : const RGBColor GUIVisualizationAdditionalSettings::connectionColorSelected(0, 0, 150, 255);
120 : const double GUIVisualizationAdditionalSettings::tractionSubstationSize(1);
121 : const RGBColor GUIVisualizationAdditionalSettings::overheadWireColorTop(255, 0, 0);
122 : const RGBColor GUIVisualizationAdditionalSettings::overheadWireColorBot(0, 255, 0);
123 : const RGBColor GUIVisualizationAdditionalSettings::overheadWireColorSelected(0, 0, 150, 255);
124 : const double GUIVisualizationAdditionalSettings::arrowWidth(1);
125 : const double GUIVisualizationAdditionalSettings::arrowLength(0.25);
126 : const double GUIVisualizationAdditionalSettings::arrowOffset(0.1);
127 : const RGBColor GUIVisualizationAdditionalSettings::TLSConnectionColor(0, 255, 0, 255);
128 :
129 : // -------------------------------------------------------------------------
130 : // detector values
131 : // -------------------------------------------------------------------------
132 :
133 : const RGBColor GUIVisualizationDetectorSettings::E1Color(255, 255, 0);
134 : const double GUIVisualizationDetectorSettings::E1Width(1);
135 : const double GUIVisualizationDetectorSettings::E1Height(2);
136 : const RGBColor GUIVisualizationDetectorSettings::E1InstantColor(255, 0, 255);
137 : const double GUIVisualizationDetectorSettings::E1InstantWidth(1);
138 : const double GUIVisualizationDetectorSettings::E1InstantHeight(2);
139 : const RGBColor GUIVisualizationDetectorSettings::E2Color(0, 204, 204);
140 : const double GUIVisualizationDetectorSettings::E2Width(1);
141 : const double GUIVisualizationDetectorSettings::E3Size(1);
142 : const RGBColor GUIVisualizationDetectorSettings::E3EntryColor(0, 92, 64);
143 : const RGBColor GUIVisualizationDetectorSettings::E3ExitColor(92, 0, 0);
144 : const double GUIVisualizationDetectorSettings::E3EntryExitWidth(1.7);
145 : const double GUIVisualizationDetectorSettings::E3EntryExitHeight(0.5);
146 :
147 : // -------------------------------------------------------------------------
148 : // StoppingPlace values
149 : // -------------------------------------------------------------------------
150 :
151 : const double GUIVisualizationStoppingPlaceSettings::stoppingPlaceSignOffset(1.5);
152 : const double GUIVisualizationStoppingPlaceSettings::busStopWidth(1);
153 : const double GUIVisualizationStoppingPlaceSettings::trainStopWidth(0.5);
154 : const double GUIVisualizationStoppingPlaceSettings::containerStopWidth(3);
155 : const double GUIVisualizationStoppingPlaceSettings::chargingStationWidth(1);
156 : const double GUIVisualizationStoppingPlaceSettings::symbolExternalRadius(1.1);
157 : const double GUIVisualizationStoppingPlaceSettings::symbolInternalRadius(0.9);
158 : const double GUIVisualizationStoppingPlaceSettings::symbolInternalTextSize(1.6);
159 :
160 : // -------------------------------------------------------------------------
161 : // Dotted contour values
162 : // -------------------------------------------------------------------------
163 :
164 : const double GUIVisualizationDottedContourSettings::segmentWidth(0.2);
165 : const double GUIVisualizationDottedContourSettings::segmentWidthSmall(0.1);
166 : const double GUIVisualizationDottedContourSettings::segmentWidthLarge(0.5);
167 : const double GUIVisualizationDottedContourSettings::segmentLength(2);
168 : const RGBColor GUIVisualizationDottedContourSettings::firstInspectedColor(235, 235, 235);
169 : const RGBColor GUIVisualizationDottedContourSettings::secondInspectedColor(20, 20, 20);
170 : const RGBColor GUIVisualizationDottedContourSettings::firstFrontColor(0, 0, 235);
171 : const RGBColor GUIVisualizationDottedContourSettings::secondFrontColor(0, 255, 0);
172 :
173 : // -------------------------------------------------------------------------
174 : // 3D light presets
175 : // -------------------------------------------------------------------------
176 : const RGBColor OSG_color_AMBIENT(32, 32, 32, 255);
177 : const RGBColor OSG_color_DIFFUSE(64, 64, 64, 255);
178 : const RGBColor OSG_color_SKY(51, 51, 102, 255);
179 :
180 : // -------------------------------------------------------------------------
181 : // widths of certain netedit objects
182 : // -------------------------------------------------------------------------
183 :
184 : const double GUIVisualizationWidthSettings::routeWidth(0.66);
185 : const double GUIVisualizationWidthSettings::embeddedRouteWidth(0.55);
186 :
187 : // -------------------------------------------------------------------------
188 : // details of certain netedit objects (0 = drawn always)
189 : // -------------------------------------------------------------------------
190 :
191 : const double GUIVisualizationDetailSettings::tmp(5);
192 :
193 : // -------------------------------------------------------------------------
194 : // scheme names
195 : // -------------------------------------------------------------------------
196 :
197 : const std::string GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL("by param (numerical, streetwise)");
198 : const std::string GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL("by param (numerical, lanewise)");
199 : const std::string GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL("by param (numerical)");
200 : const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL("by edgeData (numerical, streetwise)");
201 : const std::string GUIVisualizationSettings::SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL("by attribute (numerical)");
202 : const std::string GUIVisualizationSettings::SCHEME_NAME_SELECTION("by selection");
203 : const std::string GUIVisualizationSettings::SCHEME_NAME_TYPE("by type");
204 : const std::string GUIVisualizationSettings::SCHEME_NAME_PERMISSION_CODE("by permission code");
205 : const std::string GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_LIVE("by live edgeData");
206 :
207 : const double GUIVisualizationSettings::MISSING_DATA(std::numeric_limits<double>::max());
208 : RGBColor GUIVisualizationSettings::COL_MISSING_DATA(225, 225, 225);
209 :
210 : std::map<std::string, std::vector<RGBColor> > GUIVisualizationSettings::RAINBOW_SCHEMES({
211 : // cannot use predefined colors to avoid "static initialization order fiasco"
212 : {"classic", std::vector<RGBColor>({RGBColor(255, 0, 0), RGBColor(255, 128, 0), RGBColor(255, 255, 0), RGBColor(0, 255, 0), RGBColor(0, 255, 255), RGBColor(0, 0, 255), RGBColor(255, 0, 255)})},
213 : {"YlOrRd", std::vector<RGBColor>({RGBColor(255, 255, 178), RGBColor(254, 217, 118), RGBColor(254, 178, 76), RGBColor(253, 141, 60), RGBColor(252, 78, 42), RGBColor(227, 26, 28), RGBColor(177, 0, 38)})},
214 : {"RdBu", std::vector<RGBColor>({RGBColor(178, 24, 43), RGBColor(239, 138, 98), RGBColor(253, 219, 199), RGBColor(247, 247, 247), RGBColor(209, 229, 240), RGBColor(103, 169, 207), RGBColor(33, 102, 172)})},
215 : });
216 :
217 : // color constants for scheme background
218 : #define COL_SCHEME_EMISSION RGBColor(255,255,210)
219 : #define COL_SCHEME_MISC RGBColor(210,220,255)
220 : #define COL_SCHEME_STATIC RGBColor(230,230,230)
221 : #define COL_SCHEME_DYNAMIC RGBColor(220,255,220)
222 :
223 : // ===========================================================================
224 : // member method definitions
225 : // ===========================================================================
226 :
227 : // ---------------------------------------------------------------------------
228 : // GUIVisualizationTextSettings - methods
229 : // ---------------------------------------------------------------------------
230 :
231 2206227 : GUIVisualizationTextSettings::GUIVisualizationTextSettings(bool _showText, double _size, RGBColor _color, RGBColor _bgColor, bool _constSize, bool _onlySelected) :
232 2206227 : showText(_showText),
233 2206227 : size(_size),
234 2206227 : color(_color),
235 2206227 : bgColor(_bgColor),
236 2206227 : constSize(_constSize),
237 2206227 : onlySelected(_onlySelected) {
238 2206227 : }
239 :
240 :
241 : bool
242 0 : GUIVisualizationTextSettings::operator==(const GUIVisualizationTextSettings& other) {
243 0 : return (showText == other.showText) &&
244 0 : (size == other.size) &&
245 0 : (color == other.color) &&
246 0 : (bgColor == other.bgColor) &&
247 0 : (constSize == other.constSize) &&
248 0 : (onlySelected == other.onlySelected);
249 : }
250 :
251 :
252 : bool
253 0 : GUIVisualizationTextSettings::operator!=(const GUIVisualizationTextSettings& other) {
254 0 : return (showText != other.showText) ||
255 0 : (size != other.size) ||
256 0 : (color != other.color) ||
257 0 : (bgColor != other.bgColor) ||
258 0 : (constSize != other.constSize) ||
259 0 : (onlySelected != other.onlySelected);
260 : }
261 :
262 :
263 : void
264 0 : GUIVisualizationTextSettings::print(OutputDevice& dev, const std::string& name) const {
265 0 : dev.writeAttr(name + "_show", showText);
266 0 : dev.writeAttr(name + "_size", size);
267 0 : dev.writeAttr(name + "_color", color);
268 0 : dev.writeAttr(name + "_bgColor", bgColor);
269 0 : dev.writeAttr(name + "_constantSize", constSize);
270 0 : dev.writeAttr(name + "_onlySelected", onlySelected);
271 0 : }
272 :
273 :
274 : double
275 0 : GUIVisualizationTextSettings::scaledSize(double scale, double constFactor) const {
276 0 : return constSize ? (size / scale) : (size * constFactor);
277 : }
278 :
279 :
280 : bool
281 197250105 : GUIVisualizationTextSettings::show(const GUIGlObject* o) const {
282 197250105 : return showText && (!onlySelected || o == nullptr || gSelected.isSelected(o));
283 : }
284 :
285 : // ---------------------------------------------------------------------------
286 : // GUIVisualizationRainbowSettings - methods
287 : // ---------------------------------------------------------------------------
288 :
289 228205 : GUIVisualizationRainbowSettings::GUIVisualizationRainbowSettings(bool _hideMin, double _minThreshold, bool _hideMax, double _maxThreshold, bool _setNeutral, double _neutralThreshold, bool _fixRange) :
290 228205 : hideMin(_hideMin),
291 228205 : minThreshold(_minThreshold),
292 228205 : hideMax(_hideMax),
293 228205 : maxThreshold(_maxThreshold),
294 228205 : setNeutral(_setNeutral),
295 228205 : neutralThreshold(_neutralThreshold),
296 228205 : fixRange(_fixRange),
297 228205 : colors(GUIVisualizationSettings::RAINBOW_SCHEMES["classic"])
298 228205 : { }
299 :
300 :
301 : bool
302 0 : GUIVisualizationRainbowSettings::operator==(const GUIVisualizationRainbowSettings& other) {
303 0 : return (hideMin == other.hideMin) &&
304 0 : (minThreshold == other.minThreshold) &&
305 0 : (hideMin == other.hideMin) &&
306 0 : (maxThreshold == other.maxThreshold) &&
307 0 : (setNeutral == other.setNeutral) &&
308 0 : (neutralThreshold == other.neutralThreshold) &&
309 0 : (fixRange == other.fixRange);
310 : }
311 :
312 :
313 : bool
314 0 : GUIVisualizationRainbowSettings::operator!=(const GUIVisualizationRainbowSettings& other) {
315 0 : return !((*this) == other);
316 : }
317 :
318 :
319 : void
320 0 : GUIVisualizationRainbowSettings::print(OutputDevice& dev, const std::string& name) const {
321 0 : dev.writeAttr(name + "HideCheck", hideMin);
322 0 : dev.writeAttr(name + "HideThreshold", minThreshold);
323 0 : dev.writeAttr(name + "HideCheck2", hideMax);
324 0 : dev.writeAttr(name + "HideThreshold2", maxThreshold);
325 0 : dev.writeAttr(name + "SetNeutral", setNeutral);
326 0 : dev.writeAttr(name + "NeutralThreshold", neutralThreshold);
327 0 : dev.writeAttr(name + "FixRange", fixRange);
328 0 : }
329 :
330 :
331 : // ---------------------------------------------------------------------------
332 : // GUIVisualizationSizeSettings - methods
333 : // ---------------------------------------------------------------------------
334 :
335 532533 : GUIVisualizationSizeSettings::GUIVisualizationSizeSettings(double _minSize, double _exaggeration, bool _constantSize, bool _constantSizeSelected) :
336 532533 : minSize(_minSize),
337 532533 : exaggeration(_exaggeration),
338 532533 : constantSize(_constantSize),
339 532533 : constantSizeSelected(_constantSizeSelected) {
340 532533 : }
341 :
342 :
343 : double
344 81254128 : GUIVisualizationSizeSettings::getExaggeration(const GUIVisualizationSettings& s, const GUIGlObject* o, double factor) const {
345 : // declare exaggeration final
346 : double exaggerationFinal;
347 : /// @note should look normal-sized at zoom 1000
348 81254128 : if (constantSize && (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o))) {
349 0 : exaggerationFinal = MAX2(exaggeration, exaggeration * factor / s.scale);
350 81254128 : } else if (!constantSizeSelected || (o == nullptr) || gSelected.isSelected(o)) {
351 81254128 : exaggerationFinal = exaggeration;
352 : } else {
353 : exaggerationFinal = 1;
354 : }
355 : // add selectorFrameScale
356 81254128 : if ((o != nullptr) && gSelected.isSelected(o)) {
357 0 : return (exaggerationFinal * s.selectorFrameScale);
358 : } else {
359 81254128 : return exaggerationFinal;
360 : }
361 : }
362 :
363 :
364 : bool
365 0 : GUIVisualizationSizeSettings::operator==(const GUIVisualizationSizeSettings& other) {
366 0 : return (constantSize == other.constantSize) &&
367 0 : (constantSizeSelected == other.constantSizeSelected) &&
368 0 : (minSize == other.minSize) &&
369 0 : (exaggeration == other.exaggeration);
370 : }
371 :
372 :
373 : bool
374 0 : GUIVisualizationSizeSettings::operator!=(const GUIVisualizationSizeSettings& other) {
375 0 : return (constantSize != other.constantSize) ||
376 0 : (constantSizeSelected != other.constantSizeSelected) ||
377 0 : (minSize != other.minSize) ||
378 0 : (exaggeration != other.exaggeration);
379 : }
380 :
381 :
382 : void
383 0 : GUIVisualizationSizeSettings::print(OutputDevice& dev, const std::string& name) const {
384 0 : dev.writeAttr(name + "_minSize", minSize);
385 0 : dev.writeAttr(name + "_exaggeration", exaggeration);
386 0 : dev.writeAttr(name + "_constantSize", constantSize);
387 0 : dev.writeAttr(name + "_constantSizeSelected", constantSizeSelected);
388 0 : }
389 :
390 : // ---------------------------------------------------------------------------
391 : // GUIVisualizationColorSettings - methods
392 : // ---------------------------------------------------------------------------
393 :
394 76047 : GUIVisualizationColorSettings::GUIVisualizationColorSettings() :
395 76047 : selectionColor(0, 0, 204, 255),
396 76047 : selectedEdgeColor(0, 0, 204, 255),
397 76047 : selectedLaneColor(0, 0, 128, 255),
398 76047 : selectedConnectionColor(0, 0, 100, 255),
399 76047 : selectedProhibitionColor(0, 0, 120, 255),
400 76047 : selectedCrossingColor(0, 100, 196, 255),
401 76047 : selectedAdditionalColor(0, 0, 150, 255),
402 76047 : selectedRouteColor(0, 0, 150, 255),
403 76047 : selectedVehicleColor(0, 0, 100, 255),
404 76047 : selectedPersonColor(0, 0, 120, 255),
405 76047 : selectedPersonPlanColor(0, 0, 130, 255),
406 76047 : selectedContainerColor(0, 0, 120, 255),
407 76047 : selectedContainerPlanColor(0, 0, 130, 255),
408 76047 : selectedEdgeDataColor(0, 0, 150, 255),
409 76047 : busStopColor(76, 170, 50),
410 76047 : busStopColorSign(255, 235, 0),
411 76047 : trainStopColor(76, 170, 50),
412 76047 : trainStopColorSign(255, 235, 0),
413 76047 : containerStopColor(83, 89, 172),
414 76047 : containerStopColorSign(177, 184, 186, 171),
415 76047 : chargingStationColor(114, 210, 252),
416 76047 : chargingStationColorSign(255, 235, 0),
417 76047 : chargingStationColorCharge(255, 180, 0),
418 76047 : parkingAreaColor(83, 89, 172),
419 76047 : parkingAreaColorSign(177, 184, 186),
420 76047 : parkingSpaceColorContour(0, 255, 0),
421 76047 : parkingSpaceColor(255, 200, 200),
422 76047 : stopColor(220, 20, 30),
423 76047 : waypointColor(0, 127, 14),
424 76047 : vehicleTripColor(255, 128, 0),
425 76047 : stopPersonColor(255, 0, 0),
426 76047 : personTripColor(200, 0, 255),
427 76047 : walkColor(0, 255, 0),
428 76047 : rideColor(0, 0, 255),
429 76047 : stopContainerColor(255, 0, 0),
430 76047 : transportColor(100, 200, 0),
431 76047 : transhipColor(100, 0, 200) {
432 76047 : }
433 :
434 :
435 : bool
436 0 : GUIVisualizationColorSettings::operator==(const GUIVisualizationColorSettings& v2) {
437 0 : return (selectionColor == v2.selectionColor) &&
438 0 : (selectedEdgeColor == v2.selectedEdgeColor) &&
439 0 : (selectedLaneColor == v2.selectedLaneColor) &&
440 0 : (selectedConnectionColor == v2.selectedConnectionColor) &&
441 0 : (selectedProhibitionColor == v2.selectedProhibitionColor) &&
442 0 : (selectedCrossingColor == v2.selectedCrossingColor) &&
443 0 : (selectedAdditionalColor == v2.selectedAdditionalColor) &&
444 0 : (selectedRouteColor == v2.selectedRouteColor) &&
445 0 : (selectedVehicleColor == v2.selectedVehicleColor) &&
446 0 : (selectedPersonColor == v2.selectedPersonColor) &&
447 0 : (selectedContainerColor == v2.selectedContainerColor) &&
448 0 : (selectedPersonPlanColor == v2.selectedPersonPlanColor) &&
449 0 : (selectedEdgeDataColor == v2.selectedEdgeDataColor) &&
450 0 : (busStopColor == v2.busStopColor) &&
451 0 : (busStopColorSign == v2.busStopColorSign) &&
452 0 : (trainStopColor == v2.trainStopColor) &&
453 0 : (trainStopColorSign == v2.trainStopColorSign) &&
454 0 : (containerStopColor == v2.containerStopColor) &&
455 0 : (containerStopColorSign == v2.containerStopColorSign) &&
456 0 : (chargingStationColor == v2.chargingStationColor) &&
457 0 : (chargingStationColorSign == v2.chargingStationColorSign) &&
458 0 : (chargingStationColorCharge == v2.chargingStationColorCharge) &&
459 0 : (parkingAreaColor == v2.parkingAreaColor) &&
460 0 : (parkingAreaColorSign == v2.parkingAreaColorSign) &&
461 0 : (parkingSpaceColorContour == v2.parkingSpaceColorContour) &&
462 0 : (parkingSpaceColor == v2.parkingSpaceColor) &&
463 0 : (stopColor == v2.stopColor) &&
464 0 : (waypointColor == v2.waypointColor) &&
465 0 : (vehicleTripColor == v2.vehicleTripColor) &&
466 0 : (stopPersonColor == v2.stopPersonColor) &&
467 0 : (personTripColor == v2.personTripColor) &&
468 0 : (walkColor == v2.walkColor) &&
469 0 : (rideColor == v2.rideColor) &&
470 0 : (stopContainerColor == v2.stopContainerColor) &&
471 0 : (transportColor == v2.transportColor) &&
472 0 : (transhipColor == v2.transhipColor);
473 : }
474 :
475 :
476 : bool
477 0 : GUIVisualizationColorSettings::operator!=(const GUIVisualizationColorSettings& v2) {
478 0 : return (selectionColor != v2.selectionColor) ||
479 0 : (selectedEdgeColor != v2.selectedEdgeColor) ||
480 0 : (selectedLaneColor != v2.selectedLaneColor) ||
481 0 : (selectedConnectionColor != v2.selectedConnectionColor) ||
482 0 : (selectedProhibitionColor != v2.selectedProhibitionColor) ||
483 0 : (selectedCrossingColor != v2.selectedCrossingColor) ||
484 0 : (selectedAdditionalColor != v2.selectedAdditionalColor) ||
485 0 : (selectedRouteColor != v2.selectedRouteColor) ||
486 0 : (selectedVehicleColor != v2.selectedVehicleColor) ||
487 0 : (selectedPersonColor != v2.selectedPersonColor) ||
488 0 : (selectedContainerColor != v2.selectedContainerColor) ||
489 0 : (selectedPersonPlanColor != v2.selectedPersonPlanColor) ||
490 0 : (selectedEdgeDataColor != v2.selectedEdgeDataColor) ||
491 0 : (busStopColor != v2.busStopColor) ||
492 0 : (busStopColorSign != v2.busStopColorSign) ||
493 0 : (trainStopColor != v2.trainStopColor) ||
494 0 : (trainStopColorSign != v2.trainStopColorSign) ||
495 0 : (containerStopColor != v2.containerStopColor) ||
496 0 : (containerStopColorSign != v2.containerStopColorSign) ||
497 0 : (chargingStationColor != v2.chargingStationColor) ||
498 0 : (chargingStationColorSign != v2.chargingStationColorSign) ||
499 0 : (chargingStationColorCharge != v2.chargingStationColorCharge) ||
500 0 : (parkingAreaColor != v2.parkingAreaColor) ||
501 0 : (parkingAreaColorSign != v2.parkingAreaColorSign) ||
502 0 : (parkingSpaceColorContour != v2.parkingSpaceColorContour) ||
503 0 : (parkingSpaceColor != v2.parkingSpaceColor) ||
504 0 : (stopColor != v2.stopColor) ||
505 0 : (waypointColor != v2.waypointColor) ||
506 0 : (vehicleTripColor != v2.vehicleTripColor) ||
507 0 : (stopPersonColor != v2.stopPersonColor) ||
508 0 : (personTripColor != v2.personTripColor) ||
509 0 : (walkColor != v2.walkColor) ||
510 0 : (rideColor != v2.rideColor) ||
511 0 : (stopContainerColor != v2.stopContainerColor) ||
512 0 : (transportColor != v2.transportColor) ||
513 0 : (transhipColor != v2.transhipColor);
514 : }
515 :
516 : // ---------------------------------------------------------------------------
517 : // GUIVisualizationWidthSettings - methods
518 : // ---------------------------------------------------------------------------
519 :
520 76047 : GUIVisualizationWidthSettings::GUIVisualizationWidthSettings() :
521 76047 : tripWidth(0.2),
522 76047 : personTripWidth(0.25),
523 76047 : walkWidth(0.25),
524 76047 : rideWidth(0.25),
525 76047 : transportWidth(0.25),
526 76047 : transhipWidth(0.25) {
527 76047 : }
528 :
529 :
530 : bool
531 0 : GUIVisualizationWidthSettings::operator==(const GUIVisualizationWidthSettings& v2) {
532 0 : return (tripWidth == v2.tripWidth) &&
533 0 : (personTripWidth == v2.personTripWidth) &&
534 0 : (walkWidth == v2.walkWidth) &&
535 0 : (rideWidth == v2.rideWidth) &&
536 0 : (transportWidth == v2.transportWidth) &&
537 0 : (transhipWidth == v2.transhipWidth);
538 : }
539 :
540 :
541 : bool
542 0 : GUIVisualizationWidthSettings::operator!=(const GUIVisualizationWidthSettings& v2) {
543 0 : return (tripWidth != v2.tripWidth) ||
544 0 : (personTripWidth != v2.personTripWidth) ||
545 0 : (walkWidth != v2.walkWidth) ||
546 0 : (rideWidth != v2.rideWidth) ||
547 0 : (transportWidth != v2.transportWidth) ||
548 0 : (transhipWidth != v2.transhipWidth);
549 : }
550 :
551 : // ---------------------------------------------------------------------------
552 : // GUIVisualizationWidthSettings - methods
553 : // ---------------------------------------------------------------------------
554 :
555 76047 : GUIVisualizationSettings::GUIVisualizationSettings(const std::string& _name, bool _netedit) :
556 76047 : name(_name),
557 76047 : netedit(_netedit),
558 76047 : angle(0),
559 76047 : dither(false),
560 76047 : fps(false),
561 76047 : trueZ(false),
562 76047 : backgroundColor(RGBColor::WHITE),
563 76047 : showGrid(false), gridXSize(100), gridYSize(100),
564 76047 : laneShowBorders(false), showBikeMarkings(true), showLinkDecals(true),
565 76047 : realisticLinkRules(false),
566 76047 : showLinkRules(true),
567 76047 : showRails(true),
568 76047 : edgeName(false, 60, RGBColor::ORANGE),
569 76047 : internalEdgeName(false, 45, RGBColor(128, 64, 0, 255)),
570 76047 : cwaEdgeName(false, 60, RGBColor::MAGENTA),
571 76047 : streetName(false, 60, RGBColor::YELLOW),
572 76047 : edgeValue(false, 100, RGBColor::CYAN),
573 76047 : edgeScaleValue(false, 100, RGBColor::BLUE),
574 76047 : hideConnectors(false),
575 76047 : laneWidthExaggeration(1),
576 76047 : laneMinSize(0),
577 76047 : showLaneDirection(false),
578 76047 : showSublanes(true),
579 76047 : spreadSuperposed(false),
580 76047 : disableHideByZoom(false),
581 76047 : edgeParam("EDGE_KEY"),
582 76047 : laneParam("LANE_KEY"),
583 76047 : vehicleParam("PARAM_NUMERICAL"),
584 76047 : vehicleScaleParam("PARAM_NUMERICAL"),
585 76047 : vehicleTextParam("PARAM_TEXT"),
586 76047 : edgeData("speed"),
587 76047 : edgeDataID(""),
588 76047 : edgeDataScaling(""),
589 76047 : edgeValueRainBow(false, 0, false, 200, false, 0, false),
590 76047 : vehicleQuality(0), showBlinker(true),
591 76047 : drawLaneChangePreference(false),
592 76047 : drawMinGap(false),
593 76047 : drawBrakeGap(false),
594 76047 : showBTRange(false),
595 76047 : showRouteIndex(false),
596 76047 : scaleLength(true),
597 76047 : drawReversed(false),
598 76047 : showParkingInfo(false),
599 76047 : showChargingInfo(false),
600 76047 : vehicleSize(1),
601 76047 : vehicleName(false, 60, RGBColor(204, 153, 0, 255)),
602 76047 : vehicleValue(false, 80, RGBColor::CYAN),
603 76047 : vehicleScaleValue(false, 80, RGBColor::GREY),
604 76047 : vehicleText(false, 80, RGBColor::RED),
605 76047 : personQuality(netedit ? 2 : 0),
606 76047 : personSize(1),
607 76047 : personName(false, 60, RGBColor(0, 153, 204, 255)),
608 76047 : personValue(false, 80, RGBColor::CYAN),
609 76047 : showPedestrianNetwork(true),
610 76047 : pedestrianNetworkColor(RGBColor(179, 217, 255)),
611 76047 : containerQuality(0),
612 76047 : containerSize(1),
613 76047 : containerName(false, 60, RGBColor(0, 153, 204, 255)),
614 76047 : drawLinkTLIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
615 76047 : drawLinkJunctionIndex(false, 65, RGBColor(128, 128, 255, 255), RGBColor::INVISIBLE, false),
616 76047 : junctionID(false, 60, RGBColor(0, 255, 128, 255)),
617 76047 : junctionName(false, 60, RGBColor(192, 255, 128, 255)),
618 76047 : internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)),
619 76047 : tlsPhaseIndex(false, 150, RGBColor::YELLOW),
620 76047 : tlsPhaseName(false, 150, RGBColor::ORANGE),
621 76047 : showLane2Lane(false),
622 76047 : drawJunctionShape(true),
623 76047 : drawCrossingsAndWalkingareas(true),
624 76047 : junctionSize(1),
625 76047 : junctionValueRainBow(false, 0, false, 100, false, 0, false),
626 76047 : addMode(0),
627 76047 : addSize(1),
628 76047 : addName(false, 60, RGBColor(255, 0, 128, 255)),
629 76047 : addFullName(false, 60, RGBColor(255, 0, 128, 255)),
630 76047 : poiSize(0),
631 76047 : poiDetail(16),
632 76047 : poiName(false, 50, RGBColor(0, 127, 70, 255)),
633 76047 : poiType(false, 60, RGBColor(0, 127, 70, 255)),
634 76047 : poiText(false, 80, RGBColor(140, 0, 255, 255)),
635 76047 : poiTextParam("PARAM_TEXT"),
636 76047 : poiUseCustomLayer(false),
637 76047 : poiCustomLayer(0),
638 76047 : polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)),
639 76047 : polyType(false, 60, RGBColor(255, 0, 128, 255)),
640 76047 : polyUseCustomLayer(false),
641 76047 : polyCustomLayer(0),
642 76047 : dataValue(false, 100, RGBColor::CYAN),
643 76047 : tazRelWidthExaggeration(1),
644 76047 : edgeRelWidthExaggeration(1),
645 76047 : relDataAttr("count"),
646 76047 : dataValueRainBow(false, -100, false, 100, false, 0, false),
647 76047 : show3DTLSLinkMarkers(true),
648 76047 : show3DTLSDomes(true),
649 76047 : generate3DTLSModels(false),
650 76047 : show3DHeadUpDisplay(true),
651 76047 : ambient3DLight(OSG_color_AMBIENT),
652 76047 : diffuse3DLight(OSG_color_DIFFUSE),
653 76047 : skyColor(OSG_color_SKY),
654 76047 : showSizeLegend(true),
655 76047 : showColorLegend(false),
656 76047 : showVehicleColorLegend(false),
657 76047 : gaming(false),
658 76047 : drawBoundaries(false),
659 76047 : selectorFrameScale(1.),
660 76047 : drawForViewObjectsHandler(false),
661 76047 : drawForRectangleSelection(false),
662 76047 : forceDrawForRectangleSelection(false),
663 76047 : disableDottedContours(false),
664 76047 : geometryIndices(false, 50, RGBColor(255, 0, 128, 255)),
665 76047 : secondaryShape(false),
666 76047 : lefthand(false),
667 76047 : disableLaneIcons(false),
668 76047 : myIgnoreHideByZoom(false) {
669 : // init defaults depending of netedit or SUMO-GUI
670 76047 : if (netedit) {
671 0 : initNeteditDefaults();
672 : } else {
673 76047 : initSumoGuiDefaults();
674 : }
675 76047 : }
676 :
677 :
678 : bool
679 0 : GUIVisualizationSettings::checkDrawJunction(const Boundary& b, const bool selected) const {
680 0 : if (drawForViewObjectsHandler) {
681 : return false;
682 0 : } else if (junctionSize.constantSize) {
683 : return true;
684 0 : } else if (junctionSize.constantSizeSelected && selected) {
685 : return true;
686 0 : } else if (drawLinkTLIndex.showText && drawLinkTLIndex.constSize) {
687 : return true;
688 0 : } else if (drawLinkJunctionIndex.showText && drawLinkJunctionIndex.constSize) {
689 : return true;
690 0 : } else if (junctionID.showText && junctionID.constSize) {
691 : return true;
692 0 : } else if (junctionName.showText && junctionName.constSize) {
693 : return true;
694 0 : } else if (internalJunctionName.showText && internalJunctionName.constSize) {
695 : return true;
696 0 : } else if (tlsPhaseIndex.showText && tlsPhaseIndex.constSize) {
697 : return true;
698 0 : } else if (tlsPhaseName.showText && tlsPhaseName.constSize) {
699 : return true;
700 : } else {
701 0 : return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;
702 : }
703 : }
704 :
705 :
706 : bool
707 0 : GUIVisualizationSettings::checkDrawEdge(const Boundary& b) const {
708 0 : if (drawForViewObjectsHandler) {
709 : // needed if we're selecting using a rectangle
710 : return true;
711 0 : } else if (disableHideByZoom) {
712 : return true;
713 0 : } else if (myIgnoreHideByZoom) {
714 : return true;
715 : } else {
716 0 : return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;
717 : }
718 : }
719 :
720 :
721 : void
722 0 : GUIVisualizationSettings::updateIgnoreHideByZoom() {
723 : // general
724 0 : if (disableHideByZoom) {
725 0 : myIgnoreHideByZoom = true;
726 : // junctions
727 0 : } else if (junctionSize.constantSize && junctionSize.constantSizeSelected) {
728 0 : myIgnoreHideByZoom = true;
729 0 : } else if (drawLinkTLIndex.showText && drawLinkTLIndex.constSize) {
730 0 : myIgnoreHideByZoom = true;
731 0 : } else if (drawLinkJunctionIndex.showText && drawLinkJunctionIndex.constSize) {
732 0 : myIgnoreHideByZoom = true;
733 0 : } else if (junctionID.showText && junctionID.constSize) {
734 0 : myIgnoreHideByZoom = true;
735 0 : } else if (junctionName.showText && junctionName.constSize) {
736 0 : myIgnoreHideByZoom = true;
737 0 : } else if (internalJunctionName.showText && internalJunctionName.constSize) {
738 0 : myIgnoreHideByZoom = true;
739 0 : } else if (tlsPhaseIndex.showText && tlsPhaseIndex.constSize) {
740 0 : myIgnoreHideByZoom = true;
741 0 : } else if (tlsPhaseName.showText && tlsPhaseName.constSize) {
742 0 : myIgnoreHideByZoom = true;
743 : // edges
744 0 : } else if (edgeName.showText) {
745 0 : myIgnoreHideByZoom = true;
746 0 : } else if (internalEdgeName.showText && internalEdgeName.constSize) {
747 0 : myIgnoreHideByZoom = true;
748 0 : } else if (cwaEdgeName.showText && cwaEdgeName.constSize) {
749 0 : myIgnoreHideByZoom = true;
750 0 : } else if (streetName.showText && streetName.constSize) {
751 0 : myIgnoreHideByZoom = true;
752 0 : } else if (edgeValue.showText && edgeValue.constSize) {
753 0 : myIgnoreHideByZoom = true;
754 0 : } else if (edgeScaleValue.showText && edgeScaleValue.constSize) {
755 0 : myIgnoreHideByZoom = true;
756 : // additionals
757 0 : } else if (addSize.constantSize) {
758 0 : myIgnoreHideByZoom = true;
759 0 : } else if (addSize.constantSizeSelected) {
760 0 : myIgnoreHideByZoom = true;
761 0 : } else if (addName.showText && addName.constSize) {
762 0 : myIgnoreHideByZoom = true;
763 0 : } else if (addFullName.showText && addFullName.constSize) {
764 0 : myIgnoreHideByZoom = true;
765 : // POIs
766 0 : } else if (poiSize.constantSize) {
767 0 : myIgnoreHideByZoom = true;
768 0 : } else if (poiSize.constantSizeSelected) {
769 0 : myIgnoreHideByZoom = true;
770 0 : } else if (poiName.showText && poiName.constSize) {
771 0 : myIgnoreHideByZoom = true;
772 0 : } else if (poiType.showText && poiType.constSize) {
773 0 : myIgnoreHideByZoom = true;
774 0 : } else if (poiText.showText && poiText.constSize) {
775 0 : myIgnoreHideByZoom = true;
776 : // vehicles
777 0 : } else if (vehicleSize.constantSize) {
778 0 : myIgnoreHideByZoom = true;
779 0 : } else if (vehicleSize.constantSizeSelected) {
780 0 : myIgnoreHideByZoom = true;
781 0 : } else if (vehicleName.showText && vehicleName.constSize) {
782 0 : myIgnoreHideByZoom = true;
783 0 : } else if (vehicleValue.showText && vehicleValue.constSize) {
784 0 : myIgnoreHideByZoom = true;
785 0 : } else if (vehicleScaleValue.showText && vehicleScaleValue.constSize) {
786 0 : myIgnoreHideByZoom = true;
787 0 : } else if (vehicleText.showText && vehicleText.constSize) {
788 0 : myIgnoreHideByZoom = true;
789 : // persons
790 0 : } else if (personSize.constantSize) {
791 0 : myIgnoreHideByZoom = true;
792 0 : } else if (personSize.constantSizeSelected) {
793 0 : myIgnoreHideByZoom = true;
794 0 : } else if (personName.showText && personName.constSize) {
795 0 : myIgnoreHideByZoom = true;
796 0 : } else if (personValue.showText && personValue.constSize) {
797 0 : myIgnoreHideByZoom = true;
798 : // containers
799 0 : } else if (containerSize.constantSize) {
800 0 : myIgnoreHideByZoom = true;
801 0 : } else if (containerSize.constantSizeSelected) {
802 0 : myIgnoreHideByZoom = true;
803 0 : } else if (containerName.showText && containerName.constSize) {
804 0 : myIgnoreHideByZoom = true;
805 : } else {
806 0 : myIgnoreHideByZoom = false;
807 : }
808 0 : }
809 :
810 :
811 : bool
812 0 : GUIVisualizationSettings::checkDrawAdditional(const Detail d, const bool selected) const {
813 0 : if (drawForViewObjectsHandler) {
814 : return false;
815 0 : } else if (myIgnoreHideByZoom) {
816 : return true;
817 0 : } else if (addSize.constantSize) {
818 : return true;
819 0 : } else if (addSize.constantSizeSelected && selected) {
820 : return true;
821 0 : } else if (addName.showText && addName.constSize) {
822 : return true;
823 0 : } else if (addFullName.showText && addFullName.constSize) {
824 : return true;
825 : } else {
826 0 : return d <= GUIVisualizationSettings::Detail::Additionals;
827 : }
828 : }
829 :
830 :
831 : bool
832 0 : GUIVisualizationSettings::checkDrawPoly(const Boundary& b, const bool selected) const {
833 0 : if (drawForViewObjectsHandler) {
834 : return false;
835 0 : } else if (myIgnoreHideByZoom) {
836 : return true;
837 0 : } else if (polySize.constantSize) {
838 : return true;
839 0 : } else if (polySize.constantSizeSelected && selected) {
840 : return true;
841 0 : } else if (polyName.showText && polyName.constSize) {
842 : return true;
843 0 : } else if (polyType.showText && polyType.constSize) {
844 : return true;
845 : } else {
846 0 : return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;
847 : }
848 : }
849 :
850 :
851 : bool
852 0 : GUIVisualizationSettings::checkDrawPOI(const double w, const double h, const Detail d, const bool selected) const {
853 0 : if (drawForViewObjectsHandler) {
854 : return false;
855 0 : } else if (myIgnoreHideByZoom) {
856 : return true;
857 0 : } else if (poiSize.constantSize) {
858 : return true;
859 0 : } else if (poiSize.constantSizeSelected && selected) {
860 : return true;
861 0 : } else if (poiName.showText && poiName.constSize) {
862 : return true;
863 0 : } else if (poiType.showText && poiType.constSize) {
864 : return true;
865 0 : } else if (poiText.showText && poiText.constSize) {
866 : return true;
867 0 : } else if ((w > 0) && (h > 0)) {
868 0 : return (scale * MAX2(w, h)) > BoundarySizeDrawing;
869 : } else {
870 0 : return d <= GUIVisualizationSettings::Detail::Additionals;
871 : }
872 : }
873 :
874 :
875 : bool
876 0 : GUIVisualizationSettings::checkDrawVehicle(const Detail d, const bool selected) const {
877 0 : if (drawForViewObjectsHandler) {
878 : return false;
879 0 : } else if (myIgnoreHideByZoom) {
880 : return true;
881 0 : } else if (vehicleSize.constantSize) {
882 : return true;
883 0 : } else if (vehicleSize.constantSizeSelected && selected) {
884 : return true;
885 0 : } else if (vehicleName.showText && vehicleName.constSize) {
886 : return true;
887 0 : } else if (vehicleValue.showText && vehicleValue.constSize) {
888 : return true;
889 0 : } else if (vehicleScaleValue.showText && vehicleScaleValue.constSize) {
890 : return true;
891 0 : } else if (vehicleText.showText && vehicleText.constSize) {
892 : return true;
893 : } else {
894 0 : return d <= GUIVisualizationSettings::Detail::Additionals;
895 : }
896 : }
897 :
898 :
899 : bool
900 0 : GUIVisualizationSettings::checkDrawPerson(const Detail d, const bool selected) const {
901 0 : if (drawForViewObjectsHandler) {
902 : return false;
903 0 : } else if (myIgnoreHideByZoom) {
904 : return true;
905 0 : } else if (personSize.constantSize) {
906 : return true;
907 0 : } else if (personSize.constantSizeSelected && selected) {
908 : return true;
909 0 : } else if (personName.showText && personName.constSize) {
910 : return true;
911 0 : } else if (personValue.showText && personValue.constSize) {
912 : return true;
913 : } else {
914 0 : return d <= GUIVisualizationSettings::Detail::Additionals;
915 : }
916 : }
917 :
918 :
919 : bool
920 0 : GUIVisualizationSettings::checkDrawContainer(const Detail d, const bool selected) const {
921 0 : if (drawForViewObjectsHandler) {
922 : return false;
923 0 : } else if (myIgnoreHideByZoom) {
924 : return true;
925 0 : } else if (containerSize.constantSize) {
926 : return true;
927 0 : } else if (containerSize.constantSizeSelected && selected) {
928 : return true;
929 0 : } else if (containerName.showText && containerName.constSize) {
930 : return true;
931 : } else {
932 0 : return d <= GUIVisualizationSettings::Detail::Additionals;
933 : }
934 : }
935 :
936 :
937 : void
938 38022 : GUIVisualizationSettings::copy(const GUIVisualizationSettings& s) {
939 : // just copy. Note: By default = operator is disabled to avoid accidental copies)
940 38022 : *this = s;
941 38022 : }
942 :
943 :
944 : void
945 76047 : GUIVisualizationSettings::initSumoGuiDefaults() {
946 : /// add lane coloring schemes
947 152094 : GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true, 0);
948 76047 : scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));
949 76047 : scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));
950 76047 : scheme.addColor(RGBColor(0, 0, 0, 0), 3, TL("green verge"));
951 76047 : scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));
952 76047 : scheme.addColor(RGBColor::BLACK, 5, TL("railway"));
953 76047 : scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));
954 76047 : scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc
955 76047 : scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing
956 76047 : scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector
957 76047 : scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road
958 76047 : scheme.addColor(RGBColor(200, 240, 240), 11, TL("airway"));
959 152094 : laneColorer.addScheme(scheme);
960 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
961 76047 : scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
962 152094 : laneColorer.addScheme(scheme);
963 76047 : scheme = GUIColorScheme(SCHEME_NAME_PERMISSION_CODE, RGBColor(240, 240, 240), "nobody");
964 76047 : scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
965 76047 : scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
966 76047 : scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
967 76047 : scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
968 76047 : scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
969 76047 : scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
970 76047 : scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
971 76047 : scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
972 76047 : scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
973 76047 : scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
974 76047 : scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
975 152094 : laneColorer.addScheme(scheme);
976 : // ... traffic states ...
977 152094 : scheme = GUIColorScheme("by allowed speed (lanewise)", TL("by allowed speed (lanewise)"), RGBColor::RED);
978 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
979 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
980 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
981 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
982 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
983 152094 : laneColorer.addScheme(scheme);
984 152094 : scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", TL("by current occupancy (lanewise, brutto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
985 76047 : scheme.addColor(RGBColor::GREEN, 0.25);
986 76047 : scheme.addColor(RGBColor::YELLOW, 0.5);
987 76047 : scheme.addColor(RGBColor::ORANGE, 0.75);
988 76047 : scheme.addColor(RGBColor::RED, 1.0);
989 152094 : laneColorer.addScheme(scheme);
990 152094 : scheme = GUIColorScheme("by current occupancy (lanewise, netto)", TL("by current occupancy (lanewise, netto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
991 76047 : scheme.addColor(RGBColor::GREEN, 0.25);
992 76047 : scheme.addColor(RGBColor::YELLOW, 0.5);
993 76047 : scheme.addColor(RGBColor::ORANGE, 0.75);
994 76047 : scheme.addColor(RGBColor::RED, 1.0);
995 152094 : laneColorer.addScheme(scheme);
996 152094 : scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", TL("by first vehicle waiting time (lanewise)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);
997 76047 : scheme.addColor(RGBColor::CYAN, 30.);
998 76047 : scheme.addColor(RGBColor::GREEN, 100.);
999 76047 : scheme.addColor(RGBColor::YELLOW, 200.);
1000 76047 : scheme.addColor(RGBColor::RED, 300.);
1001 152094 : laneColorer.addScheme(scheme);
1002 152094 : scheme = GUIColorScheme("by lane number (streetwise)", TL("by lane number (streetwise)"), RGBColor::RED);
1003 76047 : scheme.addColor(RGBColor::BLUE, 5.);
1004 152094 : laneColorer.addScheme(scheme);
1005 : // ... emissions ...
1006 152094 : scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1007 76047 : scheme.addColor(RGBColor::CYAN, 450);
1008 76047 : scheme.addColor(RGBColor::GREEN, 900);
1009 76047 : scheme.addColor(RGBColor::YELLOW, 1350);
1010 76047 : scheme.addColor(RGBColor::ORANGE, 1800);
1011 76047 : scheme.addColor(RGBColor::RED, 2250);
1012 76047 : scheme.addColor(RGBColor::MAGENTA, 3000);
1013 152094 : laneColorer.addScheme(scheme);
1014 152094 : scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1015 76047 : scheme.addColor(RGBColor::CYAN, 30);
1016 76047 : scheme.addColor(RGBColor::GREEN, 60);
1017 76047 : scheme.addColor(RGBColor::YELLOW, 90);
1018 76047 : scheme.addColor(RGBColor::ORANGE, 120);
1019 76047 : scheme.addColor(RGBColor::RED, 150);
1020 76047 : scheme.addColor(RGBColor::MAGENTA, 200);
1021 152094 : laneColorer.addScheme(scheme);
1022 152094 : scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1023 76047 : scheme.addColor(RGBColor::CYAN, 0.3);
1024 76047 : scheme.addColor(RGBColor::GREEN, 0.5);
1025 76047 : scheme.addColor(RGBColor::YELLOW, 0.8);
1026 76047 : scheme.addColor(RGBColor::ORANGE, 1);
1027 76047 : scheme.addColor(RGBColor::RED, 1.3);
1028 76047 : scheme.addColor(RGBColor::MAGENTA, 1.6);
1029 152094 : laneColorer.addScheme(scheme);
1030 152094 : scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1031 76047 : scheme.addColor(RGBColor::CYAN, 6);
1032 76047 : scheme.addColor(RGBColor::GREEN, 12);
1033 76047 : scheme.addColor(RGBColor::YELLOW, 18);
1034 76047 : scheme.addColor(RGBColor::ORANGE, 24);
1035 76047 : scheme.addColor(RGBColor::RED, 30);
1036 76047 : scheme.addColor(RGBColor::MAGENTA, 40);
1037 152094 : laneColorer.addScheme(scheme);
1038 152094 : scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1039 76047 : scheme.addColor(RGBColor::CYAN, 8);
1040 76047 : scheme.addColor(RGBColor::GREEN, 16);
1041 76047 : scheme.addColor(RGBColor::YELLOW, 24);
1042 76047 : scheme.addColor(RGBColor::ORANGE, 32);
1043 76047 : scheme.addColor(RGBColor::RED, 40);
1044 76047 : scheme.addColor(RGBColor::MAGENTA, 50);
1045 152094 : laneColorer.addScheme(scheme);
1046 152094 : scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1047 76047 : scheme.addColor(RGBColor::CYAN, 0.2);
1048 76047 : scheme.addColor(RGBColor::GREEN, 0.4);
1049 76047 : scheme.addColor(RGBColor::YELLOW, 0.6);
1050 76047 : scheme.addColor(RGBColor::ORANGE, 0.8);
1051 76047 : scheme.addColor(RGBColor::RED, 1);
1052 76047 : scheme.addColor(RGBColor::MAGENTA, 1.3);
1053 152094 : laneColorer.addScheme(scheme);
1054 152094 : scheme = GUIColorScheme("by noise emissions (Harmonoise)", TL("by noise emissions (Harmonoise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1055 76047 : scheme.addColor(RGBColor::CYAN, 1.3);
1056 76047 : scheme.addColor(RGBColor::GREEN, 1.4);
1057 76047 : scheme.addColor(RGBColor::YELLOW, 1.6);
1058 76047 : scheme.addColor(RGBColor::ORANGE, 1.7);
1059 76047 : scheme.addColor(RGBColor::RED, 1.9);
1060 76047 : scheme.addColor(RGBColor::MAGENTA, 2.4);
1061 152094 : laneColorer.addScheme(scheme);
1062 : // ... weights (experimental) ...
1063 152094 : scheme = GUIColorScheme("by global travel time", TL("by global travel time"), RGBColor::GREEN);
1064 152094 : scheme.addColor(RGBColor::RED, 100.);
1065 : scheme.setAllowsNegativeValues(true);
1066 152094 : laneColorer.addScheme(scheme);
1067 152094 : scheme = GUIColorScheme("by global speed percentage", TL("by global speed percentage"), RGBColor::RED);
1068 76047 : scheme.addColor(RGBColor::YELLOW, 50.);
1069 152094 : scheme.addColor(RGBColor::GREEN, 100.);
1070 : scheme.setAllowsNegativeValues(true);
1071 152094 : laneColorer.addScheme(scheme);
1072 152094 : scheme = GUIColorScheme("by given length/geometrical length", TL("by given length/geometrical length"), RGBColor::RED);
1073 76047 : scheme.addColor(RGBColor::ORANGE, 0.25);
1074 76047 : scheme.addColor(RGBColor::YELLOW, 0.5);
1075 76047 : scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
1076 76047 : scheme.addColor(RGBColor::GREEN, 2.);
1077 76047 : scheme.addColor(RGBColor::CYAN, 4.);
1078 76047 : scheme.addColor(RGBColor::BLUE, 100.);
1079 152094 : laneColorer.addScheme(scheme);
1080 228141 : laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1081 152094 : scheme = GUIColorScheme("by loaded weight", TL("by loaded weight"), RGBColor::GREEN);
1082 152094 : scheme.addColor(RGBColor::RED, 100.);
1083 : scheme.setAllowsNegativeValues(true);
1084 152094 : laneColorer.addScheme(scheme);
1085 152094 : scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);
1086 76047 : scheme.addColor(RGBColor::RED, -20.);
1087 152094 : scheme.addColor(RGBColor::GREEN, 20.);
1088 : scheme.setAllowsNegativeValues(true);
1089 152094 : laneColorer.addScheme(scheme);
1090 152094 : scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::GREY);
1091 76047 : scheme.addColor(RGBColor::BLUE, -10.);
1092 76047 : scheme.addColor(RGBColor::RED, 10.);
1093 76047 : scheme.addColor(RGBColor::YELLOW, 50.);
1094 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1095 152094 : scheme.addColor(RGBColor::MAGENTA, 200.);
1096 : scheme.setAllowsNegativeValues(true);
1097 152094 : laneColorer.addScheme(scheme);
1098 152094 : scheme = GUIColorScheme("by height at geometry-segment start", TL("by height at geometry-segment start"), RGBColor::GREY);
1099 76047 : scheme.addColor(RGBColor::BLUE, -10.);
1100 76047 : scheme.addColor(RGBColor::RED, 10.);
1101 76047 : scheme.addColor(RGBColor::YELLOW, 50.);
1102 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1103 152094 : scheme.addColor(RGBColor::MAGENTA, 200.);
1104 : scheme.setAllowsNegativeValues(true);
1105 152094 : laneColorer.addScheme(scheme);
1106 152094 : scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);
1107 76047 : scheme.addColor(RGBColor::YELLOW, 0.1);
1108 76047 : scheme.addColor(RGBColor::RED, 0.3);
1109 76047 : scheme.addColor(RGBColor::GREEN, -0.1);
1110 152094 : scheme.addColor(RGBColor::BLUE, -0.3);
1111 : scheme.setAllowsNegativeValues(true);
1112 152094 : laneColorer.addScheme(scheme);
1113 152094 : scheme = GUIColorScheme("by geometry-segment inclination", TL("by geometry-segment inclination"), RGBColor::GREY);
1114 76047 : scheme.addColor(RGBColor::YELLOW, 0.1);
1115 76047 : scheme.addColor(RGBColor::RED, 0.3);
1116 76047 : scheme.addColor(RGBColor::GREEN, -0.1);
1117 152094 : scheme.addColor(RGBColor::BLUE, -0.3);
1118 : scheme.setAllowsNegativeValues(true);
1119 152094 : laneColorer.addScheme(scheme);
1120 152094 : scheme = GUIColorScheme("by average speed", TL("by average speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1121 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1122 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1123 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1124 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1125 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1126 152094 : laneColorer.addScheme(scheme);
1127 152094 : scheme = GUIColorScheme("by average relative speed ", TL("by average relative speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1128 76047 : scheme.addColor(RGBColor::YELLOW, 0.25);
1129 76047 : scheme.addColor(RGBColor::GREEN, 0.5);
1130 76047 : scheme.addColor(RGBColor::CYAN, 0.75);
1131 76047 : scheme.addColor(RGBColor::BLUE, 1.);
1132 76047 : scheme.addColor(RGBColor::MAGENTA, 1.25);
1133 152094 : laneColorer.addScheme(scheme);
1134 152094 : scheme = GUIColorScheme("by routing device assumed speed ", TL("by routing device assumed speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1135 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1136 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1137 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1138 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1139 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1140 152094 : laneColorer.addScheme(scheme);
1141 152094 : scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);
1142 76047 : scheme.addColor(RGBColor::CYAN, 0.2);
1143 76047 : scheme.addColor(RGBColor::GREEN, 0.4);
1144 76047 : scheme.addColor(RGBColor::YELLOW, 0.6);
1145 76047 : scheme.addColor(RGBColor::ORANGE, 0.8);
1146 76047 : scheme.addColor(RGBColor::RED, 1.0);
1147 76047 : scheme.addColor(RGBColor::MAGENTA, 2.0);
1148 152094 : laneColorer.addScheme(scheme);
1149 152094 : scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
1150 76047 : scheme.addColor(RGBColor::GREEN, 1.);
1151 76047 : scheme.addColor(RGBColor::YELLOW, 10.);
1152 76047 : scheme.addColor(RGBColor::RED, 100.);
1153 152094 : laneColorer.addScheme(scheme);
1154 152094 : scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), "no TAZ", true);
1155 152094 : laneColorer.addScheme(scheme);
1156 76047 : scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1157 : scheme.setAllowsNegativeValues(true);
1158 152094 : laneColorer.addScheme(scheme);
1159 76047 : scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1160 : scheme.setAllowsNegativeValues(true);
1161 152094 : laneColorer.addScheme(scheme);
1162 152094 : scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);
1163 : scheme.setAllowsNegativeValues(true);
1164 152094 : laneColorer.addScheme(scheme);
1165 152094 : scheme = GUIColorScheme("by distance (kilometrage)", TL("by distance (kilometrage)"), RGBColor(204, 204, 204));
1166 76047 : scheme.addColor(RGBColor(255, 204, 204), 1.);
1167 76047 : scheme.addColor(RGBColor::RED, 10000.);
1168 76047 : scheme.addColor(RGBColor(204, 204, 255), -1.);
1169 152094 : scheme.addColor(RGBColor::BLUE, -10000.);
1170 : scheme.setAllowsNegativeValues(true);
1171 152094 : laneColorer.addScheme(scheme);
1172 152094 : scheme = GUIColorScheme("by abs distance (kilometrage)", TL("by abs distance (kilometrage)"), RGBColor(204, 204, 204));
1173 152094 : scheme.addColor(RGBColor::RED, 1.);
1174 : scheme.setAllowsNegativeValues(false);
1175 152094 : laneColorer.addScheme(scheme);
1176 152094 : scheme = GUIColorScheme("by reachability (traveltime)", TL("by reachability (traveltime)"), RGBColor::RED);
1177 152094 : scheme.addColor(RGBColor::GREY, INVALID_DOUBLE, "unreachable");
1178 : scheme.setAllowsNegativeValues(true);
1179 152094 : laneColorer.addScheme(scheme);
1180 152094 : scheme = GUIColorScheme("by thread index", TL("by thread index"), RGBColor(204, 204, 204));
1181 76047 : scheme.addColor(RGBColor::RED, 1.);
1182 152094 : laneColorer.addScheme(scheme);
1183 152094 : scheme = GUIColorScheme("free parking spaces", TL("free parking spaces"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);
1184 76047 : scheme.addColor(RGBColor::RED, 1.);
1185 76047 : scheme.addColor(RGBColor::YELLOW, 10.);
1186 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1187 76047 : scheme.addColor(RGBColor::BLUE, 1000.);
1188 152094 : laneColorer.addScheme(scheme);
1189 152094 : scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_LIVE, COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA, COL_SCHEME_DYNAMIC);
1190 : scheme.setAllowsNegativeValues(true);
1191 152094 : laneColorer.addScheme(scheme);
1192 :
1193 : /// add vehicle coloring schemes
1194 228141 : vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", TL("given vehicle/type/route color"), RGBColor::YELLOW, "", true));
1195 228141 : vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1196 228141 : vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", TL("given/assigned vehicle color"), RGBColor::YELLOW, "", true));
1197 228141 : vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));
1198 228141 : vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", TL("given/assigned route color"), RGBColor::YELLOW, "", true));
1199 228141 : vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", TL("depart position as HSV"), RGBColor::YELLOW, "", true));
1200 228141 : vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", TL("arrival position as HSV"), RGBColor::YELLOW, "", true));
1201 228141 : vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", TL("direction/distance as HSV"), RGBColor::YELLOW, "", true));
1202 152094 : scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1203 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1204 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1205 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1206 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1207 152094 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1208 : scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1209 76047 : scheme.addColor(RGBColor::RED, -1); // stopped on road
1210 76047 : scheme.addColor(RGBColor::GREY, -2); // stopped off-road (parking)
1211 152094 : vehicleColorer.addScheme(scheme);
1212 152094 : scheme = GUIColorScheme("by action step", TL("by action step"), RGBColor::GREY, TL("no action"), true, 0, COL_SCHEME_DYNAMIC);
1213 76047 : scheme.addColor(RGBColor(0, 255, 0, 255), 1., TL("action in next step"));
1214 76047 : scheme.addColor(RGBColor(80, 160, 80, 255), 2., TL("had action step"));
1215 152094 : vehicleColorer.addScheme(scheme);
1216 152094 : scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1217 76047 : scheme.addColor(RGBColor::CYAN, 30.);
1218 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1219 76047 : scheme.addColor(RGBColor::YELLOW, 200.);
1220 76047 : scheme.addColor(RGBColor::RED, 300.);
1221 152094 : vehicleColorer.addScheme(scheme);
1222 152094 : scheme = GUIColorScheme("by accumulated waiting time", TL("by accumulated waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1223 76047 : scheme.addColor(RGBColor::CYAN, 25.);
1224 76047 : scheme.addColor(RGBColor::GREEN, 50.);
1225 76047 : scheme.addColor(RGBColor::YELLOW, 75.);
1226 76047 : scheme.addColor(RGBColor::RED, 100.);
1227 152094 : vehicleColorer.addScheme(scheme);
1228 152094 : scheme = GUIColorScheme("by time since lane change", TL("by time since lane change"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1229 76047 : scheme.addColor(RGBColor(189, 189, 179, 255), -180);
1230 76047 : scheme.addColor(RGBColor(255, 255, 0, 255), -20);
1231 76047 : scheme.addColor(RGBColor(255, 0, 0, 255), -0.01);
1232 76047 : scheme.addColor(RGBColor(0, 0, 255, 255), 0.01);
1233 76047 : scheme.addColor(RGBColor(0, 255, 255, 255), 20);
1234 76047 : scheme.addColor(RGBColor(179, 189, 189, 255), 180);
1235 : scheme.setAllowsNegativeValues(true);
1236 152094 : vehicleColorer.addScheme(scheme);
1237 152094 : scheme = GUIColorScheme("by max speed", TL("by max speed"), RGBColor::RED);
1238 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1239 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1240 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1241 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1242 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1243 152094 : vehicleColorer.addScheme(scheme);
1244 : // ... emissions ...
1245 152094 : scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1246 76047 : scheme.addColor(RGBColor::CYAN, 23000);
1247 76047 : scheme.addColor(RGBColor::GREEN, 46000);
1248 76047 : scheme.addColor(RGBColor::YELLOW, 69000);
1249 76047 : scheme.addColor(RGBColor::ORANGE, 92000);
1250 76047 : scheme.addColor(RGBColor::RED, 115000);
1251 76047 : scheme.addColor(RGBColor::MAGENTA, 150000);
1252 152094 : vehicleColorer.addScheme(scheme);
1253 152094 : scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1254 76047 : scheme.addColor(RGBColor::CYAN, 1500);
1255 76047 : scheme.addColor(RGBColor::GREEN, 3000);
1256 76047 : scheme.addColor(RGBColor::YELLOW, 4500);
1257 76047 : scheme.addColor(RGBColor::ORANGE, 6000);
1258 76047 : scheme.addColor(RGBColor::RED, 7500);
1259 76047 : scheme.addColor(RGBColor::MAGENTA, 10000);
1260 152094 : vehicleColorer.addScheme(scheme);
1261 152094 : scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1262 76047 : scheme.addColor(RGBColor::CYAN, 12);
1263 76047 : scheme.addColor(RGBColor::GREEN, 24);
1264 76047 : scheme.addColor(RGBColor::YELLOW, 36);
1265 76047 : scheme.addColor(RGBColor::ORANGE, 48);
1266 76047 : scheme.addColor(RGBColor::RED, 60);
1267 76047 : scheme.addColor(RGBColor::MAGENTA, 80);
1268 152094 : vehicleColorer.addScheme(scheme);
1269 152094 : scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1270 76047 : scheme.addColor(RGBColor::CYAN, 300);
1271 76047 : scheme.addColor(RGBColor::GREEN, 600);
1272 76047 : scheme.addColor(RGBColor::YELLOW, 900);
1273 76047 : scheme.addColor(RGBColor::ORANGE, 1200);
1274 76047 : scheme.addColor(RGBColor::RED, 1500);
1275 76047 : scheme.addColor(RGBColor::MAGENTA, 2000);
1276 152094 : vehicleColorer.addScheme(scheme);
1277 152094 : scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1278 76047 : scheme.addColor(RGBColor::CYAN, 400);
1279 76047 : scheme.addColor(RGBColor::GREEN, 800);
1280 76047 : scheme.addColor(RGBColor::YELLOW, 1200);
1281 76047 : scheme.addColor(RGBColor::ORANGE, 1600);
1282 76047 : scheme.addColor(RGBColor::RED, 2000);
1283 76047 : scheme.addColor(RGBColor::MAGENTA, 2500);
1284 152094 : vehicleColorer.addScheme(scheme);
1285 152094 : scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1286 76047 : scheme.addColor(RGBColor::CYAN, 10);
1287 76047 : scheme.addColor(RGBColor::GREEN, 20);
1288 76047 : scheme.addColor(RGBColor::YELLOW, 30);
1289 76047 : scheme.addColor(RGBColor::ORANGE, 40);
1290 76047 : scheme.addColor(RGBColor::RED, 50);
1291 76047 : scheme.addColor(RGBColor::MAGENTA, 60);
1292 152094 : vehicleColorer.addScheme(scheme);
1293 152094 : scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1294 76047 : scheme.addColor(RGBColor::CYAN, 60);
1295 76047 : scheme.addColor(RGBColor::GREEN, 70);
1296 76047 : scheme.addColor(RGBColor::YELLOW, 80);
1297 76047 : scheme.addColor(RGBColor::ORANGE, 90);
1298 76047 : scheme.addColor(RGBColor::RED, 100);
1299 76047 : scheme.addColor(RGBColor::MAGENTA, 120);
1300 152094 : vehicleColorer.addScheme(scheme);
1301 152094 : scheme = GUIColorScheme("by reroute number", TL("by reroute number"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1302 76047 : scheme.addColor(RGBColor::YELLOW, 1.);
1303 76047 : scheme.addColor(RGBColor::RED, 10.);
1304 152094 : vehicleColorer.addScheme(scheme);
1305 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1306 76047 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1307 152094 : vehicleColorer.addScheme(scheme);
1308 152094 : scheme = GUIColorScheme("by offset from best lane", TL("by offset from best lane"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1309 76047 : scheme.addColor(RGBColor(255, 0, 255, 255), -100, TL("opposite lane"));
1310 76047 : scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");
1311 76047 : scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");
1312 76047 : scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");
1313 76047 : scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");
1314 : scheme.setAllowsNegativeValues(true);
1315 152094 : vehicleColorer.addScheme(scheme);
1316 152094 : scheme = GUIColorScheme("by acceleration", TL("by acceleration"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1317 76047 : scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);
1318 76047 : scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
1319 76047 : scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);
1320 76047 : scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);
1321 76047 : scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
1322 76047 : scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);
1323 : scheme.setAllowsNegativeValues(true);
1324 152094 : vehicleColorer.addScheme(scheme);
1325 152094 : scheme = GUIColorScheme("by time gap on lane", TL("by time gap on lane"), RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1326 76047 : scheme.addColor(RGBColor(179, 179, 179, 255), -1);
1327 76047 : scheme.addColor(RGBColor(0, 255, 255, 255), 1);
1328 76047 : scheme.addColor(RGBColor(0, 0, 255, 255), 2);
1329 : scheme.setAllowsNegativeValues(true);
1330 152094 : vehicleColorer.addScheme(scheme);
1331 152094 : scheme = GUIColorScheme("by depart delay", TL("by depart delay"), RGBColor::BLUE);
1332 76047 : scheme.addColor(RGBColor::CYAN, 30.);
1333 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1334 76047 : scheme.addColor(RGBColor::YELLOW, 200.);
1335 76047 : scheme.addColor(RGBColor::RED, 300.);
1336 152094 : vehicleColorer.addScheme(scheme);
1337 152094 : scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1338 76047 : scheme.addColor(RGBColor::CYAN, 10);
1339 76047 : scheme.addColor(RGBColor::GREEN, 20);
1340 76047 : scheme.addColor(RGBColor::YELLOW, 30);
1341 76047 : scheme.addColor(RGBColor::ORANGE, 40);
1342 76047 : scheme.addColor(RGBColor::RED, 60);
1343 76047 : scheme.addColor(RGBColor::MAGENTA, 100);
1344 152094 : vehicleColorer.addScheme(scheme);
1345 152094 : scheme = GUIColorScheme("by relative battery charge", TL("by relative battery charge"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1346 : scheme.setAllowsNegativeValues(true);
1347 76047 : scheme.addColor(RGBColor::MAGENTA, 0.1);
1348 76047 : scheme.addColor(RGBColor::RED, 0.2);
1349 76047 : scheme.addColor(RGBColor::ORANGE, 0.3);
1350 76047 : scheme.addColor(RGBColor::YELLOW, 0.4);
1351 76047 : scheme.addColor(RGBColor::GREEN, 0.6);
1352 76047 : scheme.addColor(RGBColor::CYAN, 1.);
1353 152094 : vehicleColorer.addScheme(scheme);
1354 152094 : scheme = GUIColorScheme("by charged energy", TL("by charged energy"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);
1355 : scheme.setAllowsNegativeValues(true);
1356 76047 : scheme.addColor(RGBColor::MAGENTA, 10);
1357 76047 : scheme.addColor(RGBColor::RED, 20);
1358 76047 : scheme.addColor(RGBColor::ORANGE, 30);
1359 76047 : scheme.addColor(RGBColor::YELLOW, 100);
1360 76047 : scheme.addColor(RGBColor::GREEN, 200);
1361 76047 : scheme.addColor(RGBColor::CYAN, 500);
1362 152094 : vehicleColorer.addScheme(scheme);
1363 152094 : scheme = GUIColorScheme("by time loss", TL("by time loss"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1364 76047 : scheme.addColor(RGBColor::CYAN, 10.);
1365 76047 : scheme.addColor(RGBColor::GREEN, 60.);
1366 76047 : scheme.addColor(RGBColor::YELLOW, 180.);
1367 76047 : scheme.addColor(RGBColor::RED, 900.);
1368 152094 : vehicleColorer.addScheme(scheme);
1369 152094 : scheme = GUIColorScheme("by stop delay", TL("by stop delay"), RGBColor::GREY, "", false, -1, COL_SCHEME_DYNAMIC);
1370 76047 : scheme.addColor(RGBColor::BLUE, 0.);
1371 76047 : scheme.addColor(RGBColor::CYAN, 10.);
1372 76047 : scheme.addColor(RGBColor::GREEN, 60.);
1373 76047 : scheme.addColor(RGBColor::YELLOW, 120.);
1374 76047 : scheme.addColor(RGBColor::ORANGE, 300.);
1375 152094 : scheme.addColor(RGBColor::RED, 900.);
1376 : scheme.setAllowsNegativeValues(true);
1377 152094 : vehicleColorer.addScheme(scheme);
1378 152094 : scheme = GUIColorScheme("by stop arrival delay", TL("by stop arrival delay"), RGBColor::GREY, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1379 76047 : scheme.addColor(RGBColor::MAGENTA, -10.);
1380 76047 : scheme.addColor(RGBColor::BLUE, 0.);
1381 76047 : scheme.addColor(RGBColor::CYAN, 10.);
1382 76047 : scheme.addColor(RGBColor::GREEN, 60.);
1383 76047 : scheme.addColor(RGBColor::YELLOW, 120.);
1384 76047 : scheme.addColor(RGBColor::ORANGE, 300.);
1385 152094 : scheme.addColor(RGBColor::RED, 900.);
1386 : scheme.setAllowsNegativeValues(true);
1387 152094 : vehicleColorer.addScheme(scheme);
1388 152094 : scheme = GUIColorScheme("by lateral speed", TL("by lateral speed"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);
1389 76047 : scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");
1390 76047 : scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");
1391 76047 : scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");
1392 76047 : scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");
1393 : scheme.setAllowsNegativeValues(true);
1394 152094 : vehicleColorer.addScheme(scheme);
1395 76047 : scheme = GUIColorScheme(SCHEME_NAME_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1396 : scheme.setAllowsNegativeValues(true);
1397 152094 : vehicleColorer.addScheme(scheme);
1398 228141 : vehicleColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1399 228141 : vehicleColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1400 :
1401 : /// add person coloring schemes
1402 228141 : personColorer.addScheme(GUIColorScheme("given person/type color", TL("given person/type color"), RGBColor::BLUE, "", true));
1403 228141 : personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::BLUE, "", true));
1404 228141 : personColorer.addScheme(GUIColorScheme("given/assigned person color", TL("given/assigned person color"), RGBColor::BLUE, "", true));
1405 228141 : personColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::BLUE, "", true));
1406 152094 : scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1407 76047 : scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1408 76047 : scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1409 152094 : scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1410 : scheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1411 76047 : scheme.addColor(RGBColor::GREY, -1.); // stop stage
1412 76047 : scheme.addColor(RGBColor::GREY, -2.); // stop stage (departure)
1413 152094 : personColorer.addScheme(scheme);
1414 152094 : scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);
1415 76047 : scheme.addColor(RGBColor::RED, 1., TL("stopped"));
1416 76047 : scheme.addColor(RGBColor::GREEN, 2., TL("walking"));
1417 76047 : scheme.addColor(RGBColor::BLUE, 3., TL("riding"));
1418 76047 : scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));
1419 76047 : scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for ride"));
1420 152094 : personColorer.addScheme(scheme);
1421 152094 : scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1422 76047 : scheme.addColor(RGBColor::CYAN, 30.);
1423 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1424 76047 : scheme.addColor(RGBColor::YELLOW, 200.);
1425 76047 : scheme.addColor(RGBColor::RED, 300.);
1426 152094 : personColorer.addScheme(scheme);
1427 152094 : scheme = GUIColorScheme("by jammed state", TL("by jammed state"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1428 76047 : scheme.addColor(RGBColor::RED, 1.);
1429 152094 : personColorer.addScheme(scheme);
1430 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1431 76047 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1432 152094 : personColorer.addScheme(scheme);
1433 228141 : personColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1434 228141 : personColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1435 :
1436 : /// add container coloring schemes
1437 228141 : containerColorer.addScheme(GUIColorScheme("given container/type color", TL("given container/type color"), RGBColor::YELLOW, "", true));
1438 228141 : containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1439 228141 : containerColorer.addScheme(GUIColorScheme("given/assigned container color", TL("given/assigned container color"), RGBColor::YELLOW, "", true));
1440 228141 : containerColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));
1441 152094 : scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1442 76047 : scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);
1443 76047 : scheme.addColor(RGBColor::GREEN, 5. / 3.6);
1444 76047 : scheme.addColor(RGBColor::BLUE, 10. / 3.6);
1445 152094 : containerColorer.addScheme(scheme);
1446 152094 : scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);
1447 76047 : scheme.addColor(RGBColor::RED, 1., TL("stopped"));
1448 76047 : scheme.addColor(RGBColor::BLUE, 3., TL("transport"));
1449 76047 : scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));
1450 76047 : scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for transport"));
1451 76047 : scheme.addColor(RGBColor::GREEN, 6., TL("tranship")); // (moving without vehicle)
1452 152094 : containerColorer.addScheme(scheme);
1453 152094 : scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1454 76047 : scheme.addColor(RGBColor::CYAN, 30.);
1455 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1456 76047 : scheme.addColor(RGBColor::YELLOW, 200.);
1457 76047 : scheme.addColor(RGBColor::RED, 300.);
1458 152094 : containerColorer.addScheme(scheme);
1459 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1460 76047 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1461 152094 : containerColorer.addScheme(scheme);
1462 228141 : containerColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1463 228141 : containerColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1464 :
1465 : /// add junction coloring schemes
1466 152094 : scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, "", true);
1467 76047 : scheme.addColor(RGBColor(150, 200, 200), 1, TL("waterway"));
1468 76047 : scheme.addColor(RGBColor(0, 0, 0, 0), 2, TL("railway"));
1469 76047 : scheme.addColor(RGBColor(200, 240, 240), 3, TL("airway"));
1470 152094 : junctionColorer.addScheme(scheme);
1471 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1472 76047 : scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1473 152094 : junctionColorer.addScheme(scheme);
1474 76047 : scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1475 76047 : scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1476 76047 : scheme.addColor(RGBColor::YELLOW, 2, "priority");
1477 76047 : scheme.addColor(RGBColor::RED, 3, "priority_stop");
1478 76047 : scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1479 76047 : scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1480 76047 : scheme.addColor(RGBColor::GREY, 6, "district");
1481 76047 : scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1482 76047 : scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1483 76047 : scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1484 76047 : scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1485 76047 : scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green
1486 76047 : scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1487 76047 : scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue
1488 152094 : junctionColorer.addScheme(scheme);
1489 152094 : scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);
1490 76047 : scheme.addColor(RGBColor::BLUE, -10.);
1491 76047 : scheme.addColor(RGBColor::RED, 10.);
1492 76047 : scheme.addColor(RGBColor::YELLOW, 50.);
1493 76047 : scheme.addColor(RGBColor::GREEN, 100.);
1494 152094 : scheme.addColor(RGBColor::MAGENTA, 200.);
1495 : scheme.setAllowsNegativeValues(true);
1496 152094 : junctionColorer.addScheme(scheme);
1497 :
1498 : /// add POI coloring schemes
1499 228141 : poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));
1500 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1501 76047 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1502 152094 : poiColorer.addScheme(scheme);
1503 228141 : poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));
1504 :
1505 : /// add polygon coloring schemes
1506 228141 : polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));
1507 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1508 76047 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1509 152094 : polyColorer.addScheme(scheme);
1510 228141 : polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1511 228141 : polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1512 :
1513 : /// add lane scaling schemes
1514 : {
1515 152094 : GUIScaleScheme laneScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);
1516 152094 : laneScaler.addScheme(laneScheme);
1517 76047 : laneScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);
1518 76047 : laneScheme.addColor(5, 1, TL("selected"));
1519 152094 : laneScaler.addScheme(laneScheme);
1520 : // ... traffic states ...
1521 152094 : laneScheme = GUIScaleScheme(TL("by allowed speed (lanewise)"), 0);
1522 76047 : laneScheme.addColor(10, 150. / 3.6);
1523 152094 : laneScaler.addScheme(laneScheme);
1524 152094 : laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1525 76047 : laneScheme.addColor(10, 0.95);
1526 152094 : laneScaler.addScheme(laneScheme);
1527 152094 : laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, netto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1528 76047 : laneScheme.addColor(10, 0.95);
1529 152094 : laneScaler.addScheme(laneScheme);
1530 152094 : laneScheme = GUIScaleScheme(TL("by first vehicle waiting time (lanewise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1531 76047 : laneScheme.addColor(10, 300.);
1532 152094 : laneScaler.addScheme(laneScheme);
1533 152094 : laneScheme = GUIScaleScheme(TL("by lane number (streetwise)"), 1);
1534 76047 : laneScheme.addColor(10, 5.);
1535 152094 : laneScaler.addScheme(laneScheme);
1536 : // ... emissions ...
1537 152094 : laneScheme = GUIScaleScheme(TL("by CO2 emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1538 76047 : laneScheme.addColor(10, 10. / 7.5 / 5.);
1539 152094 : laneScaler.addScheme(laneScheme);
1540 152094 : laneScheme = GUIScaleScheme(TL("by CO emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1541 76047 : laneScheme.addColor(10, 0.05 / 7.5 / 2.);
1542 152094 : laneScaler.addScheme(laneScheme);
1543 152094 : laneScheme = GUIScaleScheme(TL("by PMx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1544 76047 : laneScheme.addColor(10, .005 / 7.5 / 5.);
1545 152094 : laneScaler.addScheme(laneScheme);
1546 152094 : laneScheme = GUIScaleScheme(TL("by NOx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1547 76047 : laneScheme.addColor(10, .125 / 7.5 / 5.);
1548 152094 : laneScaler.addScheme(laneScheme);
1549 152094 : laneScheme = GUIScaleScheme(TL("by HC emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);
1550 76047 : laneScheme.addColor(10, .02 / 7.5 / 4.);
1551 152094 : laneScaler.addScheme(laneScheme);
1552 152094 : laneScheme = GUIScaleScheme(TL("by fuel consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);
1553 76047 : laneScheme.addColor(10, .005 / 7.5 * 100.);
1554 152094 : laneScaler.addScheme(laneScheme);
1555 152094 : laneScheme = GUIScaleScheme(TL("by noise emissions (Harmonoise)"), 0, "", false, 0, COL_SCHEME_EMISSION);
1556 76047 : laneScheme.addColor(10, 100.);
1557 152094 : laneScaler.addScheme(laneScheme);
1558 : // ... weights (experimental) ...
1559 152094 : laneScheme = GUIScaleScheme(TL("by global travel time"), 0);
1560 76047 : laneScheme.addColor(10, 100.);
1561 : laneScheme.setAllowsNegativeValues(true);
1562 152094 : laneScaler.addScheme(laneScheme);
1563 152094 : laneScheme = GUIScaleScheme(TL("by global speed percentage"), 0);
1564 76047 : laneScheme.addColor(10, 100.);
1565 : laneScheme.setAllowsNegativeValues(true);
1566 152094 : laneScaler.addScheme(laneScheme);
1567 152094 : laneScheme = GUIScaleScheme(TL("by given length/geometrical length"), 0);
1568 76047 : laneScheme.addColor(10, 10.);
1569 152094 : laneScaler.addScheme(laneScheme);
1570 152094 : laneScheme = GUIScaleScheme(TL("by loaded weight"), 0);
1571 76047 : laneScheme.addColor(-1000, -1000.);
1572 76047 : laneScheme.addColor(1000, 1000.);
1573 : laneScheme.setAllowsNegativeValues(true);
1574 152094 : laneScaler.addScheme(laneScheme);
1575 152094 : laneScheme = GUIScaleScheme(TL("by priority"), 1);
1576 76047 : laneScheme.addColor(0.5, -20.);
1577 76047 : laneScheme.addColor(5, 20.);
1578 : laneScheme.setAllowsNegativeValues(true);
1579 152094 : laneScaler.addScheme(laneScheme);
1580 152094 : laneScheme = GUIScaleScheme(TL("by average speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1581 76047 : laneScheme.addColor(10, 150. / 3.6);
1582 152094 : laneScaler.addScheme(laneScheme);
1583 152094 : laneScheme = GUIScaleScheme(TL("by average relative speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1584 76047 : laneScheme.addColor(0.5, 0.5);
1585 76047 : laneScheme.addColor(2, 1.);
1586 76047 : laneScheme.addColor(10, 2.);
1587 152094 : laneScaler.addScheme(laneScheme);
1588 152094 : laneScheme = GUIScaleScheme(TL("by electricity consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);
1589 76047 : laneScheme.addColor(10, 1. / 7.5 / 5.);
1590 152094 : laneScaler.addScheme(laneScheme);
1591 152094 : laneScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1592 76047 : laneScheme.addColor(1, 1.);
1593 76047 : laneScheme.addColor(10, 10.);
1594 76047 : laneScheme.addColor(50, 100.);
1595 152094 : laneScaler.addScheme(laneScheme);
1596 76047 : laneScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, 0.1, TL("missing data"), false, MISSING_DATA);
1597 76047 : laneScheme.addColor(1, 1.);
1598 76047 : laneScheme.addColor(2, 10.);
1599 76047 : laneScheme.addColor(5, 100.);
1600 76047 : laneScheme.addColor(10, 1000.);
1601 : laneScheme.setAllowsNegativeValues(true);
1602 152094 : laneScaler.addScheme(laneScheme);
1603 76047 : }
1604 :
1605 : /// add edge coloring schemes
1606 228141 : edgeColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor(0, 0, 0, 0), "", true));
1607 76047 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1608 76047 : scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));
1609 152094 : edgeColorer.addScheme(scheme);
1610 152094 : scheme = GUIColorScheme("by purpose (streetwise)", TL("by purpose (streetwise)"), RGBColor(), TL("normal"), true);
1611 76047 : scheme.addColor(RGBColor(128, 0, 128, 255), 1., TL("connector")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR
1612 76047 : scheme.addColor(RGBColor::BLUE, 2., TL("internal")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL
1613 152094 : edgeColorer.addScheme(scheme);
1614 152094 : scheme = GUIColorScheme("by allowed speed (streetwise)", TL("by allowed speed (streetwise)"), RGBColor::RED);
1615 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1616 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1617 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1618 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1619 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1620 152094 : edgeColorer.addScheme(scheme);
1621 152094 : scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", TL("by current occupancy (streetwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1622 76047 : scheme.addColor(RGBColor::RED, 0.95);
1623 152094 : edgeColorer.addScheme(scheme);
1624 152094 : scheme = GUIColorScheme("by current speed (streetwise)", TL("by current speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1625 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1626 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1627 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1628 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1629 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1630 152094 : edgeColorer.addScheme(scheme);
1631 152094 : scheme = GUIColorScheme("by current flow (streetwise)", TL("by current flow (streetwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1632 76047 : scheme.addColor(RGBColor::RED, 5000.);
1633 152094 : edgeColorer.addScheme(scheme);
1634 152094 : scheme = GUIColorScheme("by relative speed (streetwise)", TL("by relative speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1635 76047 : scheme.addColor(RGBColor::YELLOW, 0.25);
1636 76047 : scheme.addColor(RGBColor::GREEN, 0.5);
1637 76047 : scheme.addColor(RGBColor::CYAN, 0.75);
1638 76047 : scheme.addColor(RGBColor::BLUE, 1.);
1639 76047 : scheme.addColor(RGBColor::MAGENTA, 1.25);
1640 152094 : edgeColorer.addScheme(scheme);
1641 152094 : scheme = GUIColorScheme("by routing device assumed speed", TL("by routing device assumed speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1642 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1643 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1644 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1645 76047 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1646 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1647 152094 : edgeColorer.addScheme(scheme);
1648 228141 : edgeColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1649 152094 : scheme = GUIColorScheme("by segments (alternating)", TL("by segments (alternating)"), RGBColor::BLUE, TL("odd"), true);
1650 76047 : scheme.addColor(RGBColor::RED, 1., TL("even"));
1651 152094 : edgeColorer.addScheme(scheme);
1652 152094 : scheme = GUIColorScheme("by jammed state (segmentwise)", TL("by jammed state (segmentwise)"), RGBColor::GREEN, TL("free"), true, 0, COL_SCHEME_DYNAMIC);
1653 76047 : scheme.addColor(RGBColor::YELLOW, 1., TL("limitedControl"));
1654 76047 : scheme.addColor(RGBColor::RED, 2., TL("jammed"));
1655 152094 : edgeColorer.addScheme(scheme);
1656 152094 : scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", TL("by current occupancy (segmentwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1657 76047 : scheme.addColor(RGBColor::RED, 0.95);
1658 152094 : edgeColorer.addScheme(scheme);
1659 152094 : scheme = GUIColorScheme("by current speed (segmentwise)", TL("by current speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1660 76047 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1661 76047 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1662 76047 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1663 76047 : scheme.addColor(RGBColor::BLUE, 120 / 3.6);
1664 76047 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1665 152094 : edgeColorer.addScheme(scheme);
1666 152094 : scheme = GUIColorScheme("by current flow (segmentwise)", TL("by current flow (segmentwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);
1667 76047 : scheme.addColor(RGBColor::RED, 5000.);
1668 152094 : edgeColorer.addScheme(scheme);
1669 152094 : scheme = GUIColorScheme("by relative speed (segmentwise)", TL("by relative speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);
1670 76047 : scheme.addColor(RGBColor::YELLOW, 0.25);
1671 76047 : scheme.addColor(RGBColor::GREEN, 0.5);
1672 76047 : scheme.addColor(RGBColor::CYAN, 0.75);
1673 76047 : scheme.addColor(RGBColor::BLUE, 1.);
1674 76047 : scheme.addColor(RGBColor::MAGENTA, 1.25);
1675 152094 : edgeColorer.addScheme(scheme);
1676 152094 : scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);
1677 76047 : scheme.addColor(RGBColor::GREEN, 1.);
1678 76047 : scheme.addColor(RGBColor::YELLOW, 10.);
1679 76047 : scheme.addColor(RGBColor::RED, 100.);
1680 152094 : edgeColorer.addScheme(scheme);
1681 152094 : scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), TL("no TAZ"), true);
1682 152094 : edgeColorer.addScheme(scheme);
1683 76047 : scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1684 : scheme.setAllowsNegativeValues(true);
1685 152094 : edgeColorer.addScheme(scheme);
1686 152094 : scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);
1687 : scheme.setAllowsNegativeValues(true);
1688 152094 : edgeColorer.addScheme(scheme);
1689 :
1690 : /// add edge scaling schemes
1691 : {
1692 228141 : edgeScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1693 76047 : GUIScaleScheme edgeScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);
1694 76047 : edgeScheme.addColor(5, 1., TL("selected"));
1695 152094 : edgeScaler.addScheme(edgeScheme);
1696 152094 : edgeScheme = GUIScaleScheme(TL("by allowed speed (streetwise)"), 0);
1697 76047 : edgeScheme.addColor(10, 150. / 3.6);
1698 152094 : edgeScaler.addScheme(edgeScheme);
1699 152094 : edgeScheme = GUIScaleScheme(TL("by current occupancy (streetwise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1700 76047 : edgeScheme.addColor(10, 0.95);
1701 152094 : edgeScaler.addScheme(edgeScheme);
1702 152094 : edgeScheme = GUIScaleScheme(TL("by current speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1703 76047 : edgeScheme.addColor(10, 150. / 3.6);
1704 152094 : edgeScaler.addScheme(edgeScheme);
1705 152094 : edgeScheme = GUIScaleScheme(TL("by current flow (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1706 76047 : edgeScheme.addColor(20, 5000.);
1707 152094 : edgeScaler.addScheme(edgeScheme);
1708 152094 : edgeScheme = GUIScaleScheme(TL("by relative speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1709 76047 : edgeScheme.addColor(20, 1.);
1710 152094 : edgeScaler.addScheme(edgeScheme);
1711 152094 : edgeScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);
1712 76047 : edgeScheme.addColor(1, 1.);
1713 76047 : edgeScheme.addColor(10, 10.);
1714 76047 : edgeScheme.addColor(50, 100.);
1715 152094 : edgeScaler.addScheme(edgeScheme);
1716 76047 : edgeScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, 0.1, TL("missing data"), false, MISSING_DATA);
1717 76047 : edgeScheme.addColor(1, 1.);
1718 76047 : edgeScheme.addColor(2, 10.);
1719 76047 : edgeScheme.addColor(5, 100.);
1720 76047 : edgeScheme.addColor(10, 1000.);
1721 : edgeScheme.setAllowsNegativeValues(true);
1722 152094 : edgeScaler.addScheme(edgeScheme);
1723 76047 : }
1724 :
1725 : /// add vehicle scaling schemes
1726 : {
1727 228141 : vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1728 76047 : GUIScaleScheme vehScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, 1, TL("unselected"), true, 0, COL_SCHEME_MISC);
1729 76047 : vehScheme.addColor(5, 1., TL("selected"));
1730 152094 : vehicleScaler.addScheme(vehScheme);
1731 152094 : vehScheme = GUIScaleScheme(TL("by speed"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1732 76047 : vehScheme.addColor(5, 150. / 3.6);
1733 : vehScheme.setAllowsNegativeValues(true); // negative speed indicates stopped
1734 76047 : vehScheme.addColor(1, -1.); // stopped on road
1735 76047 : vehScheme.addColor(0.5, -2.); // stopped off-road (parking)
1736 152094 : vehicleScaler.addScheme(vehScheme);
1737 152094 : vehScheme = GUIScaleScheme(TL("by waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1738 76047 : vehScheme.addColor(1, 30.);
1739 76047 : vehScheme.addColor(2, 100.);
1740 76047 : vehScheme.addColor(4, 200.);
1741 76047 : vehScheme.addColor(10, 300.);
1742 152094 : vehicleScaler.addScheme(vehScheme);
1743 152094 : vehScheme = GUIScaleScheme(TL("by accumulated waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);
1744 76047 : vehScheme.addColor(5, 100.);
1745 152094 : vehicleScaler.addScheme(vehScheme);
1746 152094 : vehScheme = GUIScaleScheme(TL("by max speed"), 1);
1747 76047 : vehScheme.addColor(1, 30. / 3.6);
1748 76047 : vehScheme.addColor(1, 55. / 3.6);
1749 76047 : vehScheme.addColor(1, 80. / 3.6);
1750 76047 : vehScheme.addColor(1, 120. / 3.6);
1751 76047 : vehScheme.addColor(1, 150. / 3.6);
1752 152094 : vehicleScaler.addScheme(vehScheme);
1753 152094 : vehScheme = GUIScaleScheme(TL("by reroute number"), 1, "", false, 0, COL_SCHEME_DYNAMIC);
1754 76047 : vehScheme.addColor(1, 1.);
1755 76047 : vehScheme.addColor(5, 10.);
1756 152094 : vehicleScaler.addScheme(vehScheme);
1757 152094 : vehScheme = GUIScaleScheme(TL("by offset from best lane"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1758 76047 : vehScheme.addColor(5, -100, TL("opposite lane"));
1759 76047 : vehScheme.addColor(3, -3, "-3");
1760 76047 : vehScheme.addColor(1.5, -1, "-1");
1761 76047 : vehScheme.addColor(1.5, 1, "1");
1762 76047 : vehScheme.addColor(3, 3, "3");
1763 : vehScheme.setAllowsNegativeValues(true);
1764 152094 : vehicleScaler.addScheme(vehScheme);
1765 152094 : vehScheme = GUIScaleScheme(TL("by acceleration"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);
1766 76047 : vehScheme.addColor(4, -9.0);
1767 76047 : vehScheme.addColor(2, -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);
1768 76047 : vehScheme.addColor(1, -0.1);
1769 76047 : vehScheme.addColor(1, 0.1);
1770 76047 : vehScheme.addColor(1, 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);
1771 76047 : vehScheme.addColor(3, 5.2);
1772 : vehScheme.setAllowsNegativeValues(true);
1773 152094 : vehicleScaler.addScheme(vehScheme);
1774 152094 : vehScheme = GUIScaleScheme(TL("by time gap on lane"), 5, "0", false, 0, COL_SCHEME_DYNAMIC);
1775 76047 : vehScheme.addColor(1, -1);
1776 76047 : vehScheme.addColor(1, 1);
1777 76047 : vehScheme.addColor(0.5, 2);
1778 : vehScheme.setAllowsNegativeValues(true);
1779 152094 : vehicleScaler.addScheme(vehScheme);
1780 152094 : vehScheme = GUIScaleScheme(TL("by depart delay"), 0.8);
1781 76047 : vehScheme.addColor(1, 10.);
1782 76047 : vehScheme.addColor(2, 100.);
1783 76047 : vehScheme.addColor(3, 200.);
1784 76047 : vehScheme.addColor(5, 300.);
1785 152094 : vehicleScaler.addScheme(vehScheme);
1786 152094 : vehScheme = GUIScaleScheme(TL("by time loss"), 1, "", false, 0, COL_SCHEME_DYNAMIC);
1787 76047 : vehScheme.addColor(1, 10.);
1788 76047 : vehScheme.addColor(2, 60.);
1789 76047 : vehScheme.addColor(3, 180.);
1790 76047 : vehScheme.addColor(10, 900.);
1791 152094 : vehicleScaler.addScheme(vehScheme);
1792 152094 : vehScheme = GUIScaleScheme(TL("by stop delay"), 0.1, "", false, -1, COL_SCHEME_DYNAMIC);
1793 76047 : vehScheme.addColor(1, 0.);
1794 76047 : vehScheme.addColor(2, 10.);
1795 76047 : vehScheme.addColor(3, 60.);
1796 76047 : vehScheme.addColor(4, 120.);
1797 76047 : vehScheme.addColor(5, 300.);
1798 76047 : vehScheme.addColor(10, 900.);
1799 : vehScheme.setAllowsNegativeValues(true);
1800 152094 : vehicleScaler.addScheme(vehScheme);
1801 152094 : vehScheme = GUIScaleScheme(TL("by stop arrival delay"), 0.1, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);
1802 76047 : vehScheme.addColor(0.5, -10.);
1803 76047 : vehScheme.addColor(1, 0.);
1804 76047 : vehScheme.addColor(2, 10.);
1805 76047 : vehScheme.addColor(3, 60.);
1806 76047 : vehScheme.addColor(4, 120.);
1807 76047 : vehScheme.addColor(5, 300.);
1808 76047 : vehScheme.addColor(10, 900.);
1809 : vehScheme.setAllowsNegativeValues(true);
1810 152094 : vehicleScaler.addScheme(vehScheme);
1811 76047 : vehScheme = GUIScaleScheme(SCHEME_NAME_PARAM_NUMERICAL, 1);
1812 : vehScheme.setAllowsNegativeValues(true);
1813 152094 : vehicleScaler.addScheme(vehScheme);
1814 76047 : }
1815 76047 : }
1816 :
1817 :
1818 : void
1819 0 : GUIVisualizationSettings::initNeteditDefaults() {
1820 : // init color schemes
1821 0 : GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true);
1822 0 : scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));
1823 0 : scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));
1824 0 : scheme.addColor(RGBColor(200, 255, 200), 3, TL("green verge"));
1825 0 : scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));
1826 0 : scheme.addColor(RGBColor::BLACK, 5, TL("railway"));
1827 0 : scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));
1828 0 : scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc
1829 0 : scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing
1830 0 : scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector
1831 0 : scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road
1832 0 : scheme.addColor(RGBColor(145, 145, 145), 11, TL("data mode"));
1833 0 : scheme.addColor(RGBColor(200, 240, 240), 12, TL("airway"));
1834 0 : laneColorer.addScheme(scheme);
1835 0 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1836 0 : scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));
1837 0 : laneColorer.addScheme(scheme);
1838 0 : scheme = GUIColorScheme("by permission code", TL("by permission code"), RGBColor(240, 240, 240), "nobody");
1839 0 : scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");
1840 0 : scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");
1841 0 : scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");
1842 0 : scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");
1843 0 : scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");
1844 0 : scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");
1845 0 : scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");
1846 0 : scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");
1847 0 : scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");
1848 0 : scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");
1849 0 : scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");
1850 0 : laneColorer.addScheme(scheme);
1851 :
1852 0 : scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);
1853 0 : scheme.addColor(RGBColor::YELLOW, 30. / 3.6);
1854 0 : scheme.addColor(RGBColor::GREEN, 55. / 3.6);
1855 0 : scheme.addColor(RGBColor::CYAN, 80. / 3.6);
1856 0 : scheme.addColor(RGBColor::BLUE, 120. / 3.6);
1857 0 : scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);
1858 0 : laneColorer.addScheme(scheme);
1859 :
1860 0 : scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);
1861 0 : scheme.addColor(RGBColor::BLUE, 5.);
1862 0 : laneColorer.addScheme(scheme);
1863 :
1864 0 : scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);
1865 0 : scheme.addColor(RGBColor::ORANGE, 0.25);
1866 0 : scheme.addColor(RGBColor::YELLOW, 0.5);
1867 0 : scheme.addColor(RGBColor(179, 179, 179, 255), 1.);
1868 0 : scheme.addColor(RGBColor::GREEN, 2.);
1869 0 : scheme.addColor(RGBColor::CYAN, 4.);
1870 0 : scheme.addColor(RGBColor::BLUE, 100.);
1871 0 : laneColorer.addScheme(scheme);
1872 0 : laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));
1873 :
1874 0 : scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);
1875 0 : scheme.addColor(RGBColor::RED, -20.);
1876 0 : scheme.addColor(RGBColor::GREEN, 20.);
1877 : scheme.setAllowsNegativeValues(true);
1878 0 : laneColorer.addScheme(scheme);
1879 0 : scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::RED);
1880 0 : scheme.addColor(RGBColor::BLUE, -10.);
1881 0 : scheme.addColor(RGBColor::YELLOW, 50.);
1882 0 : scheme.addColor(RGBColor::GREEN, 100.);
1883 0 : scheme.addColor(RGBColor::MAGENTA, 200.);
1884 : scheme.setAllowsNegativeValues(true);
1885 0 : laneColorer.addScheme(scheme);
1886 0 : scheme = GUIColorScheme("by height at segment start", TL("by height at segment start"), RGBColor::RED);
1887 0 : scheme.addColor(RGBColor::BLUE, -10.);
1888 0 : scheme.addColor(RGBColor::YELLOW, 50.);
1889 0 : scheme.addColor(RGBColor::GREEN, 100.);
1890 0 : scheme.addColor(RGBColor::MAGENTA, 200.);
1891 : scheme.setAllowsNegativeValues(true);
1892 0 : laneColorer.addScheme(scheme);
1893 0 : scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);
1894 0 : scheme.addColor(RGBColor::YELLOW, 0.1);
1895 0 : scheme.addColor(RGBColor::RED, 0.3);
1896 0 : scheme.addColor(RGBColor::GREEN, -0.1);
1897 0 : scheme.addColor(RGBColor::BLUE, -0.3);
1898 : scheme.setAllowsNegativeValues(true);
1899 0 : laneColorer.addScheme(scheme);
1900 0 : scheme = GUIColorScheme("by segment inclination", TL("by segment inclination"), RGBColor::GREY);
1901 0 : scheme.addColor(RGBColor::YELLOW, 0.1);
1902 0 : scheme.addColor(RGBColor::RED, 0.3);
1903 0 : scheme.addColor(RGBColor::GREEN, -0.1);
1904 0 : scheme.addColor(RGBColor::BLUE, -0.3);
1905 : scheme.setAllowsNegativeValues(true);
1906 0 : laneColorer.addScheme(scheme);
1907 0 : scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1908 : scheme.setAllowsNegativeValues(true);
1909 0 : laneColorer.addScheme(scheme);
1910 0 : scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, RGBColor(204, 204, 204));
1911 : scheme.setAllowsNegativeValues(true);
1912 0 : laneColorer.addScheme(scheme);
1913 0 : scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));
1914 0 : scheme.addColor(RGBColor::RED, 1.);
1915 0 : scheme.addColor(RGBColor::RED, -1.);
1916 : scheme.setAllowsNegativeValues(true);
1917 0 : laneColorer.addScheme(scheme);
1918 0 : scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));
1919 0 : scheme.addColor(RGBColor::RED, 1.);
1920 : scheme.setAllowsNegativeValues(false);
1921 0 : laneColorer.addScheme(scheme);
1922 0 : scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);
1923 : scheme.setAllowsNegativeValues(true);
1924 0 : laneColorer.addScheme(scheme);
1925 :
1926 0 : scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor(102, 0, 0), "", true);
1927 0 : scheme.addColor(RGBColor(204, 0, 0), 1, TL("junction bubble"));
1928 0 : scheme.addColor(RGBColor(230, 100, 115), 2, TL("geometry points"));
1929 0 : scheme.addColor(GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW, 3, TL("connections missing"));
1930 0 : scheme.addColor(RGBColor::GREEN, 3, TL("custom shape"));
1931 0 : scheme.addColor(RGBColor(205, 180, 180), 4, TL("data mode"));
1932 0 : junctionColorer.addScheme(scheme);
1933 0 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1934 0 : scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1935 0 : junctionColorer.addScheme(scheme);
1936 0 : scheme = GUIColorScheme(SCHEME_NAME_TYPE, RGBColor::GREEN, "traffic_light", true);
1937 0 : scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");
1938 0 : scheme.addColor(RGBColor::YELLOW, 2, "priority");
1939 0 : scheme.addColor(RGBColor::RED, 3, "priority_stop");
1940 0 : scheme.addColor(RGBColor::BLUE, 4, "right_before_left");
1941 0 : scheme.addColor(RGBColor::CYAN, 5, "allway_stop");
1942 0 : scheme.addColor(RGBColor::GREY, 6, "district");
1943 0 : scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");
1944 0 : scheme.addColor(RGBColor::BLACK, 8, "dead_end");
1945 0 : scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");
1946 0 : scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule
1947 0 : scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");
1948 0 : scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple
1949 0 : scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue
1950 0 : junctionColorer.addScheme(scheme);
1951 0 : scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);
1952 0 : scheme.addColor(RGBColor::BLUE, -10.);
1953 0 : scheme.addColor(RGBColor::RED, 10.);
1954 0 : scheme.addColor(RGBColor::YELLOW, 50.);
1955 0 : scheme.addColor(RGBColor::GREEN, 100.);
1956 0 : scheme.addColor(RGBColor::MAGENTA, 200.);
1957 : scheme.setAllowsNegativeValues(true);
1958 0 : junctionColorer.addScheme(scheme);
1959 :
1960 : /// add POI coloring schemes
1961 0 : poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));
1962 0 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1963 0 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1964 0 : poiColorer.addScheme(scheme);
1965 0 : poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));
1966 :
1967 : /// add polygon coloring schemes
1968 0 : polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));
1969 0 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1970 0 : scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));
1971 0 : polyColorer.addScheme(scheme);
1972 0 : polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1973 0 : polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));
1974 :
1975 : /// add edge scaling schemes
1976 : {
1977 0 : GUIScaleScheme edgeScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);
1978 0 : laneScaler.addScheme(edgeScheme);
1979 0 : }
1980 :
1981 : /// add data coloring schemes
1982 0 : dataColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));
1983 0 : scheme = GUIColorScheme(SCHEME_NAME_SELECTION, RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);
1984 0 : scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));
1985 0 : dataColorer.addScheme(scheme);
1986 0 : dataColorer.addScheme(GUIColorScheme("by origin taz", TL("by origin taz"), RGBColor::ORANGE, "", true));
1987 0 : dataColorer.addScheme(GUIColorScheme("by destination taz", TL("by destination taz"), RGBColor::ORANGE, "", true));
1988 0 : scheme = GUIColorScheme(SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL, COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);
1989 : scheme.setAllowsNegativeValues(true);
1990 0 : dataColorer.addScheme(scheme);
1991 :
1992 : // dummy schemes
1993 0 : vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1994 0 : personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1995 0 : containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));
1996 0 : vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));
1997 0 : }
1998 :
1999 :
2000 : int
2001 0 : GUIVisualizationSettings::getLaneEdgeMode() const {
2002 0 : if (UseMesoSim) {
2003 0 : return edgeColorer.getActive();
2004 : }
2005 0 : return laneColorer.getActive();
2006 : }
2007 :
2008 :
2009 : int
2010 0 : GUIVisualizationSettings::getLaneEdgeScaleMode() const {
2011 0 : if (UseMesoSim) {
2012 0 : return edgeScaler.getActive();
2013 : }
2014 0 : return laneScaler.getActive();
2015 : }
2016 :
2017 :
2018 : GUIColorScheme&
2019 0 : GUIVisualizationSettings::getLaneEdgeScheme() {
2020 0 : if (UseMesoSim) {
2021 0 : return edgeColorer.getScheme();
2022 : }
2023 0 : return laneColorer.getScheme();
2024 : }
2025 :
2026 :
2027 : GUIScaleScheme&
2028 0 : GUIVisualizationSettings::getLaneEdgeScaleScheme() {
2029 0 : if (UseMesoSim) {
2030 0 : return edgeScaler.getScheme();
2031 : }
2032 0 : return laneScaler.getScheme();
2033 : }
2034 :
2035 :
2036 : void
2037 0 : GUIVisualizationSettings::save(OutputDevice& dev) const {
2038 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_SCHEME);
2039 0 : dev.writeAttr(SUMO_ATTR_NAME, name);
2040 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_OPENGL);
2041 0 : dev.writeAttr("dither", dither);
2042 0 : dev.writeAttr("fps", fps);
2043 0 : dev.writeAttr("trueZ", trueZ);
2044 0 : dev.writeAttr("drawBoundaries", drawBoundaries);
2045 0 : dev.writeAttr("disableDottedContours", disableDottedContours);
2046 0 : dev.writeAttr("forceDrawRectangleSelection", forceDrawForRectangleSelection);
2047 0 : geometryIndices.print(dev, "geometryIndices");
2048 0 : dev.closeTag();
2049 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_BACKGROUND);
2050 0 : dev.writeAttr("backgroundColor", backgroundColor);
2051 0 : dev.writeAttr("showGrid", showGrid);
2052 0 : dev.writeAttr("gridXSize", gridXSize);
2053 0 : dev.writeAttr("gridYSize", gridYSize);
2054 0 : dev.closeTag();
2055 : // edges
2056 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_EDGES);
2057 0 : dev.writeAttr("laneEdgeMode", getLaneEdgeMode());
2058 0 : dev.writeAttr("scaleMode", getLaneEdgeScaleMode());
2059 0 : dev.writeAttr("laneShowBorders", laneShowBorders);
2060 0 : dev.writeAttr("showBikeMarkings", showBikeMarkings);
2061 0 : dev.writeAttr("showLinkDecals", showLinkDecals);
2062 0 : dev.writeAttr("realisticLinkRules", realisticLinkRules);
2063 0 : dev.writeAttr("showLinkRules", showLinkRules);
2064 0 : dev.writeAttr("showRails", showRails);
2065 0 : dev.writeAttr("secondaryShape", secondaryShape);
2066 0 : dev.writeAttr("hideConnectors", hideConnectors);
2067 0 : dev.writeAttr("widthExaggeration", laneWidthExaggeration);
2068 0 : dev.writeAttr("minSize", laneMinSize);
2069 0 : dev.writeAttr("showDirection", showLaneDirection);
2070 0 : dev.writeAttr("showSublanes", showSublanes);
2071 0 : dev.writeAttr("spreadSuperposed", spreadSuperposed);
2072 0 : dev.writeAttr("disableHideByZoom", disableHideByZoom);
2073 0 : dev.writeAttr("edgeParam", edgeParam);
2074 0 : dev.writeAttr("laneParam", laneParam);
2075 0 : dev.writeAttr("vehicleParam", vehicleParam);
2076 0 : dev.writeAttr("vehicleScaleParam", vehicleScaleParam);
2077 0 : dev.writeAttr("vehicleTextParam", vehicleTextParam);
2078 0 : dev.writeAttr("edgeData", edgeData);
2079 0 : dev.writeAttr("edgeDataID", edgeDataID);
2080 0 : dev.writeAttr("edgeDataScaling", edgeDataScaling);
2081 0 : edgeValueRainBow.print(dev, "edgeValue");
2082 0 : dev.lf();
2083 0 : dev << " ";
2084 0 : edgeName.print(dev, "edgeName");
2085 0 : dev.lf();
2086 0 : dev << " ";
2087 0 : internalEdgeName.print(dev, "internalEdgeName");
2088 0 : dev.lf();
2089 0 : dev << " ";
2090 0 : cwaEdgeName.print(dev, "cwaEdgeName");
2091 0 : dev.lf();
2092 0 : dev << " ";
2093 0 : streetName.print(dev, "streetName");
2094 0 : dev.lf();
2095 0 : dev << " ";
2096 0 : edgeValue.print(dev, "edgeValue");
2097 0 : edgeScaleValue.print(dev, "edgeScaleValue");
2098 0 : laneColorer.save(dev);
2099 0 : laneScaler.save(dev);
2100 0 : edgeColorer.save(dev, "meso:");
2101 0 : edgeScaler.save(dev, "meso:");
2102 0 : dev.closeTag();
2103 : // vehicles
2104 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_VEHICLES);
2105 0 : dev.writeAttr("vehicleMode", vehicleColorer.getActive());
2106 0 : dev.writeAttr("vehicleScaleMode", vehicleScaler.getActive());
2107 0 : dev.writeAttr("vehicleQuality", vehicleQuality);
2108 0 : vehicleSize.print(dev, "vehicle");
2109 0 : dev.writeAttr("showBlinker", showBlinker);
2110 0 : dev.writeAttr("drawMinGap", drawMinGap);
2111 0 : dev.writeAttr("drawBrakeGap", drawBrakeGap);
2112 0 : dev.writeAttr("showBTRange", showBTRange);
2113 0 : dev.writeAttr("showRouteIndex", showRouteIndex);
2114 0 : dev.writeAttr("scaleLength", scaleLength);
2115 0 : dev.writeAttr("drawReversed", drawReversed);
2116 0 : dev.writeAttr("showParkingInfo", showParkingInfo);
2117 0 : dev.writeAttr("showChargingInfo", showChargingInfo);
2118 0 : dev.lf();
2119 0 : dev << " ";
2120 0 : vehicleName.print(dev, "vehicleName");
2121 0 : dev.lf();
2122 0 : dev << " ";
2123 0 : vehicleValue.print(dev, "vehicleValue");
2124 0 : dev.lf();
2125 0 : dev << " ";
2126 0 : vehicleScaleValue.print(dev, "vehicleScaleValue");
2127 0 : dev.lf();
2128 0 : dev << " ";
2129 0 : vehicleText.print(dev, "vehicleText");
2130 0 : vehicleColorer.save(dev);
2131 0 : vehicleScaler.save(dev);
2132 0 : dev.closeTag();
2133 : // persons
2134 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_PERSONS);
2135 0 : dev.writeAttr("personMode", personColorer.getActive());
2136 0 : dev.writeAttr("personQuality", personQuality);
2137 0 : dev.writeAttr("showPedestrianNetwork", showPedestrianNetwork);
2138 0 : dev.writeAttr("pedestrianNetworkColor", pedestrianNetworkColor);
2139 0 : personSize.print(dev, "person");
2140 0 : dev.lf();
2141 0 : dev << " ";
2142 0 : personName.print(dev, "personName");
2143 0 : dev.lf();
2144 0 : dev << " ";
2145 0 : personValue.print(dev, "personValue");
2146 0 : personColorer.save(dev);
2147 0 : dev.closeTag();
2148 : // containers
2149 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_CONTAINERS);
2150 0 : dev.writeAttr("containerMode", containerColorer.getActive());
2151 0 : dev.writeAttr("containerQuality", containerQuality);
2152 0 : containerSize.print(dev, "container");
2153 0 : dev.lf();
2154 0 : dev << " ";
2155 0 : containerName.print(dev, "containerName");
2156 0 : containerColorer.save(dev);
2157 0 : dev.closeTag();
2158 : // junctions
2159 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_JUNCTIONS);
2160 0 : dev.writeAttr("junctionMode", junctionColorer.getActive());
2161 0 : dev.lf();
2162 0 : dev << " ";
2163 0 : drawLinkTLIndex.print(dev, "drawLinkTLIndex");
2164 0 : dev.lf();
2165 0 : dev << " ";
2166 0 : drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");
2167 0 : dev.lf();
2168 0 : dev << " ";
2169 0 : junctionID.print(dev, "junctionID");
2170 0 : dev.lf();
2171 0 : dev << " ";
2172 0 : junctionName.print(dev, "junctionName");
2173 0 : dev.lf();
2174 0 : dev << " ";
2175 0 : internalJunctionName.print(dev, "internalJunctionName");
2176 0 : dev.lf();
2177 0 : dev << " ";
2178 0 : tlsPhaseIndex.print(dev, "tlsPhaseIndex");
2179 0 : tlsPhaseName.print(dev, "tlsPhaseName");
2180 0 : dev.lf();
2181 0 : dev << " ";
2182 0 : dev.writeAttr("showLane2Lane", showLane2Lane);
2183 0 : dev.writeAttr("drawShape", drawJunctionShape);
2184 0 : dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);
2185 0 : junctionSize.print(dev, "junction");
2186 0 : junctionValueRainBow.print(dev, "junctionValue");
2187 0 : junctionColorer.save(dev);
2188 0 : dev.closeTag();
2189 : // additionals
2190 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_ADDITIONALS);
2191 0 : dev.writeAttr("addMode", addMode);
2192 0 : addSize.print(dev, "add");
2193 0 : addName.print(dev, "addName");
2194 0 : addFullName.print(dev, "addFullName");
2195 : // temporal (will be integrated in a schema)
2196 0 : dev.writeAttr("busStopColor", colorSettings.busStopColor);
2197 0 : dev.writeAttr("busStopColorSign", colorSettings.busStopColorSign);
2198 0 : dev.writeAttr("chargingStationColor", colorSettings.chargingStationColor);
2199 0 : dev.writeAttr("chargingStationColorCharge", colorSettings.chargingStationColorCharge);
2200 0 : dev.writeAttr("chargingStationColorSign", colorSettings.chargingStationColorSign);
2201 0 : dev.writeAttr("containerStopColor", colorSettings.containerStopColor);
2202 0 : dev.writeAttr("containerStopColorSign", colorSettings.containerStopColorSign);
2203 0 : dev.writeAttr("parkingAreaColor", colorSettings.parkingAreaColor);
2204 0 : dev.writeAttr("parkingAreaColorSign", colorSettings.parkingAreaColorSign);
2205 0 : dev.writeAttr("parkingSpaceColor", colorSettings.parkingSpaceColor);
2206 0 : dev.writeAttr("parkingSpaceColorContour", colorSettings.parkingSpaceColorContour);
2207 0 : dev.writeAttr("personTripColor", colorSettings.personTripColor);
2208 0 : dev.writeAttr("personTripWidth", widthSettings.personTripWidth);
2209 0 : dev.writeAttr("rideColor", colorSettings.rideColor);
2210 0 : dev.writeAttr("rideWidth", widthSettings.rideWidth);
2211 0 : dev.writeAttr("selectedAdditionalColor", colorSettings.selectedAdditionalColor);
2212 0 : dev.writeAttr("selectedConnectionColor", colorSettings.selectedConnectionColor);
2213 0 : dev.writeAttr("selectedContainerColor", colorSettings.selectedContainerColor);
2214 0 : dev.writeAttr("selectedContainerPlanColor", colorSettings.selectedContainerPlanColor);
2215 0 : dev.writeAttr("selectedCrossingColor", colorSettings.selectedCrossingColor);
2216 0 : dev.writeAttr("selectedEdgeColor", colorSettings.selectedEdgeColor);
2217 0 : dev.writeAttr("selectedEdgeDataColor", colorSettings.selectedEdgeDataColor);
2218 0 : dev.writeAttr("selectedLaneColor", colorSettings.selectedLaneColor);
2219 0 : dev.writeAttr("selectedPersonColor", colorSettings.selectedPersonColor);
2220 0 : dev.writeAttr("selectedPersonPlanColor", colorSettings.selectedPersonPlanColor);
2221 0 : dev.writeAttr("selectedProhibitionColor", colorSettings.selectedProhibitionColor);
2222 0 : dev.writeAttr("selectedRouteColor", colorSettings.selectedRouteColor);
2223 0 : dev.writeAttr("selectedVehicleColor", colorSettings.selectedVehicleColor);
2224 0 : dev.writeAttr("selectionColor", colorSettings.selectionColor);
2225 0 : dev.writeAttr("stopColor", colorSettings.stopColor);
2226 0 : dev.writeAttr("waypointColor", colorSettings.waypointColor);
2227 0 : dev.writeAttr("stopContainerColor", colorSettings.stopContainerColor);
2228 0 : dev.writeAttr("stopPersonColor", colorSettings.stopPersonColor);
2229 0 : dev.writeAttr("trainStopColor", colorSettings.trainStopColor);
2230 0 : dev.writeAttr("trainStopColorSign", colorSettings.trainStopColorSign);
2231 0 : dev.writeAttr("transhipColor", colorSettings.transhipColor);
2232 0 : dev.writeAttr("transhipWidth", widthSettings.transhipWidth);
2233 0 : dev.writeAttr("transportColor", colorSettings.transportColor);
2234 0 : dev.writeAttr("transportWidth", widthSettings.transportWidth);
2235 0 : dev.writeAttr("tripWidth", widthSettings.tripWidth);
2236 0 : dev.writeAttr("vehicleTripColor", colorSettings.personTripColor);
2237 0 : dev.writeAttr("walkColor", colorSettings.walkColor);
2238 0 : dev.writeAttr("walkWidth", widthSettings.walkWidth);
2239 0 : dev.closeTag();
2240 : // pois
2241 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_POIS);
2242 0 : dev.writeAttr("poiTextParam", poiTextParam);
2243 0 : poiSize.print(dev, "poi");
2244 0 : dev.writeAttr("poiDetail", poiDetail);
2245 0 : poiName.print(dev, "poiName");
2246 0 : poiType.print(dev, "poiType");
2247 0 : poiText.print(dev, "poiText");
2248 0 : dev.writeAttr("poiUseCustomLayer", poiUseCustomLayer);
2249 0 : dev.writeAttr("poiCustomLayer", poiCustomLayer);
2250 0 : poiColorer.save(dev);
2251 0 : dev.closeTag();
2252 : // polys
2253 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_POLYS);
2254 0 : polySize.print(dev, "poly");
2255 0 : polyName.print(dev, "polyName");
2256 0 : polyType.print(dev, "polyType");
2257 0 : dev.writeAttr("polyUseCustomLayer", polyUseCustomLayer);
2258 0 : dev.writeAttr("polyCustomLayer", polyCustomLayer);
2259 0 : polyColorer.save(dev);
2260 0 : dev.closeTag();
2261 : // 3D
2262 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_3D);
2263 0 : dev.writeAttr("show3DTLSLinkMarkers", show3DTLSLinkMarkers);
2264 0 : dev.writeAttr("show3DTLSDomes", show3DTLSDomes);
2265 0 : dev.writeAttr("show3DHeadUpDisplay", show3DHeadUpDisplay);
2266 0 : dev.writeAttr("generate3DTLSModels", generate3DTLSModels);
2267 0 : dev.writeAttr("ambient3DLight", ambient3DLight);
2268 0 : dev.writeAttr("diffuse3DLight", diffuse3DLight);
2269 0 : dev.closeTag();
2270 : // legend
2271 0 : dev.openTag(SUMO_TAG_VIEWSETTINGS_LEGEND);
2272 0 : dev.writeAttr("showSizeLegend", showSizeLegend);
2273 0 : dev.writeAttr("showColorLegend", showColorLegend);
2274 0 : dev.writeAttr("showVehicleColorLegend", showVehicleColorLegend);
2275 0 : dev.closeTag();
2276 :
2277 0 : dev.closeTag();
2278 0 : }
2279 :
2280 :
2281 : bool
2282 0 : GUIVisualizationSettings::operator==(const GUIVisualizationSettings& v2) {
2283 0 : if (show3DTLSDomes != v2.show3DTLSDomes) {
2284 : return false;
2285 : }
2286 0 : if (show3DTLSLinkMarkers != v2.show3DTLSLinkMarkers) {
2287 : return false;
2288 : }
2289 0 : if (show3DHeadUpDisplay != v2.show3DHeadUpDisplay) {
2290 : return false;
2291 : }
2292 0 : if (generate3DTLSModels != v2.generate3DTLSModels) {
2293 : return false;
2294 : }
2295 0 : if (ambient3DLight != v2.ambient3DLight) {
2296 : return false;
2297 : }
2298 0 : if (diffuse3DLight != v2.diffuse3DLight) {
2299 : return false;
2300 : }
2301 0 : if (skyColor != v2.skyColor) {
2302 : return false;
2303 : }
2304 0 : if (dither != v2.dither) {
2305 : return false;
2306 : }
2307 0 : if (fps != v2.fps) {
2308 : return false;
2309 : }
2310 0 : if (trueZ != v2.trueZ) {
2311 : return false;
2312 : }
2313 0 : if (drawBoundaries != v2.drawBoundaries) {
2314 : return false;
2315 : }
2316 0 : if (disableDottedContours != v2.disableDottedContours) {
2317 : return false;
2318 : }
2319 0 : if (forceDrawForRectangleSelection != v2.forceDrawForRectangleSelection) {
2320 : return false;
2321 : }
2322 0 : if (geometryIndices != v2.geometryIndices) {
2323 : return false;
2324 : }
2325 0 : if (backgroundColor != v2.backgroundColor) {
2326 : return false;
2327 : }
2328 0 : if (colorSettings != v2.colorSettings) {
2329 : return false;
2330 : }
2331 0 : if (showGrid != v2.showGrid) {
2332 : return false;
2333 : }
2334 0 : if (gridXSize != v2.gridXSize) {
2335 : return false;
2336 : }
2337 0 : if (gridYSize != v2.gridYSize) {
2338 : return false;
2339 : }
2340 :
2341 : if (!(edgeColorer == v2.edgeColorer)) {
2342 0 : return false;
2343 : }
2344 0 : if (!(edgeScaler == v2.edgeScaler)) {
2345 : return false;
2346 : }
2347 : if (!(laneColorer == v2.laneColorer)) {
2348 0 : return false;
2349 : }
2350 0 : if (!(laneScaler == v2.laneScaler)) {
2351 : return false;
2352 : }
2353 0 : if (laneShowBorders != v2.laneShowBorders) {
2354 : return false;
2355 : }
2356 0 : if (showBikeMarkings != v2.showBikeMarkings) {
2357 : return false;
2358 : }
2359 0 : if (showLinkDecals != v2.showLinkDecals) {
2360 : return false;
2361 : }
2362 0 : if (realisticLinkRules != v2.realisticLinkRules) {
2363 : return false;
2364 : }
2365 0 : if (showLinkRules != v2.showLinkRules) {
2366 : return false;
2367 : }
2368 0 : if (showRails != v2.showRails) {
2369 : return false;
2370 : }
2371 0 : if (secondaryShape != v2.secondaryShape) {
2372 : return false;
2373 : }
2374 0 : if (edgeName != v2.edgeName) {
2375 : return false;
2376 : }
2377 0 : if (internalEdgeName != v2.internalEdgeName) {
2378 : return false;
2379 : }
2380 0 : if (cwaEdgeName != v2.cwaEdgeName) {
2381 : return false;
2382 : }
2383 0 : if (streetName != v2.streetName) {
2384 : return false;
2385 : }
2386 0 : if (edgeValue != v2.edgeValue) {
2387 : return false;
2388 : }
2389 0 : if (edgeScaleValue != v2.edgeScaleValue) {
2390 : return false;
2391 : }
2392 0 : if (hideConnectors != v2.hideConnectors) {
2393 : return false;
2394 : }
2395 0 : if (laneWidthExaggeration != v2.laneWidthExaggeration) {
2396 : return false;
2397 : }
2398 0 : if (laneMinSize != v2.laneMinSize) {
2399 : return false;
2400 : }
2401 0 : if (showLaneDirection != v2.showLaneDirection) {
2402 : return false;
2403 : }
2404 0 : if (showSublanes != v2.showSublanes) {
2405 : return false;
2406 : }
2407 0 : if (spreadSuperposed != v2.spreadSuperposed) {
2408 : return false;
2409 : }
2410 0 : if (disableHideByZoom != v2.disableHideByZoom) {
2411 : return false;
2412 : }
2413 0 : if (edgeParam != v2.edgeParam) {
2414 : return false;
2415 : }
2416 0 : if (laneParam != v2.laneParam) {
2417 : return false;
2418 : }
2419 0 : if (vehicleParam != v2.vehicleParam) {
2420 : return false;
2421 : }
2422 0 : if (vehicleScaleParam != v2.vehicleScaleParam) {
2423 : return false;
2424 : }
2425 0 : if (vehicleTextParam != v2.vehicleTextParam) {
2426 : return false;
2427 : }
2428 0 : if (edgeData != v2.edgeData) {
2429 : return false;
2430 : }
2431 0 : if (edgeDataID != v2.edgeDataID) {
2432 : return false;
2433 : }
2434 0 : if (edgeDataScaling != v2.edgeDataScaling) {
2435 : return false;
2436 : }
2437 0 : if (edgeValueRainBow != v2.edgeValueRainBow) {
2438 : return false;
2439 : }
2440 : if (!(vehicleColorer == v2.vehicleColorer)) {
2441 0 : return false;
2442 : }
2443 0 : if (!(vehicleScaler == v2.vehicleScaler)) {
2444 : return false;
2445 : }
2446 0 : if (vehicleQuality != v2.vehicleQuality) {
2447 : return false;
2448 : }
2449 0 : if (vehicleSize != v2.vehicleSize) {
2450 : return false;
2451 : }
2452 0 : if (showBlinker != v2.showBlinker) {
2453 : return false;
2454 : }
2455 0 : if (drawLaneChangePreference != v2.drawLaneChangePreference) {
2456 : return false;
2457 : }
2458 0 : if (drawMinGap != v2.drawMinGap) {
2459 : return false;
2460 : }
2461 0 : if (drawBrakeGap != v2.drawBrakeGap) {
2462 : return false;
2463 : }
2464 0 : if (showBTRange != v2.showBTRange) {
2465 : return false;
2466 : }
2467 0 : if (showRouteIndex != v2.showRouteIndex) {
2468 : return false;
2469 : }
2470 0 : if (scaleLength != v2.scaleLength) {
2471 : return false;
2472 : }
2473 0 : if (drawReversed != v2.drawReversed) {
2474 : return false;
2475 : }
2476 0 : if (showParkingInfo != v2.showParkingInfo) {
2477 : return false;
2478 : }
2479 0 : if (showChargingInfo != v2.showChargingInfo) {
2480 : return false;
2481 : }
2482 0 : if (vehicleName != v2.vehicleName) {
2483 : return false;
2484 : }
2485 0 : if (vehicleValue != v2.vehicleValue) {
2486 : return false;
2487 : }
2488 0 : if (vehicleScaleValue != v2.vehicleScaleValue) {
2489 : return false;
2490 : }
2491 0 : if (vehicleText != v2.vehicleText) {
2492 : return false;
2493 : }
2494 : if (!(personColorer == v2.personColorer)) {
2495 0 : return false;
2496 : }
2497 0 : if (personQuality != v2.personQuality) {
2498 : return false;
2499 : }
2500 0 : if (personSize != v2.personSize) {
2501 : return false;
2502 : }
2503 0 : if (personName != v2.personName) {
2504 : return false;
2505 : }
2506 0 : if (personValue != v2.personValue) {
2507 : return false;
2508 : }
2509 0 : if (showPedestrianNetwork != v2.showPedestrianNetwork) {
2510 : return false;
2511 : }
2512 0 : if (pedestrianNetworkColor != v2.pedestrianNetworkColor) {
2513 : return false;
2514 : }
2515 : if (!(containerColorer == v2.containerColorer)) {
2516 0 : return false;
2517 : }
2518 0 : if (containerQuality != v2.containerQuality) {
2519 : return false;
2520 : }
2521 0 : if (containerSize != v2.containerSize) {
2522 : return false;
2523 : }
2524 0 : if (containerName != v2.containerName) {
2525 : return false;
2526 : }
2527 : if (!(junctionColorer == v2.junctionColorer)) {
2528 0 : return false;
2529 : }
2530 : if (!(poiColorer == v2.poiColorer)) {
2531 0 : return false;
2532 : }
2533 : if (!(polyColorer == v2.polyColorer)) {
2534 0 : return false;
2535 : }
2536 0 : if (drawLinkTLIndex != v2.drawLinkTLIndex) {
2537 : return false;
2538 : }
2539 0 : if (drawLinkJunctionIndex != v2.drawLinkJunctionIndex) {
2540 : return false;
2541 : }
2542 0 : if (junctionID != v2.junctionID) {
2543 : return false;
2544 : }
2545 0 : if (junctionName != v2.junctionName) {
2546 : return false;
2547 : }
2548 0 : if (internalJunctionName != v2.internalJunctionName) {
2549 : return false;
2550 : }
2551 0 : if (tlsPhaseIndex != v2.tlsPhaseIndex) {
2552 : return false;
2553 : }
2554 0 : if (tlsPhaseName != v2.tlsPhaseName) {
2555 : return false;
2556 : }
2557 :
2558 0 : if (showLane2Lane != v2.showLane2Lane) {
2559 : return false;
2560 : }
2561 :
2562 0 : if (drawJunctionShape != v2.drawJunctionShape) {
2563 : return false;
2564 : }
2565 :
2566 0 : if (drawCrossingsAndWalkingareas != v2.drawCrossingsAndWalkingareas) {
2567 : return false;
2568 : }
2569 0 : if (junctionSize != v2.junctionSize) {
2570 : return false;
2571 : }
2572 0 : if (junctionValueRainBow != v2.junctionValueRainBow) {
2573 : return false;
2574 : }
2575 :
2576 0 : if (addMode != v2.addMode) {
2577 : return false;
2578 : }
2579 0 : if (addSize != v2.addSize) {
2580 : return false;
2581 : }
2582 0 : if (addName != v2.addName) {
2583 : return false;
2584 : }
2585 0 : if (addFullName != v2.addFullName) {
2586 : return false;
2587 : }
2588 0 : if (poiSize != v2.poiSize) {
2589 : return false;
2590 : }
2591 0 : if (poiDetail != v2.poiDetail) {
2592 : return false;
2593 : }
2594 0 : if (poiName != v2.poiName) {
2595 : return false;
2596 : }
2597 0 : if (poiType != v2.poiType) {
2598 : return false;
2599 : }
2600 0 : if (poiText != v2.poiText) {
2601 : return false;
2602 : }
2603 0 : if (poiTextParam != v2.poiTextParam) {
2604 : return false;
2605 : }
2606 0 : if (poiUseCustomLayer != v2.poiUseCustomLayer) {
2607 : return false;
2608 : }
2609 0 : if (poiCustomLayer != v2.poiCustomLayer) {
2610 : return false;
2611 : }
2612 0 : if (polySize != v2.polySize) {
2613 : return false;
2614 : }
2615 0 : if (polyName != v2.polyName) {
2616 : return false;
2617 : }
2618 0 : if (polyType != v2.polyType) {
2619 : return false;
2620 : }
2621 0 : if (polyUseCustomLayer != v2.polyUseCustomLayer) {
2622 : return false;
2623 : }
2624 0 : if (polyCustomLayer != v2.polyCustomLayer) {
2625 : return false;
2626 : }
2627 :
2628 0 : if (showSizeLegend != v2.showSizeLegend) {
2629 : return false;
2630 : }
2631 0 : if (showColorLegend != v2.showColorLegend) {
2632 : return false;
2633 : }
2634 0 : if (showVehicleColorLegend != v2.showVehicleColorLegend) {
2635 : return false;
2636 : }
2637 : if (!(dataColorer == v2.dataColorer)) {
2638 0 : return false;
2639 : }
2640 0 : if (!(dataValue == v2.dataValue)) {
2641 : return false;
2642 : }
2643 0 : if (!(tazRelWidthExaggeration == v2.tazRelWidthExaggeration)) {
2644 : return false;
2645 : }
2646 0 : if (!(edgeRelWidthExaggeration == v2.edgeRelWidthExaggeration)) {
2647 : return false;
2648 : }
2649 0 : if (!(relDataAttr == v2.relDataAttr)) {
2650 : return false;
2651 : }
2652 0 : if (!(dataValueRainBow == v2.dataValueRainBow)) {
2653 : return false;
2654 : }
2655 :
2656 : return true;
2657 : }
2658 :
2659 :
2660 : const RGBColor&
2661 281885 : GUIVisualizationSettings::getLinkColor(const LinkState& ls, bool realistic) {
2662 281885 : switch (ls) {
2663 : case LINKSTATE_TL_GREEN_MAJOR:
2664 : return SUMO_color_TL_GREEN_MAJOR;
2665 7661 : case LINKSTATE_TL_GREEN_MINOR:
2666 7661 : return SUMO_color_TL_GREEN_MINOR;
2667 22831 : case LINKSTATE_TL_RED:
2668 22831 : return SUMO_color_TL_RED;
2669 10 : case LINKSTATE_TL_REDYELLOW:
2670 10 : return SUMO_color_TL_REDYELLOW;
2671 0 : case LINKSTATE_TL_YELLOW_MAJOR:
2672 0 : return SUMO_color_TL_YELLOW_MAJOR;
2673 1494 : case LINKSTATE_TL_YELLOW_MINOR:
2674 1494 : return SUMO_color_TL_YELLOW_MINOR;
2675 0 : case LINKSTATE_TL_OFF_BLINKING:
2676 0 : return SUMO_color_TL_OFF_BLINKING;
2677 0 : case LINKSTATE_TL_OFF_NOSIGNAL:
2678 0 : return SUMO_color_TL_OFF_NOSIGNAL;
2679 112238 : case LINKSTATE_MAJOR:
2680 112238 : return realistic ? RGBColor::INVISIBLE : SUMO_color_MAJOR;
2681 20455 : case LINKSTATE_MINOR:
2682 20455 : return realistic ? SUMO_color_MAJOR : SUMO_color_MINOR;
2683 335 : case LINKSTATE_EQUAL:
2684 335 : return SUMO_color_EQUAL;
2685 16 : case LINKSTATE_STOP:
2686 16 : return realistic ? SUMO_color_MAJOR : SUMO_color_STOP;
2687 0 : case LINKSTATE_ALLWAY_STOP:
2688 0 : return realistic ? SUMO_color_MAJOR : SUMO_color_ALLWAY_STOP;
2689 3436 : case LINKSTATE_ZIPPER:
2690 3436 : return realistic ? RGBColor::INVISIBLE : SUMO_color_ZIPPER;
2691 99384 : case LINKSTATE_DEADEND:
2692 99384 : return SUMO_color_DEADEND;
2693 0 : default:
2694 0 : throw ProcessError(TLF("No color defined for LinkState '%'", std::string(ls, 1)));
2695 : }
2696 : }
2697 :
2698 :
2699 : double
2700 6 : GUIVisualizationSettings::getTextAngle(double objectAngle) const {
2701 6 : double viewAngle = objectAngle - angle;
2702 12 : while (viewAngle < 0) {
2703 6 : viewAngle += 360;
2704 : }
2705 : // fmod round towards zero which is not want we want for negative numbers
2706 : viewAngle = fmod(viewAngle, 360);
2707 6 : if (viewAngle > 90 && viewAngle < 270) {
2708 : // avoid reading text on its head
2709 6 : objectAngle -= 180;
2710 : }
2711 6 : return objectAngle;
2712 : }
2713 :
2714 :
2715 : bool
2716 12 : GUIVisualizationSettings::flippedTextAngle(double objectAngle) const {
2717 12 : double viewAngle = objectAngle - angle;
2718 12 : while (viewAngle < 0) {
2719 0 : viewAngle += 360;
2720 : }
2721 : // fmod round towards zero which is not want we want for negative numbers
2722 : viewAngle = fmod(viewAngle, 360);
2723 12 : return (viewAngle > 90 && viewAngle < 270);
2724 : }
2725 :
2726 :
2727 : GUIVisualizationSettings::Detail
2728 0 : GUIVisualizationSettings::getDetailLevel(const double exaggeration) const {
2729 : // calculate factor
2730 0 : const auto factor = (scale * exaggeration);
2731 0 : if (factor >= 10) {
2732 : return GUIVisualizationSettings::Detail::Level0;
2733 0 : } else if (factor >= 5) {
2734 : return GUIVisualizationSettings::Detail::Level1;
2735 0 : } else if (factor >= 2.5) {
2736 : return GUIVisualizationSettings::Detail::Level2;
2737 0 : } else if (factor >= 1.25) {
2738 : return GUIVisualizationSettings::Detail::Level3;
2739 : } else {
2740 0 : return GUIVisualizationSettings::Detail::Level4;
2741 : }
2742 : }
2743 :
2744 :
2745 : bool
2746 61125 : GUIVisualizationSettings::drawDetail(const double detail, const double exaggeration) const {
2747 61125 : if (detail <= 0) {
2748 : return true;
2749 : } else {
2750 61125 : return ((scale * exaggeration) >= detail);
2751 : }
2752 : }
2753 :
2754 :
2755 : bool
2756 0 : GUIVisualizationSettings::drawMovingGeometryPoint(const double exaggeration, const double radius) const {
2757 0 : return (scale * radius * exaggeration > 10);
2758 : }
2759 :
2760 : /****************************************************************************/
|