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