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