LCOV - code coverage report
Current view: top level - src/utils/gui/settings - GUIVisualizationSettings.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 1027 1756 58.5 %
Date: 2024-09-16 15:39:55 Functions: 14 45 31.1 %

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

Generated by: LCOV version 1.14