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