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

Generated by: LCOV version 2.0-1