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