LCOV - code coverage report
Current view: top level - src/utils/gui/settings - GUIVisualizationSettings.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 55.2 % 1867 1031
Test Date: 2024-11-20 15:55:46 Functions: 30.4 % 46 14

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

Generated by: LCOV version 2.0-1