LCOV - code coverage report
Current view: top level - src/utils/gui/settings - GUIVisualizationSettings.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 55.3 % 1867 1032
Test Date: 2024-12-21 15:45:41 Functions: 30.4 % 46 14

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

Generated by: LCOV version 2.0-1