Path: blob/main/src/utils/gui/settings/GUIVisualizationSettings.cpp
169684 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 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"),654dataValueRainBow(false, -100, false, 100, false, 0, false, 1),655ignoreColorSchemeFor3DVehicles(false),656show3DTLSLinkMarkers(true),657show3DTLSDomes(true),658generate3DTLSModels(false),659show3DHeadUpDisplay(true),660ambient3DLight(OSG_color_AMBIENT),661diffuse3DLight(OSG_color_DIFFUSE),662skyColor(OSG_color_SKY),663showSizeLegend(true),664showColorLegend(false),665showVehicleColorLegend(false),666gaming(false),667drawBoundaries(false),668selectorFrameScale(1.),669drawForViewObjectsHandler(false),670drawForRectangleSelection(false),671forceDrawForRectangleSelection(false),672disableDottedContours(false),673geometryIndices(false, 50, RGBColor(255, 0, 128, 255)),674secondaryShape(false),675lefthand(false),676disableLaneIcons(false),677myIgnoreHideByZoom(false) {678// init defaults depending of netedit or SUMO-GUI679if (netedit) {680initNeteditDefaults();681} else {682initSumoGuiDefaults();683}684}685686687bool688GUIVisualizationSettings::checkDrawJunction(const Boundary& b, const bool selected) const {689if (drawForViewObjectsHandler) {690return false;691} else if (junctionSize.constantSize) {692return true;693} else if (junctionSize.constantSizeSelected && selected) {694return true;695} else if (drawLinkTLIndex.showText && drawLinkTLIndex.constSize) {696return true;697} else if (drawLinkJunctionIndex.showText && drawLinkJunctionIndex.constSize) {698return true;699} else if (junctionID.showText && junctionID.constSize) {700return true;701} else if (junctionName.showText && junctionName.constSize) {702return true;703} else if (internalJunctionName.showText && internalJunctionName.constSize) {704return true;705} else if (tlsPhaseIndex.showText && tlsPhaseIndex.constSize) {706return true;707} else if (tlsPhaseName.showText && tlsPhaseName.constSize) {708return true;709} else {710return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;711}712}713714715bool716GUIVisualizationSettings::checkDrawEdge(const Boundary& b) const {717if (drawForViewObjectsHandler) {718// needed if we're selecting using a rectangle719return true;720} else if (disableHideByZoom) {721return true;722} else if (myIgnoreHideByZoom) {723return true;724} else {725return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;726}727}728729730void731GUIVisualizationSettings::updateIgnoreHideByZoom() {732// general733if (disableHideByZoom) {734myIgnoreHideByZoom = true;735// junctions736} else if (junctionSize.constantSize && junctionSize.constantSizeSelected) {737myIgnoreHideByZoom = true;738} else if (drawLinkTLIndex.showText && drawLinkTLIndex.constSize) {739myIgnoreHideByZoom = true;740} else if (drawLinkJunctionIndex.showText && drawLinkJunctionIndex.constSize) {741myIgnoreHideByZoom = true;742} else if (junctionID.showText && junctionID.constSize) {743myIgnoreHideByZoom = true;744} else if (junctionName.showText && junctionName.constSize) {745myIgnoreHideByZoom = true;746} else if (internalJunctionName.showText && internalJunctionName.constSize) {747myIgnoreHideByZoom = true;748} else if (tlsPhaseIndex.showText && tlsPhaseIndex.constSize) {749myIgnoreHideByZoom = true;750} else if (tlsPhaseName.showText && tlsPhaseName.constSize) {751myIgnoreHideByZoom = true;752// edges753} else if (edgeName.showText) {754myIgnoreHideByZoom = true;755} else if (internalEdgeName.showText && internalEdgeName.constSize) {756myIgnoreHideByZoom = true;757} else if (cwaEdgeName.showText && cwaEdgeName.constSize) {758myIgnoreHideByZoom = true;759} else if (streetName.showText && streetName.constSize) {760myIgnoreHideByZoom = true;761} else if (edgeValue.showText && edgeValue.constSize) {762myIgnoreHideByZoom = true;763} else if (edgeScaleValue.showText && edgeScaleValue.constSize) {764myIgnoreHideByZoom = true;765// additionals766} else if (addSize.constantSize) {767myIgnoreHideByZoom = true;768} else if (addSize.constantSizeSelected) {769myIgnoreHideByZoom = true;770} else if (addName.showText && addName.constSize) {771myIgnoreHideByZoom = true;772} else if (addFullName.showText && addFullName.constSize) {773myIgnoreHideByZoom = true;774// POIs775} else if (poiSize.constantSize) {776myIgnoreHideByZoom = true;777} else if (poiSize.constantSizeSelected) {778myIgnoreHideByZoom = true;779} else if (poiName.showText && poiName.constSize) {780myIgnoreHideByZoom = true;781} else if (poiType.showText && poiType.constSize) {782myIgnoreHideByZoom = true;783} else if (poiText.showText && poiText.constSize) {784myIgnoreHideByZoom = true;785// vehicles786} else if (vehicleSize.constantSize) {787myIgnoreHideByZoom = true;788} else if (vehicleSize.constantSizeSelected) {789myIgnoreHideByZoom = true;790} else if (vehicleName.showText && vehicleName.constSize) {791myIgnoreHideByZoom = true;792} else if (vehicleValue.showText && vehicleValue.constSize) {793myIgnoreHideByZoom = true;794} else if (vehicleScaleValue.showText && vehicleScaleValue.constSize) {795myIgnoreHideByZoom = true;796} else if (vehicleText.showText && vehicleText.constSize) {797myIgnoreHideByZoom = true;798// persons799} else if (personSize.constantSize) {800myIgnoreHideByZoom = true;801} else if (personSize.constantSizeSelected) {802myIgnoreHideByZoom = true;803} else if (personName.showText && personName.constSize) {804myIgnoreHideByZoom = true;805} else if (personValue.showText && personValue.constSize) {806myIgnoreHideByZoom = true;807// containers808} else if (containerSize.constantSize) {809myIgnoreHideByZoom = true;810} else if (containerSize.constantSizeSelected) {811myIgnoreHideByZoom = true;812} else if (containerName.showText && containerName.constSize) {813myIgnoreHideByZoom = true;814} else {815myIgnoreHideByZoom = false;816}817}818819820bool821GUIVisualizationSettings::checkDrawAdditional(const Detail d, const bool selected) const {822if (drawForViewObjectsHandler) {823return false;824} else if (myIgnoreHideByZoom) {825return true;826} else if (addSize.constantSize) {827return true;828} else if (addSize.constantSizeSelected && selected) {829return true;830} else if (addName.showText && addName.constSize) {831return true;832} else if (addFullName.showText && addFullName.constSize) {833return true;834} else {835return d <= GUIVisualizationSettings::Detail::Additionals;836}837}838839840bool841GUIVisualizationSettings::checkDrawPoly(const Boundary& b, const bool selected) const {842if (drawForViewObjectsHandler) {843return false;844} else if (myIgnoreHideByZoom) {845return true;846} else if (polySize.constantSize) {847return true;848} else if (polySize.constantSizeSelected && selected) {849return true;850} else if (polyName.showText && polyName.constSize) {851return true;852} else if (polyType.showText && polyType.constSize) {853return true;854} else {855return (scale * MAX2(b.getWidth(), b.getHeight())) > BoundarySizeDrawing;856}857}858859860bool861GUIVisualizationSettings::checkDrawPOI(const double w, const double h, const Detail d, const bool selected) const {862if (drawForViewObjectsHandler) {863return false;864} else if (myIgnoreHideByZoom) {865return true;866} else if (poiSize.constantSize) {867return true;868} else if (poiSize.constantSizeSelected && selected) {869return true;870} else if (poiName.showText && poiName.constSize) {871return true;872} else if (poiType.showText && poiType.constSize) {873return true;874} else if (poiText.showText && poiText.constSize) {875return true;876} else if ((w > 0) && (h > 0)) {877return (scale * MAX2(w, h)) > BoundarySizeDrawing;878} else {879return d <= GUIVisualizationSettings::Detail::Additionals;880}881}882883884bool885GUIVisualizationSettings::checkDrawVehicle(const Detail d, const bool selected) const {886if (drawForViewObjectsHandler) {887return false;888} else if (myIgnoreHideByZoom) {889return true;890} else if (vehicleSize.constantSize) {891return true;892} else if (vehicleSize.constantSizeSelected && selected) {893return true;894} else if (vehicleName.showText && vehicleName.constSize) {895return true;896} else if (vehicleValue.showText && vehicleValue.constSize) {897return true;898} else if (vehicleScaleValue.showText && vehicleScaleValue.constSize) {899return true;900} else if (vehicleText.showText && vehicleText.constSize) {901return true;902} else {903return d <= GUIVisualizationSettings::Detail::Additionals;904}905}906907908bool909GUIVisualizationSettings::checkDrawPerson(const Detail d, const bool selected) const {910if (drawForViewObjectsHandler) {911return false;912} else if (myIgnoreHideByZoom) {913return true;914} else if (personSize.constantSize) {915return true;916} else if (personSize.constantSizeSelected && selected) {917return true;918} else if (personName.showText && personName.constSize) {919return true;920} else if (personValue.showText && personValue.constSize) {921return true;922} else {923return d <= GUIVisualizationSettings::Detail::Additionals;924}925}926927928bool929GUIVisualizationSettings::checkDrawContainer(const Detail d, const bool selected) const {930if (drawForViewObjectsHandler) {931return false;932} else if (myIgnoreHideByZoom) {933return true;934} else if (containerSize.constantSize) {935return true;936} else if (containerSize.constantSizeSelected && selected) {937return true;938} else if (containerName.showText && containerName.constSize) {939return true;940} else {941return d <= GUIVisualizationSettings::Detail::Additionals;942}943}944945946void947GUIVisualizationSettings::copy(const GUIVisualizationSettings& s) {948// just copy. Note: By default = operator is disabled to avoid accidental copies)949*this = s;950}951952953void954GUIVisualizationSettings::initSumoGuiDefaults() {955/// add lane coloring schemes956GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true, 0);957scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));958scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));959scheme.addColor(RGBColor(0, 0, 0, 0), 3, TL("green verge"));960scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));961scheme.addColor(RGBColor::BLACK, 5, TL("railway"));962scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));963scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc964scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing965scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector966scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road967scheme.addColor(RGBColor(200, 240, 240), 11, TL("airway"));968laneColorer.addScheme(scheme);969scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);970scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));971laneColorer.addScheme(scheme);972scheme = GUIColorScheme(SCHEME_NAME_PERMISSION_CODE, TL(SCHEME_NAME_PERMISSION_CODE.c_str()), RGBColor(240, 240, 240), "nobody");973scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");974scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");975scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");976scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");977scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");978scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");979scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");980scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");981scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");982scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");983scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");984laneColorer.addScheme(scheme);985// ... traffic states ...986scheme = GUIColorScheme("by allowed speed (lanewise)", TL("by allowed speed (lanewise)"), RGBColor::RED);987scheme.addColor(RGBColor::YELLOW, 30. / 3.6);988scheme.addColor(RGBColor::GREEN, 55. / 3.6);989scheme.addColor(RGBColor::CYAN, 80. / 3.6);990scheme.addColor(RGBColor::BLUE, 120. / 3.6);991scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);992laneColorer.addScheme(scheme);993scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", TL("by current occupancy (lanewise, brutto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);994scheme.addColor(RGBColor::GREEN, 0.25);995scheme.addColor(RGBColor::YELLOW, 0.5);996scheme.addColor(RGBColor::ORANGE, 0.75);997scheme.addColor(RGBColor::RED, 1.0);998laneColorer.addScheme(scheme);999scheme = GUIColorScheme("by current occupancy (lanewise, netto)", TL("by current occupancy (lanewise, netto)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);1000scheme.addColor(RGBColor::GREEN, 0.25);1001scheme.addColor(RGBColor::YELLOW, 0.5);1002scheme.addColor(RGBColor::ORANGE, 0.75);1003scheme.addColor(RGBColor::RED, 1.0);1004laneColorer.addScheme(scheme);1005scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", TL("by first vehicle waiting time (lanewise)"), RGBColor(235, 235, 235), "", false, 0, COL_SCHEME_DYNAMIC);1006scheme.addColor(RGBColor::CYAN, 30.);1007scheme.addColor(RGBColor::GREEN, 100.);1008scheme.addColor(RGBColor::YELLOW, 200.);1009scheme.addColor(RGBColor::RED, 300.);1010laneColorer.addScheme(scheme);1011scheme = GUIColorScheme("by lane number (streetwise)", TL("by lane number (streetwise)"), RGBColor::RED);1012scheme.addColor(RGBColor::BLUE, 5.);1013laneColorer.addScheme(scheme);1014// ... emissions ...1015scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1016scheme.addColor(RGBColor::CYAN, 450);1017scheme.addColor(RGBColor::GREEN, 900);1018scheme.addColor(RGBColor::YELLOW, 1350);1019scheme.addColor(RGBColor::ORANGE, 1800);1020scheme.addColor(RGBColor::RED, 2250);1021scheme.addColor(RGBColor::MAGENTA, 3000);1022laneColorer.addScheme(scheme);1023scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1024scheme.addColor(RGBColor::CYAN, 30);1025scheme.addColor(RGBColor::GREEN, 60);1026scheme.addColor(RGBColor::YELLOW, 90);1027scheme.addColor(RGBColor::ORANGE, 120);1028scheme.addColor(RGBColor::RED, 150);1029scheme.addColor(RGBColor::MAGENTA, 200);1030laneColorer.addScheme(scheme);1031scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1032scheme.addColor(RGBColor::CYAN, 0.3);1033scheme.addColor(RGBColor::GREEN, 0.5);1034scheme.addColor(RGBColor::YELLOW, 0.8);1035scheme.addColor(RGBColor::ORANGE, 1);1036scheme.addColor(RGBColor::RED, 1.3);1037scheme.addColor(RGBColor::MAGENTA, 1.6);1038laneColorer.addScheme(scheme);1039scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1040scheme.addColor(RGBColor::CYAN, 6);1041scheme.addColor(RGBColor::GREEN, 12);1042scheme.addColor(RGBColor::YELLOW, 18);1043scheme.addColor(RGBColor::ORANGE, 24);1044scheme.addColor(RGBColor::RED, 30);1045scheme.addColor(RGBColor::MAGENTA, 40);1046laneColorer.addScheme(scheme);1047scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1048scheme.addColor(RGBColor::CYAN, 8);1049scheme.addColor(RGBColor::GREEN, 16);1050scheme.addColor(RGBColor::YELLOW, 24);1051scheme.addColor(RGBColor::ORANGE, 32);1052scheme.addColor(RGBColor::RED, 40);1053scheme.addColor(RGBColor::MAGENTA, 50);1054laneColorer.addScheme(scheme);1055scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1056scheme.addColor(RGBColor::CYAN, 0.2);1057scheme.addColor(RGBColor::GREEN, 0.4);1058scheme.addColor(RGBColor::YELLOW, 0.6);1059scheme.addColor(RGBColor::ORANGE, 0.8);1060scheme.addColor(RGBColor::RED, 1);1061scheme.addColor(RGBColor::MAGENTA, 1.3);1062laneColorer.addScheme(scheme);1063scheme = GUIColorScheme("by noise emissions (Harmonoise)", TL("by noise emissions (Harmonoise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1064scheme.addColor(RGBColor::CYAN, 1.3);1065scheme.addColor(RGBColor::GREEN, 1.4);1066scheme.addColor(RGBColor::YELLOW, 1.6);1067scheme.addColor(RGBColor::ORANGE, 1.7);1068scheme.addColor(RGBColor::RED, 1.9);1069scheme.addColor(RGBColor::MAGENTA, 2.4);1070laneColorer.addScheme(scheme);1071// ... weights (experimental) ...1072scheme = GUIColorScheme("by global travel time", TL("by global travel time"), RGBColor::GREEN);1073scheme.addColor(RGBColor::RED, 100.);1074scheme.setAllowsNegativeValues(true);1075laneColorer.addScheme(scheme);1076scheme = GUIColorScheme("by global speed percentage", TL("by global speed percentage"), RGBColor::RED);1077scheme.addColor(RGBColor::YELLOW, 50.);1078scheme.addColor(RGBColor::GREEN, 100.);1079scheme.setAllowsNegativeValues(true);1080laneColorer.addScheme(scheme);1081scheme = GUIColorScheme("by given length/geometrical length", TL("by given length/geometrical length"), RGBColor::RED);1082scheme.addColor(RGBColor::ORANGE, 0.25);1083scheme.addColor(RGBColor::YELLOW, 0.5);1084scheme.addColor(RGBColor(179, 179, 179, 255), 1.);1085scheme.addColor(RGBColor::GREEN, 2.);1086scheme.addColor(RGBColor::CYAN, 4.);1087scheme.addColor(RGBColor::BLUE, 100.);1088laneColorer.addScheme(scheme);1089laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));1090scheme = GUIColorScheme("by loaded weight", TL("by loaded weight"), RGBColor::GREEN);1091scheme.addColor(RGBColor::RED, 100.);1092scheme.setAllowsNegativeValues(true);1093laneColorer.addScheme(scheme);1094scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);1095scheme.addColor(RGBColor::RED, -20.);1096scheme.addColor(RGBColor::GREEN, 20.);1097scheme.setAllowsNegativeValues(true);1098laneColorer.addScheme(scheme);1099scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::GREY);1100scheme.addColor(RGBColor::BLUE, -10.);1101scheme.addColor(RGBColor::RED, 10.);1102scheme.addColor(RGBColor::YELLOW, 50.);1103scheme.addColor(RGBColor::GREEN, 100.);1104scheme.addColor(RGBColor::MAGENTA, 200.);1105scheme.setAllowsNegativeValues(true);1106laneColorer.addScheme(scheme);1107scheme = GUIColorScheme("by height at geometry-segment start", TL("by height at geometry-segment start"), RGBColor::GREY);1108scheme.addColor(RGBColor::BLUE, -10.);1109scheme.addColor(RGBColor::RED, 10.);1110scheme.addColor(RGBColor::YELLOW, 50.);1111scheme.addColor(RGBColor::GREEN, 100.);1112scheme.addColor(RGBColor::MAGENTA, 200.);1113scheme.setAllowsNegativeValues(true);1114laneColorer.addScheme(scheme);1115scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);1116scheme.addColor(RGBColor::YELLOW, 0.1);1117scheme.addColor(RGBColor::RED, 0.3);1118scheme.addColor(RGBColor::GREEN, -0.1);1119scheme.addColor(RGBColor::BLUE, -0.3);1120scheme.setAllowsNegativeValues(true);1121laneColorer.addScheme(scheme);1122scheme = GUIColorScheme("by geometry-segment inclination", TL("by geometry-segment inclination"), RGBColor::GREY);1123scheme.addColor(RGBColor::YELLOW, 0.1);1124scheme.addColor(RGBColor::RED, 0.3);1125scheme.addColor(RGBColor::GREEN, -0.1);1126scheme.addColor(RGBColor::BLUE, -0.3);1127scheme.setAllowsNegativeValues(true);1128laneColorer.addScheme(scheme);1129scheme = GUIColorScheme("by average speed", TL("by average speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1130scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1131scheme.addColor(RGBColor::GREEN, 55. / 3.6);1132scheme.addColor(RGBColor::CYAN, 80. / 3.6);1133scheme.addColor(RGBColor::BLUE, 120. / 3.6);1134scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1135laneColorer.addScheme(scheme);1136scheme = GUIColorScheme("by average relative speed ", TL("by average relative speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1137scheme.addColor(RGBColor::YELLOW, 0.25);1138scheme.addColor(RGBColor::GREEN, 0.5);1139scheme.addColor(RGBColor::CYAN, 0.75);1140scheme.addColor(RGBColor::BLUE, 1.);1141scheme.addColor(RGBColor::MAGENTA, 1.25);1142laneColorer.addScheme(scheme);1143scheme = GUIColorScheme("by routing device assumed speed ", TL("by routing device assumed speed "), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1144scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1145scheme.addColor(RGBColor::GREEN, 55. / 3.6);1146scheme.addColor(RGBColor::CYAN, 80. / 3.6);1147scheme.addColor(RGBColor::BLUE, 120. / 3.6);1148scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1149laneColorer.addScheme(scheme);1150scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREEN, "", false, 0, COL_SCHEME_EMISSION);1151scheme.addColor(RGBColor::CYAN, 0.2);1152scheme.addColor(RGBColor::GREEN, 0.4);1153scheme.addColor(RGBColor::YELLOW, 0.6);1154scheme.addColor(RGBColor::ORANGE, 0.8);1155scheme.addColor(RGBColor::RED, 1.0);1156scheme.addColor(RGBColor::MAGENTA, 2.0);1157laneColorer.addScheme(scheme);1158scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);1159scheme.addColor(RGBColor::GREEN, 1.);1160scheme.addColor(RGBColor::YELLOW, 10.);1161scheme.addColor(RGBColor::RED, 100.);1162laneColorer.addScheme(scheme);1163scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), "no TAZ", true);1164laneColorer.addScheme(scheme);1165scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, TL(SCHEME_NAME_EDGE_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1166scheme.setAllowsNegativeValues(true);1167laneColorer.addScheme(scheme);1168scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, TL(SCHEME_NAME_LANE_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1169scheme.setAllowsNegativeValues(true);1170laneColorer.addScheme(scheme);1171scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, TL(SCHEME_NAME_EDGEDATA_NUMERICAL.c_str()), COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);1172scheme.setAllowsNegativeValues(true);1173laneColorer.addScheme(scheme);1174scheme = GUIColorScheme("by distance (kilometrage)", TL("by distance (kilometrage)"), RGBColor(204, 204, 204));1175scheme.addColor(RGBColor(255, 204, 204), 1.);1176scheme.addColor(RGBColor::RED, 10000.);1177scheme.addColor(RGBColor(204, 204, 255), -1.);1178scheme.addColor(RGBColor::BLUE, -10000.);1179scheme.setAllowsNegativeValues(true);1180laneColorer.addScheme(scheme);1181scheme = GUIColorScheme("by abs distance (kilometrage)", TL("by abs distance (kilometrage)"), RGBColor(204, 204, 204));1182scheme.addColor(RGBColor::RED, 1.);1183scheme.setAllowsNegativeValues(false);1184laneColorer.addScheme(scheme);1185scheme = GUIColorScheme("by reachability (traveltime)", TL("by reachability (traveltime)"), RGBColor::RED);1186scheme.addColor(RGBColor::GREY, INVALID_DOUBLE, "unreachable");1187scheme.setAllowsNegativeValues(true);1188laneColorer.addScheme(scheme);1189scheme = GUIColorScheme("by thread index", TL("by thread index"), RGBColor(204, 204, 204));1190scheme.addColor(RGBColor::RED, 1.);1191laneColorer.addScheme(scheme);1192scheme = GUIColorScheme("free parking spaces", TL("free parking spaces"), RGBColor(204, 204, 204), "", false, 0, COL_SCHEME_DYNAMIC);1193scheme.addColor(RGBColor::RED, 1.);1194scheme.addColor(RGBColor::YELLOW, 10.);1195scheme.addColor(RGBColor::GREEN, 100.);1196scheme.addColor(RGBColor::BLUE, 1000.);1197laneColorer.addScheme(scheme);1198scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_LIVE, TL(SCHEME_NAME_EDGEDATA_LIVE.c_str()), COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA, COL_SCHEME_DYNAMIC);1199scheme.setAllowsNegativeValues(true);1200laneColorer.addScheme(scheme);12011202/// add vehicle coloring schemes1203vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", TL("given vehicle/type/route color"), RGBColor::YELLOW, "", true));1204vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));1205vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", TL("given/assigned vehicle color"), RGBColor::YELLOW, "", true));1206vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));1207vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", TL("given/assigned route color"), RGBColor::YELLOW, "", true));1208vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", TL("depart position as HSV"), RGBColor::YELLOW, "", true));1209vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", TL("arrival position as HSV"), RGBColor::YELLOW, "", true));1210vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", TL("direction/distance as HSV"), RGBColor::YELLOW, "", true));1211scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1212scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1213scheme.addColor(RGBColor::GREEN, 55. / 3.6);1214scheme.addColor(RGBColor::CYAN, 80. / 3.6);1215scheme.addColor(RGBColor::BLUE, 120. / 3.6);1216scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1217scheme.setAllowsNegativeValues(true); // negative speed indicates stopped1218scheme.addColor(RGBColor::RED, -1); // stopped on road1219scheme.addColor(RGBColor::GREY, -2); // stopped off-road (parking)1220vehicleColorer.addScheme(scheme);1221scheme = GUIColorScheme("by action step", TL("by action step"), RGBColor::GREY, TL("no action"), true, 0, COL_SCHEME_DYNAMIC);1222scheme.addColor(RGBColor(0, 255, 0, 255), 1., TL("action in next step"));1223scheme.addColor(RGBColor(80, 160, 80, 255), 2., TL("had action step"));1224vehicleColorer.addScheme(scheme);1225scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1226scheme.addColor(RGBColor::CYAN, 30.);1227scheme.addColor(RGBColor::GREEN, 100.);1228scheme.addColor(RGBColor::YELLOW, 200.);1229scheme.addColor(RGBColor::RED, 300.);1230vehicleColorer.addScheme(scheme);1231scheme = GUIColorScheme("by accumulated waiting time", TL("by accumulated waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1232scheme.addColor(RGBColor::CYAN, 25.);1233scheme.addColor(RGBColor::GREEN, 50.);1234scheme.addColor(RGBColor::YELLOW, 75.);1235scheme.addColor(RGBColor::RED, 100.);1236vehicleColorer.addScheme(scheme);1237scheme = GUIColorScheme("by time since lane change", TL("by time since lane change"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);1238scheme.addColor(RGBColor(189, 189, 179, 255), -180);1239scheme.addColor(RGBColor(255, 255, 0, 255), -20);1240scheme.addColor(RGBColor(255, 0, 0, 255), -0.01);1241scheme.addColor(RGBColor(0, 0, 255, 255), 0.01);1242scheme.addColor(RGBColor(0, 255, 255, 255), 20);1243scheme.addColor(RGBColor(179, 189, 189, 255), 180);1244scheme.setAllowsNegativeValues(true);1245vehicleColorer.addScheme(scheme);1246scheme = GUIColorScheme("by max speed", TL("by max speed"), RGBColor::RED);1247scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1248scheme.addColor(RGBColor::GREEN, 55. / 3.6);1249scheme.addColor(RGBColor::CYAN, 80. / 3.6);1250scheme.addColor(RGBColor::BLUE, 120. / 3.6);1251scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1252vehicleColorer.addScheme(scheme);1253// ... emissions ...1254scheme = GUIColorScheme("by CO2 emissions", TL("by CO2 emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1255scheme.addColor(RGBColor::CYAN, 23000);1256scheme.addColor(RGBColor::GREEN, 46000);1257scheme.addColor(RGBColor::YELLOW, 69000);1258scheme.addColor(RGBColor::ORANGE, 92000);1259scheme.addColor(RGBColor::RED, 115000);1260scheme.addColor(RGBColor::MAGENTA, 150000);1261vehicleColorer.addScheme(scheme);1262scheme = GUIColorScheme("by CO emissions", TL("by CO emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1263scheme.addColor(RGBColor::CYAN, 1500);1264scheme.addColor(RGBColor::GREEN, 3000);1265scheme.addColor(RGBColor::YELLOW, 4500);1266scheme.addColor(RGBColor::ORANGE, 6000);1267scheme.addColor(RGBColor::RED, 7500);1268scheme.addColor(RGBColor::MAGENTA, 10000);1269vehicleColorer.addScheme(scheme);1270scheme = GUIColorScheme("by PMx emissions", TL("by PMx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1271scheme.addColor(RGBColor::CYAN, 12);1272scheme.addColor(RGBColor::GREEN, 24);1273scheme.addColor(RGBColor::YELLOW, 36);1274scheme.addColor(RGBColor::ORANGE, 48);1275scheme.addColor(RGBColor::RED, 60);1276scheme.addColor(RGBColor::MAGENTA, 80);1277vehicleColorer.addScheme(scheme);1278scheme = GUIColorScheme("by NOx emissions", TL("by NOx emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1279scheme.addColor(RGBColor::CYAN, 300);1280scheme.addColor(RGBColor::GREEN, 600);1281scheme.addColor(RGBColor::YELLOW, 900);1282scheme.addColor(RGBColor::ORANGE, 1200);1283scheme.addColor(RGBColor::RED, 1500);1284scheme.addColor(RGBColor::MAGENTA, 2000);1285vehicleColorer.addScheme(scheme);1286scheme = GUIColorScheme("by HC emissions", TL("by HC emissions"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1287scheme.addColor(RGBColor::CYAN, 400);1288scheme.addColor(RGBColor::GREEN, 800);1289scheme.addColor(RGBColor::YELLOW, 1200);1290scheme.addColor(RGBColor::ORANGE, 1600);1291scheme.addColor(RGBColor::RED, 2000);1292scheme.addColor(RGBColor::MAGENTA, 2500);1293vehicleColorer.addScheme(scheme);1294scheme = GUIColorScheme("by fuel consumption", TL("by fuel consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1295scheme.addColor(RGBColor::CYAN, 10);1296scheme.addColor(RGBColor::GREEN, 20);1297scheme.addColor(RGBColor::YELLOW, 30);1298scheme.addColor(RGBColor::ORANGE, 40);1299scheme.addColor(RGBColor::RED, 50);1300scheme.addColor(RGBColor::MAGENTA, 60);1301vehicleColorer.addScheme(scheme);1302scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1303scheme.addColor(RGBColor::CYAN, 60);1304scheme.addColor(RGBColor::GREEN, 70);1305scheme.addColor(RGBColor::YELLOW, 80);1306scheme.addColor(RGBColor::ORANGE, 90);1307scheme.addColor(RGBColor::RED, 100);1308scheme.addColor(RGBColor::MAGENTA, 120);1309vehicleColorer.addScheme(scheme);1310scheme = GUIColorScheme("by reroute number", TL("by reroute number"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);1311scheme.addColor(RGBColor::YELLOW, 1.);1312scheme.addColor(RGBColor::RED, 10.);1313vehicleColorer.addScheme(scheme);1314scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1315scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1316vehicleColorer.addScheme(scheme);1317scheme = GUIColorScheme("by offset from best lane", TL("by offset from best lane"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);1318scheme.addColor(RGBColor(255, 0, 255, 255), -100, TL("opposite lane"));1319scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3");1320scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1");1321scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1");1322scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3");1323scheme.setAllowsNegativeValues(true);1324vehicleColorer.addScheme(scheme);1325scheme = GUIColorScheme("by acceleration", TL("by acceleration"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);1326scheme.addColor(RGBColor(64, 0, 0, 255), -9.0);1327scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);1328scheme.addColor(RGBColor(255, 255, 0, 255), -0.1);1329scheme.addColor(RGBColor(0, 255, 255, 255), 0.1);1330scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);1331scheme.addColor(RGBColor(255, 0, 255, 255), 5.2);1332scheme.setAllowsNegativeValues(true);1333vehicleColorer.addScheme(scheme);1334scheme = GUIColorScheme("by time gap on lane", TL("by time gap on lane"), RGBColor(255, 255, 0, 255), "0", false, 0, COL_SCHEME_DYNAMIC);1335scheme.addColor(RGBColor(179, 179, 179, 255), -1);1336scheme.addColor(RGBColor(0, 255, 255, 255), 1);1337scheme.addColor(RGBColor(0, 0, 255, 255), 2);1338scheme.setAllowsNegativeValues(true);1339vehicleColorer.addScheme(scheme);1340scheme = GUIColorScheme("by depart delay", TL("by depart delay"), RGBColor::BLUE);1341scheme.addColor(RGBColor::CYAN, 30.);1342scheme.addColor(RGBColor::GREEN, 100.);1343scheme.addColor(RGBColor::YELLOW, 200.);1344scheme.addColor(RGBColor::RED, 300.);1345vehicleColorer.addScheme(scheme);1346scheme = GUIColorScheme("by electricity consumption", TL("by electricity consumption"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1347scheme.addColor(RGBColor::CYAN, 10);1348scheme.addColor(RGBColor::GREEN, 20);1349scheme.addColor(RGBColor::YELLOW, 30);1350scheme.addColor(RGBColor::ORANGE, 40);1351scheme.addColor(RGBColor::RED, 60);1352scheme.addColor(RGBColor::MAGENTA, 100);1353vehicleColorer.addScheme(scheme);1354scheme = GUIColorScheme("by relative battery charge", TL("by relative battery charge"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1355scheme.setAllowsNegativeValues(true);1356scheme.addColor(RGBColor::MAGENTA, 0.1);1357scheme.addColor(RGBColor::RED, 0.2);1358scheme.addColor(RGBColor::ORANGE, 0.3);1359scheme.addColor(RGBColor::YELLOW, 0.4);1360scheme.addColor(RGBColor::GREEN, 0.6);1361scheme.addColor(RGBColor::CYAN, 1.);1362vehicleColorer.addScheme(scheme);1363scheme = GUIColorScheme("by charged energy", TL("by charged energy"), RGBColor::GREY, "", false, 0, COL_SCHEME_EMISSION);1364scheme.setAllowsNegativeValues(true);1365scheme.addColor(RGBColor::MAGENTA, 10);1366scheme.addColor(RGBColor::RED, 20);1367scheme.addColor(RGBColor::ORANGE, 30);1368scheme.addColor(RGBColor::YELLOW, 100);1369scheme.addColor(RGBColor::GREEN, 200);1370scheme.addColor(RGBColor::CYAN, 500);1371vehicleColorer.addScheme(scheme);1372scheme = GUIColorScheme("by time loss", TL("by time loss"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1373scheme.addColor(RGBColor::CYAN, 10.);1374scheme.addColor(RGBColor::GREEN, 60.);1375scheme.addColor(RGBColor::YELLOW, 180.);1376scheme.addColor(RGBColor::RED, 900.);1377vehicleColorer.addScheme(scheme);1378scheme = GUIColorScheme("by stop delay", TL("by stop delay"), RGBColor::GREY, "", false, -1, COL_SCHEME_DYNAMIC);1379scheme.addColor(RGBColor::BLUE, 0.);1380scheme.addColor(RGBColor::CYAN, 10.);1381scheme.addColor(RGBColor::GREEN, 60.);1382scheme.addColor(RGBColor::YELLOW, 120.);1383scheme.addColor(RGBColor::ORANGE, 300.);1384scheme.addColor(RGBColor::RED, 900.);1385scheme.setAllowsNegativeValues(true);1386vehicleColorer.addScheme(scheme);1387scheme = GUIColorScheme("by stop arrival delay", TL("by stop arrival delay"), RGBColor::GREY, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);1388scheme.addColor(RGBColor::MAGENTA, -10.);1389scheme.addColor(RGBColor::BLUE, 0.);1390scheme.addColor(RGBColor::CYAN, 10.);1391scheme.addColor(RGBColor::GREEN, 60.);1392scheme.addColor(RGBColor::YELLOW, 120.);1393scheme.addColor(RGBColor::ORANGE, 300.);1394scheme.addColor(RGBColor::RED, 900.);1395scheme.setAllowsNegativeValues(true);1396vehicleColorer.addScheme(scheme);1397scheme = GUIColorScheme("by lateral speed", TL("by lateral speed"), RGBColor(179, 179, 179, 255), "0", false, 0, COL_SCHEME_DYNAMIC);1398scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-1.5");1399scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-0.5");1400scheme.addColor(RGBColor(0, 255, 255, 255), 1, "0.5");1401scheme.addColor(RGBColor(0, 0, 255, 255), 3, "1.5");1402scheme.setAllowsNegativeValues(true);1403vehicleColorer.addScheme(scheme);1404scheme = GUIColorScheme(SCHEME_NAME_PARAM_NUMERICAL, TL(SCHEME_NAME_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1405scheme.setAllowsNegativeValues(true);1406vehicleColorer.addScheme(scheme);1407vehicleColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));1408vehicleColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));14091410/// add person coloring schemes1411personColorer.addScheme(GUIColorScheme("given person/type color", TL("given person/type color"), RGBColor::BLUE, "", true));1412personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::BLUE, "", true));1413personColorer.addScheme(GUIColorScheme("given/assigned person color", TL("given/assigned person color"), RGBColor::BLUE, "", true));1414personColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::BLUE, "", true));1415scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1416scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);1417scheme.addColor(RGBColor::GREEN, 5. / 3.6);1418scheme.addColor(RGBColor::BLUE, 10. / 3.6);1419scheme.setAllowsNegativeValues(true); // negative speed indicates stopped1420scheme.addColor(RGBColor::GREY, -1.); // stop stage1421scheme.addColor(RGBColor::GREY, -2.); // stop stage (departure)1422personColorer.addScheme(scheme);1423scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);1424scheme.addColor(RGBColor::RED, 1., TL("stopped"));1425scheme.addColor(RGBColor::GREEN, 2., TL("walking"));1426scheme.addColor(RGBColor::BLUE, 3., TL("riding"));1427scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));1428scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for ride"));1429personColorer.addScheme(scheme);1430scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1431scheme.addColor(RGBColor::CYAN, 30.);1432scheme.addColor(RGBColor::GREEN, 100.);1433scheme.addColor(RGBColor::YELLOW, 200.);1434scheme.addColor(RGBColor::RED, 300.);1435personColorer.addScheme(scheme);1436scheme = GUIColorScheme("by jammed state", TL("by jammed state"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1437scheme.addColor(RGBColor::RED, 1.);1438personColorer.addScheme(scheme);1439scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1440scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1441personColorer.addScheme(scheme);1442personColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));1443personColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));14441445/// add container coloring schemes1446containerColorer.addScheme(GUIColorScheme("given container/type color", TL("given container/type color"), RGBColor::YELLOW, "", true));1447containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));1448containerColorer.addScheme(GUIColorScheme("given/assigned container color", TL("given/assigned container color"), RGBColor::YELLOW, "", true));1449containerColorer.addScheme(GUIColorScheme("given/assigned type color", TL("given/assigned type color"), RGBColor::YELLOW, "", true));1450scheme = GUIColorScheme("by speed", TL("by speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1451scheme.addColor(RGBColor::YELLOW, 2.5 / 3.6);1452scheme.addColor(RGBColor::GREEN, 5. / 3.6);1453scheme.addColor(RGBColor::BLUE, 10. / 3.6);1454containerColorer.addScheme(scheme);1455scheme = GUIColorScheme("by mode", TL("by mode"), RGBColor::GREY, TL("waiting for insertion"), true, 0, COL_SCHEME_DYNAMIC);1456scheme.addColor(RGBColor::RED, 1., TL("stopped"));1457scheme.addColor(RGBColor::BLUE, 3., TL("transport"));1458scheme.addColor(RGBColor::CYAN, 4., TL("accessing trainStop"));1459scheme.addColor(RGBColor::YELLOW, 5., TL("waiting for transport"));1460scheme.addColor(RGBColor::GREEN, 6., TL("tranship")); // (moving without vehicle)1461containerColorer.addScheme(scheme);1462scheme = GUIColorScheme("by waiting time", TL("by waiting time"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1463scheme.addColor(RGBColor::CYAN, 30.);1464scheme.addColor(RGBColor::GREEN, 100.);1465scheme.addColor(RGBColor::YELLOW, 200.);1466scheme.addColor(RGBColor::RED, 300.);1467containerColorer.addScheme(scheme);1468scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1469scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1470containerColorer.addScheme(scheme);1471containerColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));1472containerColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));14731474/// add junction coloring schemes1475scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, "", true);1476scheme.addColor(RGBColor(150, 200, 200), 1, TL("waterway"));1477scheme.addColor(RGBColor(0, 0, 0, 0), 2, TL("railway"));1478scheme.addColor(RGBColor(200, 240, 240), 3, TL("airway"));1479junctionColorer.addScheme(scheme);1480scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1481scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));1482junctionColorer.addScheme(scheme);1483scheme = GUIColorScheme(SCHEME_NAME_TYPE, TL(SCHEME_NAME_TYPE.c_str()), RGBColor::GREEN, "traffic_light", true);1484scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");1485scheme.addColor(RGBColor::YELLOW, 2, "priority");1486scheme.addColor(RGBColor::RED, 3, "priority_stop");1487scheme.addColor(RGBColor::BLUE, 4, "right_before_left");1488scheme.addColor(RGBColor::CYAN, 5, "allway_stop");1489scheme.addColor(RGBColor::GREY, 6, "district");1490scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");1491scheme.addColor(RGBColor::BLACK, 8, "dead_end");1492scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");1493scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule1494scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green1495scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple1496scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue1497junctionColorer.addScheme(scheme);1498scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);1499scheme.addColor(RGBColor::BLUE, -10.);1500scheme.addColor(RGBColor::RED, 10.);1501scheme.addColor(RGBColor::YELLOW, 50.);1502scheme.addColor(RGBColor::GREEN, 100.);1503scheme.addColor(RGBColor::MAGENTA, 200.);1504scheme.setAllowsNegativeValues(true);1505junctionColorer.addScheme(scheme);15061507/// add POI coloring schemes1508poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));1509scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1510scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1511poiColorer.addScheme(scheme);1512poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));15131514/// add polygon coloring schemes1515polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));1516scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1517scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1518polyColorer.addScheme(scheme);1519polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));1520polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));15211522/// add lane scaling schemes1523{1524GUIScaleScheme laneScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);1525laneScaler.addScheme(laneScheme);1526laneScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);1527laneScheme.addColor(5, 1, TL("selected"));1528laneScaler.addScheme(laneScheme);1529// ... traffic states ...1530laneScheme = GUIScaleScheme(TL("by allowed speed (lanewise)"), 0);1531laneScheme.addColor(10, 150. / 3.6);1532laneScaler.addScheme(laneScheme);1533laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1534laneScheme.addColor(10, 0.95);1535laneScaler.addScheme(laneScheme);1536laneScheme = GUIScaleScheme(TL("by current occupancy (lanewise, netto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1537laneScheme.addColor(10, 0.95);1538laneScaler.addScheme(laneScheme);1539laneScheme = GUIScaleScheme(TL("by first vehicle waiting time (lanewise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1540laneScheme.addColor(10, 300.);1541laneScaler.addScheme(laneScheme);1542laneScheme = GUIScaleScheme(TL("by lane number (streetwise)"), 1);1543laneScheme.addColor(10, 5.);1544laneScaler.addScheme(laneScheme);1545// ... emissions ...1546laneScheme = GUIScaleScheme(TL("by CO2 emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);1547laneScheme.addColor(10, 10. / 7.5 / 5.);1548laneScaler.addScheme(laneScheme);1549laneScheme = GUIScaleScheme(TL("by CO emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);1550laneScheme.addColor(10, 0.05 / 7.5 / 2.);1551laneScaler.addScheme(laneScheme);1552laneScheme = GUIScaleScheme(TL("by PMx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);1553laneScheme.addColor(10, .005 / 7.5 / 5.);1554laneScaler.addScheme(laneScheme);1555laneScheme = GUIScaleScheme(TL("by NOx emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);1556laneScheme.addColor(10, .125 / 7.5 / 5.);1557laneScaler.addScheme(laneScheme);1558laneScheme = GUIScaleScheme(TL("by HC emissions"), 0, "", false, 0, COL_SCHEME_EMISSION);1559laneScheme.addColor(10, .02 / 7.5 / 4.);1560laneScaler.addScheme(laneScheme);1561laneScheme = GUIScaleScheme(TL("by fuel consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);1562laneScheme.addColor(10, .005 / 7.5 * 100.);1563laneScaler.addScheme(laneScheme);1564laneScheme = GUIScaleScheme(TL("by noise emissions (Harmonoise)"), 0, "", false, 0, COL_SCHEME_EMISSION);1565laneScheme.addColor(10, 100.);1566laneScaler.addScheme(laneScheme);1567// ... weights (experimental) ...1568laneScheme = GUIScaleScheme(TL("by global travel time"), 0);1569laneScheme.addColor(10, 100.);1570laneScheme.setAllowsNegativeValues(true);1571laneScaler.addScheme(laneScheme);1572laneScheme = GUIScaleScheme(TL("by global speed percentage"), 0);1573laneScheme.addColor(10, 100.);1574laneScheme.setAllowsNegativeValues(true);1575laneScaler.addScheme(laneScheme);1576laneScheme = GUIScaleScheme(TL("by given length/geometrical length"), 0);1577laneScheme.addColor(10, 10.);1578laneScaler.addScheme(laneScheme);1579laneScheme = GUIScaleScheme(TL("by loaded weight"), 0);1580laneScheme.addColor(-1000, -1000.);1581laneScheme.addColor(1000, 1000.);1582laneScheme.setAllowsNegativeValues(true);1583laneScaler.addScheme(laneScheme);1584laneScheme = GUIScaleScheme(TL("by priority"), 1);1585laneScheme.addColor(0.5, -20.);1586laneScheme.addColor(5, 20.);1587laneScheme.setAllowsNegativeValues(true);1588laneScaler.addScheme(laneScheme);1589laneScheme = GUIScaleScheme(TL("by average speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1590laneScheme.addColor(10, 150. / 3.6);1591laneScaler.addScheme(laneScheme);1592laneScheme = GUIScaleScheme(TL("by average relative speed"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1593laneScheme.addColor(0.5, 0.5);1594laneScheme.addColor(2, 1.);1595laneScheme.addColor(10, 2.);1596laneScaler.addScheme(laneScheme);1597laneScheme = GUIScaleScheme(TL("by electricity consumption"), 0, "", false, 0, COL_SCHEME_EMISSION);1598laneScheme.addColor(10, 1. / 7.5 / 5.);1599laneScaler.addScheme(laneScheme);1600laneScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1601laneScheme.addColor(1, 1.);1602laneScheme.addColor(10, 10.);1603laneScheme.addColor(50, 100.);1604laneScaler.addScheme(laneScheme);1605laneScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, TL(SCHEME_NAME_EDGEDATA_NUMERICAL.c_str()), 0.1, TL("missing data"), false, MISSING_DATA);1606laneScheme.addColor(1, 1.);1607laneScheme.addColor(2, 10.);1608laneScheme.addColor(5, 100.);1609laneScheme.addColor(10, 1000.);1610laneScheme.setAllowsNegativeValues(true);1611laneScaler.addScheme(laneScheme);1612}16131614/// add edge coloring schemes1615edgeColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor(0, 0, 0, 0), "", true));1616scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1617scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));1618edgeColorer.addScheme(scheme);1619scheme = GUIColorScheme("by purpose (streetwise)", TL("by purpose (streetwise)"), RGBColor(), TL("normal"), true);1620scheme.addColor(RGBColor(128, 0, 128, 255), 1., TL("connector")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR1621scheme.addColor(RGBColor::BLUE, 2., TL("internal")); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL1622edgeColorer.addScheme(scheme);1623scheme = GUIColorScheme("by allowed speed (streetwise)", TL("by allowed speed (streetwise)"), RGBColor::RED);1624scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1625scheme.addColor(RGBColor::GREEN, 55. / 3.6);1626scheme.addColor(RGBColor::CYAN, 80. / 3.6);1627scheme.addColor(RGBColor::BLUE, 120. / 3.6);1628scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1629edgeColorer.addScheme(scheme);1630scheme = GUIColorScheme("by current occupancy (streetwise, brutto)", TL("by current occupancy (streetwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1631scheme.addColor(RGBColor::RED, 0.95);1632edgeColorer.addScheme(scheme);1633scheme = GUIColorScheme("by current speed (streetwise)", TL("by current speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1634scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1635scheme.addColor(RGBColor::GREEN, 55. / 3.6);1636scheme.addColor(RGBColor::CYAN, 80. / 3.6);1637scheme.addColor(RGBColor::BLUE, 120. / 3.6);1638scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1639edgeColorer.addScheme(scheme);1640scheme = GUIColorScheme("by current flow (streetwise)", TL("by current flow (streetwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1641scheme.addColor(RGBColor::RED, 5000.);1642edgeColorer.addScheme(scheme);1643scheme = GUIColorScheme("by relative speed (streetwise)", TL("by relative speed (streetwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1644scheme.addColor(RGBColor::YELLOW, 0.25);1645scheme.addColor(RGBColor::GREEN, 0.5);1646scheme.addColor(RGBColor::CYAN, 0.75);1647scheme.addColor(RGBColor::BLUE, 1.);1648scheme.addColor(RGBColor::MAGENTA, 1.25);1649edgeColorer.addScheme(scheme);1650scheme = GUIColorScheme("by routing device assumed speed", TL("by routing device assumed speed"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1651scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1652scheme.addColor(RGBColor::GREEN, 55. / 3.6);1653scheme.addColor(RGBColor::CYAN, 80. / 3.6);1654scheme.addColor(RGBColor::BLUE, 120. / 3.6);1655scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1656edgeColorer.addScheme(scheme);1657edgeColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));1658scheme = GUIColorScheme("by segments (alternating)", TL("by segments (alternating)"), RGBColor::BLUE, TL("odd"), true);1659scheme.addColor(RGBColor::RED, 1., TL("even"));1660edgeColorer.addScheme(scheme);1661scheme = GUIColorScheme("by jammed state (segmentwise)", TL("by jammed state (segmentwise)"), RGBColor::GREEN, TL("free"), true, 0, COL_SCHEME_DYNAMIC);1662scheme.addColor(RGBColor::YELLOW, 1., TL("limitedControl"));1663scheme.addColor(RGBColor::RED, 2., TL("jammed"));1664edgeColorer.addScheme(scheme);1665scheme = GUIColorScheme("by current occupancy (segmentwise, brutto)", TL("by current occupancy (segmentwise, brutto)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1666scheme.addColor(RGBColor::RED, 0.95);1667edgeColorer.addScheme(scheme);1668scheme = GUIColorScheme("by current speed (segmentwise)", TL("by current speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1669scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1670scheme.addColor(RGBColor::GREEN, 55. / 3.6);1671scheme.addColor(RGBColor::CYAN, 80. / 3.6);1672scheme.addColor(RGBColor::BLUE, 120 / 3.6);1673scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1674edgeColorer.addScheme(scheme);1675scheme = GUIColorScheme("by current flow (segmentwise)", TL("by current flow (segmentwise)"), RGBColor::BLUE, "", false, 0, COL_SCHEME_DYNAMIC);1676scheme.addColor(RGBColor::RED, 5000.);1677edgeColorer.addScheme(scheme);1678scheme = GUIColorScheme("by relative speed (segmentwise)", TL("by relative speed (segmentwise)"), RGBColor::RED, "", false, 0, COL_SCHEME_DYNAMIC);1679scheme.addColor(RGBColor::YELLOW, 0.25);1680scheme.addColor(RGBColor::GREEN, 0.5);1681scheme.addColor(RGBColor::CYAN, 0.75);1682scheme.addColor(RGBColor::BLUE, 1.);1683scheme.addColor(RGBColor::MAGENTA, 1.25);1684edgeColorer.addScheme(scheme);1685scheme = GUIColorScheme("by insertion-backlog (streetwise)", TL("by insertion-backlog (streetwise)"), RGBColor::GREY, "", false, 0, COL_SCHEME_DYNAMIC);1686scheme.addColor(RGBColor::GREEN, 1.);1687scheme.addColor(RGBColor::YELLOW, 10.);1688scheme.addColor(RGBColor::RED, 100.);1689edgeColorer.addScheme(scheme);1690scheme = GUIColorScheme("by TAZ (streetwise)", TL("by TAZ (streetwise)"), RGBColor(204, 204, 204), TL("no TAZ"), true);1691edgeColorer.addScheme(scheme);1692scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, TL(SCHEME_NAME_EDGE_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1693scheme.setAllowsNegativeValues(true);1694edgeColorer.addScheme(scheme);1695scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, TL(SCHEME_NAME_EDGEDATA_NUMERICAL.c_str()), COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);1696scheme.setAllowsNegativeValues(true);1697edgeColorer.addScheme(scheme);16981699/// add edge scaling schemes1700{1701edgeScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));1702GUIScaleScheme edgeScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), 0.5, TL("unselected"), true, 0, COL_SCHEME_MISC);1703edgeScheme.addColor(5, 1., TL("selected"));1704edgeScaler.addScheme(edgeScheme);1705edgeScheme = GUIScaleScheme(TL("by allowed speed (streetwise)"), 0);1706edgeScheme.addColor(10, 150. / 3.6);1707edgeScaler.addScheme(edgeScheme);1708edgeScheme = GUIScaleScheme(TL("by current occupancy (streetwise, brutto)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1709edgeScheme.addColor(10, 0.95);1710edgeScaler.addScheme(edgeScheme);1711edgeScheme = GUIScaleScheme(TL("by current speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1712edgeScheme.addColor(10, 150. / 3.6);1713edgeScaler.addScheme(edgeScheme);1714edgeScheme = GUIScaleScheme(TL("by current flow (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1715edgeScheme.addColor(20, 5000.);1716edgeScaler.addScheme(edgeScheme);1717edgeScheme = GUIScaleScheme(TL("by relative speed (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1718edgeScheme.addColor(20, 1.);1719edgeScaler.addScheme(edgeScheme);1720edgeScheme = GUIScaleScheme(TL("by insertion-backlog (streetwise)"), 0, "", false, 0, COL_SCHEME_DYNAMIC);1721edgeScheme.addColor(1, 1.);1722edgeScheme.addColor(10, 10.);1723edgeScheme.addColor(50, 100.);1724edgeScaler.addScheme(edgeScheme);1725edgeScheme = GUIScaleScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, TL(SCHEME_NAME_EDGEDATA_NUMERICAL.c_str()), 0.1, TL("missing data"), false, MISSING_DATA);1726edgeScheme.addColor(1, 1.);1727edgeScheme.addColor(2, 10.);1728edgeScheme.addColor(5, 100.);1729edgeScheme.addColor(10, 1000.);1730edgeScheme.setAllowsNegativeValues(true);1731edgeScaler.addScheme(edgeScheme);1732}17331734/// add vehicle scaling schemes1735{1736vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));1737GUIScaleScheme vehScheme = GUIScaleScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), 1, TL("unselected"), true, 0, COL_SCHEME_MISC);1738vehScheme.addColor(5, 1., TL("selected"));1739vehicleScaler.addScheme(vehScheme);1740vehScheme = GUIScaleScheme(TL("by speed"), 1, "", false, 1, COL_SCHEME_DYNAMIC);1741vehScheme.addColor(5, 150. / 3.6);1742vehScheme.setAllowsNegativeValues(true); // negative speed indicates stopped1743vehScheme.addColor(1, -1.); // stopped on road1744vehScheme.addColor(0.5, -2.); // stopped off-road (parking)1745vehicleScaler.addScheme(vehScheme);1746vehScheme = GUIScaleScheme(TL("by waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);1747vehScheme.addColor(1, 30.);1748vehScheme.addColor(2, 100.);1749vehScheme.addColor(4, 200.);1750vehScheme.addColor(10, 300.);1751vehicleScaler.addScheme(vehScheme);1752vehScheme = GUIScaleScheme(TL("by accumulated waiting time"), 1, "", false, 1, COL_SCHEME_DYNAMIC);1753vehScheme.addColor(5, 100.);1754vehicleScaler.addScheme(vehScheme);1755vehScheme = GUIScaleScheme(TL("by max speed"), 1);1756vehScheme.addColor(1, 30. / 3.6);1757vehScheme.addColor(1, 55. / 3.6);1758vehScheme.addColor(1, 80. / 3.6);1759vehScheme.addColor(1, 120. / 3.6);1760vehScheme.addColor(1, 150. / 3.6);1761vehicleScaler.addScheme(vehScheme);1762vehScheme = GUIScaleScheme(TL("by reroute number"), 1, "", false, 0, COL_SCHEME_DYNAMIC);1763vehScheme.addColor(1, 1.);1764vehScheme.addColor(5, 10.);1765vehicleScaler.addScheme(vehScheme);1766vehScheme = GUIScaleScheme(TL("by offset from best lane"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);1767vehScheme.addColor(5, -100, TL("opposite lane"));1768vehScheme.addColor(3, -3, "-3");1769vehScheme.addColor(1.5, -1, "-1");1770vehScheme.addColor(1.5, 1, "1");1771vehScheme.addColor(3, 3, "3");1772vehScheme.setAllowsNegativeValues(true);1773vehicleScaler.addScheme(vehScheme);1774vehScheme = GUIScaleScheme(TL("by acceleration"), 0.8, "0", false, 0, COL_SCHEME_DYNAMIC);1775vehScheme.addColor(4, -9.0);1776vehScheme.addColor(2, -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */);1777vehScheme.addColor(1, -0.1);1778vehScheme.addColor(1, 0.1);1779vehScheme.addColor(1, 2.6 /* SUMOVTypeParameter::getDefaultAccel() */);1780vehScheme.addColor(3, 5.2);1781vehScheme.setAllowsNegativeValues(true);1782vehicleScaler.addScheme(vehScheme);1783vehScheme = GUIScaleScheme(TL("by time gap on lane"), 5, "0", false, 0, COL_SCHEME_DYNAMIC);1784vehScheme.addColor(1, -1);1785vehScheme.addColor(1, 1);1786vehScheme.addColor(0.5, 2);1787vehScheme.setAllowsNegativeValues(true);1788vehicleScaler.addScheme(vehScheme);1789vehScheme = GUIScaleScheme(TL("by depart delay"), 0.8);1790vehScheme.addColor(1, 10.);1791vehScheme.addColor(2, 100.);1792vehScheme.addColor(3, 200.);1793vehScheme.addColor(5, 300.);1794vehicleScaler.addScheme(vehScheme);1795vehScheme = GUIScaleScheme(TL("by time loss"), 1, "", false, 0, COL_SCHEME_DYNAMIC);1796vehScheme.addColor(1, 10.);1797vehScheme.addColor(2, 60.);1798vehScheme.addColor(3, 180.);1799vehScheme.addColor(10, 900.);1800vehicleScaler.addScheme(vehScheme);1801vehScheme = GUIScaleScheme(TL("by stop delay"), 0.1, "", false, -1, COL_SCHEME_DYNAMIC);1802vehScheme.addColor(1, 0.);1803vehScheme.addColor(2, 10.);1804vehScheme.addColor(3, 60.);1805vehScheme.addColor(4, 120.);1806vehScheme.addColor(5, 300.);1807vehScheme.addColor(10, 900.);1808vehScheme.setAllowsNegativeValues(true);1809vehicleScaler.addScheme(vehScheme);1810vehScheme = GUIScaleScheme(TL("by stop arrival delay"), 0.1, "", false, INVALID_DOUBLE, COL_SCHEME_DYNAMIC);1811vehScheme.addColor(0.5, -10.);1812vehScheme.addColor(1, 0.);1813vehScheme.addColor(2, 10.);1814vehScheme.addColor(3, 60.);1815vehScheme.addColor(4, 120.);1816vehScheme.addColor(5, 300.);1817vehScheme.addColor(10, 900.);1818vehScheme.setAllowsNegativeValues(true);1819vehicleScaler.addScheme(vehScheme);1820vehScheme = GUIScaleScheme(SCHEME_NAME_PARAM_NUMERICAL, TL(SCHEME_NAME_PARAM_NUMERICAL.c_str()), 1);1821vehScheme.setAllowsNegativeValues(true);1822vehicleScaler.addScheme(vehScheme);1823}1824}182518261827void1828GUIVisualizationSettings::initNeteditDefaults() {1829// init color schemes1830GUIColorScheme scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor::BLACK, TL("road"), true);1831scheme.addColor(RGBColor::GREY, 1, TL("sidewalk"));1832scheme.addColor(RGBColor(192, 66, 44), 2, TL("bike lane"));1833scheme.addColor(RGBColor(200, 255, 200), 3, TL("green verge"));1834scheme.addColor(RGBColor(150, 200, 200), 4, TL("waterway"));1835scheme.addColor(RGBColor::BLACK, 5, TL("railway"));1836scheme.addColor(RGBColor(64, 0, 64), 6, TL("rails on road"));1837scheme.addColor(RGBColor(92, 92, 92), 7, TL("no passenger")); // paths, service roads etc1838scheme.addColor(RGBColor::RED, 8, TL("closed")); // road closing1839scheme.addColor(RGBColor::GREEN, 9, TL("connector")); // macro-connector1840scheme.addColor(RGBColor::ORANGE, 10, TL("forbidden")); // forbidden road1841scheme.addColor(RGBColor(145, 145, 145), 11, TL("data mode"));1842scheme.addColor(RGBColor(200, 240, 240), 12, TL("airway"));1843laneColorer.addScheme(scheme);1844scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1845scheme.addColor(RGBColor(0, 80, 180, 255), 1., TL("selected"));1846laneColorer.addScheme(scheme);1847scheme = GUIColorScheme("by permission code", TL("by permission code"), RGBColor(240, 240, 240), "nobody");1848scheme.addColor(RGBColor(10, 10, 10), (double)SVC_PASSENGER, "passenger");1849scheme.addColor(RGBColor(128, 128, 128), (double)SVC_PEDESTRIAN, "pedestrian");1850scheme.addColor(RGBColor(80, 80, 80), (double)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery");1851scheme.addColor(RGBColor(192, 66, 44), (double)SVC_BICYCLE, "bicycle");1852scheme.addColor(RGBColor(40, 100, 40), (double)SVC_BUS, "bus");1853scheme.addColor(RGBColor(166, 147, 26), (double)SVC_TAXI, "taxi");1854scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~SVC_NON_ROAD), "normal_road");1855scheme.addColor(RGBColor::BLACK, (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian");1856scheme.addColor(RGBColor(255, 206, 0), (double)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway");1857scheme.addColor(RGBColor(150, 200, 200), (double)SVC_SHIP, "waterway");1858scheme.addColor(RGBColor::GREEN, (double)SVCAll, "all");1859laneColorer.addScheme(scheme);18601861scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED);1862scheme.addColor(RGBColor::YELLOW, 30. / 3.6);1863scheme.addColor(RGBColor::GREEN, 55. / 3.6);1864scheme.addColor(RGBColor::CYAN, 80. / 3.6);1865scheme.addColor(RGBColor::BLUE, 120. / 3.6);1866scheme.addColor(RGBColor::MAGENTA, 150. / 3.6);1867laneColorer.addScheme(scheme);18681869scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED);1870scheme.addColor(RGBColor::BLUE, 5.);1871laneColorer.addScheme(scheme);18721873scheme = GUIColorScheme("by given length/geometrical length", RGBColor::RED);1874scheme.addColor(RGBColor::ORANGE, 0.25);1875scheme.addColor(RGBColor::YELLOW, 0.5);1876scheme.addColor(RGBColor(179, 179, 179, 255), 1.);1877scheme.addColor(RGBColor::GREEN, 2.);1878scheme.addColor(RGBColor::CYAN, 4.);1879scheme.addColor(RGBColor::BLUE, 100.);1880laneColorer.addScheme(scheme);1881laneColorer.addScheme(GUIColorScheme("by angle", TL("by angle"), RGBColor::YELLOW, "", true));18821883scheme = GUIColorScheme("by priority", TL("by priority"), RGBColor::YELLOW);1884scheme.addColor(RGBColor::RED, -20.);1885scheme.addColor(RGBColor::GREEN, 20.);1886scheme.setAllowsNegativeValues(true);1887laneColorer.addScheme(scheme);1888scheme = GUIColorScheme("by height at start", TL("by height at start"), RGBColor::RED);1889scheme.addColor(RGBColor::BLUE, -10.);1890scheme.addColor(RGBColor::YELLOW, 50.);1891scheme.addColor(RGBColor::GREEN, 100.);1892scheme.addColor(RGBColor::MAGENTA, 200.);1893scheme.setAllowsNegativeValues(true);1894laneColorer.addScheme(scheme);1895scheme = GUIColorScheme("by height at segment start", TL("by height at segment start"), RGBColor::RED);1896scheme.addColor(RGBColor::BLUE, -10.);1897scheme.addColor(RGBColor::YELLOW, 50.);1898scheme.addColor(RGBColor::GREEN, 100.);1899scheme.addColor(RGBColor::MAGENTA, 200.);1900scheme.setAllowsNegativeValues(true);1901laneColorer.addScheme(scheme);1902scheme = GUIColorScheme("by inclination", TL("by inclination"), RGBColor::GREY);1903scheme.addColor(RGBColor::YELLOW, 0.1);1904scheme.addColor(RGBColor::RED, 0.3);1905scheme.addColor(RGBColor::GREEN, -0.1);1906scheme.addColor(RGBColor::BLUE, -0.3);1907scheme.setAllowsNegativeValues(true);1908laneColorer.addScheme(scheme);1909scheme = GUIColorScheme("by segment inclination", TL("by segment inclination"), RGBColor::GREY);1910scheme.addColor(RGBColor::YELLOW, 0.1);1911scheme.addColor(RGBColor::RED, 0.3);1912scheme.addColor(RGBColor::GREEN, -0.1);1913scheme.addColor(RGBColor::BLUE, -0.3);1914scheme.setAllowsNegativeValues(true);1915laneColorer.addScheme(scheme);1916scheme = GUIColorScheme(SCHEME_NAME_EDGE_PARAM_NUMERICAL, TL(SCHEME_NAME_EDGE_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1917scheme.setAllowsNegativeValues(true);1918laneColorer.addScheme(scheme);1919scheme = GUIColorScheme(SCHEME_NAME_LANE_PARAM_NUMERICAL, TL(SCHEME_NAME_LANE_PARAM_NUMERICAL.c_str()), RGBColor(204, 204, 204));1920scheme.setAllowsNegativeValues(true);1921laneColorer.addScheme(scheme);1922scheme = GUIColorScheme("by distance (kilometrage)", RGBColor(204, 204, 204));1923scheme.addColor(RGBColor::RED, 1.);1924scheme.addColor(RGBColor::RED, -1.);1925scheme.setAllowsNegativeValues(true);1926laneColorer.addScheme(scheme);1927scheme = GUIColorScheme("by abs distance (kilometrage)", RGBColor(204, 204, 204));1928scheme.addColor(RGBColor::RED, 1.);1929scheme.setAllowsNegativeValues(false);1930laneColorer.addScheme(scheme);1931scheme = GUIColorScheme(SCHEME_NAME_EDGEDATA_NUMERICAL, TL(SCHEME_NAME_EDGEDATA_NUMERICAL.c_str()), COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);1932scheme.setAllowsNegativeValues(true);1933laneColorer.addScheme(scheme);19341935scheme = GUIColorScheme("uniform", TL("uniform"), RGBColor(102, 0, 0), "", true);1936scheme.addColor(RGBColor(204, 0, 0), 1, TL("junction bubble"));1937scheme.addColor(RGBColor(230, 100, 115), 2, TL("geometry points"));1938scheme.addColor(GUIVisualizationColorSettings::SUMO_color_DEADEND_SHOW, 3, TL("connections missing"));1939scheme.addColor(RGBColor::GREEN, 3, TL("custom shape"));1940scheme.addColor(RGBColor(205, 180, 180), 4, TL("data mode"));1941junctionColorer.addScheme(scheme);1942scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1943scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));1944junctionColorer.addScheme(scheme);1945scheme = GUIColorScheme(SCHEME_NAME_TYPE, TL(SCHEME_NAME_TYPE.c_str()), RGBColor::GREEN, "traffic_light", true);1946scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated");1947scheme.addColor(RGBColor::YELLOW, 2, "priority");1948scheme.addColor(RGBColor::RED, 3, "priority_stop");1949scheme.addColor(RGBColor::BLUE, 4, "right_before_left");1950scheme.addColor(RGBColor::CYAN, 5, "allway_stop");1951scheme.addColor(RGBColor::GREY, 6, "district");1952scheme.addColor(RGBColor::MAGENTA, 7, "unregulated");1953scheme.addColor(RGBColor::BLACK, 8, "dead_end");1954scheme.addColor(RGBColor::ORANGE, 9, "rail_signal");1955scheme.addColor(RGBColor(172, 108, 44), 10, "zipper"); // brown, darker than the zipper link rule1956scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red");1957scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple1958scheme.addColor(RGBColor(0, 0, 128), 13, "left_before_right"); // dark blue1959junctionColorer.addScheme(scheme);1960scheme = GUIColorScheme("by height", TL("by height"), RGBColor::GREY);1961scheme.addColor(RGBColor::BLUE, -10.);1962scheme.addColor(RGBColor::RED, 10.);1963scheme.addColor(RGBColor::YELLOW, 50.);1964scheme.addColor(RGBColor::GREEN, 100.);1965scheme.addColor(RGBColor::MAGENTA, 200.);1966scheme.setAllowsNegativeValues(true);1967junctionColorer.addScheme(scheme);19681969/// add POI coloring schemes1970poiColorer.addScheme(GUIColorScheme("given POI color", TL("given POI color"), RGBColor::RED, "", true));1971scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1972scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1973poiColorer.addScheme(scheme);1974poiColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::RED, "", true));19751976/// add polygon coloring schemes1977polyColorer.addScheme(GUIColorScheme("given polygon color", TL("given polygon color"), RGBColor::ORANGE, "", true));1978scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(179, 179, 179, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1979scheme.addColor(RGBColor(0, 102, 204, 255), 1, TL("selected"));1980polyColorer.addScheme(scheme);1981polyColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));1982polyColorer.addScheme(GUIColorScheme("random", TL("random"), RGBColor::YELLOW, "", true));19831984/// add edge scaling schemes1985{1986GUIScaleScheme edgeScheme = GUIScaleScheme(TL("default"), 1, TL("uniform"), true);1987laneScaler.addScheme(edgeScheme);1988}19891990/// add data coloring schemes1991dataColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::ORANGE, "", true));1992scheme = GUIColorScheme(SCHEME_NAME_SELECTION, TL(SCHEME_NAME_SELECTION.c_str()), RGBColor(128, 128, 128, 255), TL("unselected"), true, 0, COL_SCHEME_MISC);1993scheme.addColor(RGBColor(0, 80, 180, 255), 1, TL("selected"));1994dataColorer.addScheme(scheme);1995dataColorer.addScheme(GUIColorScheme("by origin taz", TL("by origin taz"), RGBColor::ORANGE, "", true));1996dataColorer.addScheme(GUIColorScheme("by destination taz", TL("by destination taz"), RGBColor::ORANGE, "", true));1997scheme = GUIColorScheme(SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL, TL(SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL.c_str()), COL_MISSING_DATA, TL("missing data"), false, MISSING_DATA);1998scheme.setAllowsNegativeValues(true);1999dataColorer.addScheme(scheme);20002001// dummy schemes2002vehicleColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));2003personColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));2004containerColorer.addScheme(GUIColorScheme("uniform", TL("uniform"), RGBColor::YELLOW, "", true));2005vehicleScaler.addScheme(GUIScaleScheme(TL("uniform"), 1, "", true));2006}200720082009int2010GUIVisualizationSettings::getLaneEdgeMode() const {2011if (UseMesoSim) {2012return edgeColorer.getActive();2013}2014return laneColorer.getActive();2015}201620172018int2019GUIVisualizationSettings::getLaneEdgeScaleMode() const {2020if (UseMesoSim) {2021return edgeScaler.getActive();2022}2023return laneScaler.getActive();2024}202520262027GUIColorScheme&2028GUIVisualizationSettings::getLaneEdgeScheme() {2029if (UseMesoSim) {2030return edgeColorer.getScheme();2031}2032return laneColorer.getScheme();2033}203420352036GUIScaleScheme&2037GUIVisualizationSettings::getLaneEdgeScaleScheme() {2038if (UseMesoSim) {2039return edgeScaler.getScheme();2040}2041return laneScaler.getScheme();2042}204320442045void2046GUIVisualizationSettings::save(OutputDevice& dev) const {2047dev.openTag(SUMO_TAG_VIEWSETTINGS_SCHEME);2048dev.writeAttr(SUMO_ATTR_NAME, name);2049dev.openTag(SUMO_TAG_VIEWSETTINGS_OPENGL);2050dev.writeAttr("dither", dither);2051dev.writeAttr("fps", fps);2052dev.writeAttr("trueZ", trueZ);2053dev.writeAttr("drawBoundaries", drawBoundaries);2054dev.writeAttr("disableDottedContours", disableDottedContours);2055dev.writeAttr("forceDrawRectangleSelection", forceDrawForRectangleSelection);2056geometryIndices.print(dev, "geometryIndices");2057dev.closeTag();2058dev.openTag(SUMO_TAG_VIEWSETTINGS_BACKGROUND);2059dev.writeAttr("backgroundColor", backgroundColor);2060dev.writeAttr("showGrid", showGrid);2061dev.writeAttr("gridXSize", gridXSize);2062dev.writeAttr("gridYSize", gridYSize);2063dev.closeTag();2064// edges2065dev.openTag(SUMO_TAG_VIEWSETTINGS_EDGES);2066dev.writeAttr("laneEdgeMode", getLaneEdgeMode());2067dev.writeAttr("scaleMode", getLaneEdgeScaleMode());2068dev.writeAttr("laneShowBorders", laneShowBorders);2069dev.writeAttr("showBikeMarkings", showBikeMarkings);2070dev.writeAttr("showLinkDecals", showLinkDecals);2071dev.writeAttr("realisticLinkRules", realisticLinkRules);2072dev.writeAttr("showLinkRules", showLinkRules);2073dev.writeAttr("showRails", showRails);2074dev.writeAttr("secondaryShape", secondaryShape);2075dev.writeAttr("hideConnectors", hideConnectors);2076dev.writeAttr("widthExaggeration", laneWidthExaggeration);2077dev.writeAttr("minSize", laneMinSize);2078dev.writeAttr("showDirection", showLaneDirection);2079dev.writeAttr("showSublanes", showSublanes);2080dev.writeAttr("spreadSuperposed", spreadSuperposed);2081dev.writeAttr("disableHideByZoom", disableHideByZoom);2082dev.writeAttr("edgeParam", edgeParam);2083dev.writeAttr("laneParam", laneParam);2084dev.writeAttr("edgeData", edgeData);2085dev.writeAttr("edgeDataID", edgeDataID);2086dev.writeAttr("edgeDataScaling", edgeDataScaling);2087edgeValueRainBow.print(dev, "edgeValue");2088dev.lf();2089dev << " ";2090edgeName.print(dev, "edgeName");2091dev.lf();2092dev << " ";2093internalEdgeName.print(dev, "internalEdgeName");2094dev.lf();2095dev << " ";2096cwaEdgeName.print(dev, "cwaEdgeName");2097dev.lf();2098dev << " ";2099streetName.print(dev, "streetName");2100dev.lf();2101dev << " ";2102edgeValue.print(dev, "edgeValue");2103edgeScaleValue.print(dev, "edgeScaleValue");2104laneColorer.save(dev);2105laneScaler.save(dev);2106edgeColorer.save(dev, "meso:");2107edgeScaler.save(dev, "meso:");2108dev.closeTag();2109// vehicles2110dev.openTag(SUMO_TAG_VIEWSETTINGS_VEHICLES);2111dev.writeAttr("vehicleMode", vehicleColorer.getActive());2112dev.writeAttr("vehicleScaleMode", vehicleScaler.getActive());2113dev.writeAttr("vehicleQuality", vehicleQuality);2114vehicleSize.print(dev, "vehicle");2115vehicleValueRainBow.print(dev, "vehicleValue");2116dev.writeAttr("showBlinker", showBlinker);2117dev.writeAttr("drawMinGap", drawMinGap);2118dev.writeAttr("drawBrakeGap", drawBrakeGap);2119dev.writeAttr("showBTRange", showBTRange);2120dev.writeAttr("showRouteIndex", showRouteIndex);2121dev.writeAttr("scaleLength", scaleLength);2122dev.writeAttr("drawReversed", drawReversed);2123dev.writeAttr("showParkingInfo", showParkingInfo);2124dev.writeAttr("showChargingInfo", showChargingInfo);2125dev.writeAttr("vehicleParam", vehicleParam);2126dev.writeAttr("vehicleScaleParam", vehicleScaleParam);2127dev.writeAttr("vehicleTextParam", vehicleTextParam);2128dev.lf();2129dev << " ";2130vehicleName.print(dev, "vehicleName");2131dev.lf();2132dev << " ";2133vehicleValue.print(dev, "vehicleValue");2134dev.lf();2135dev << " ";2136vehicleScaleValue.print(dev, "vehicleScaleValue");2137dev.lf();2138dev << " ";2139vehicleText.print(dev, "vehicleText");2140vehicleColorer.save(dev);2141vehicleScaler.save(dev);2142dev.closeTag();2143// persons2144dev.openTag(SUMO_TAG_VIEWSETTINGS_PERSONS);2145dev.writeAttr("personMode", personColorer.getActive());2146dev.writeAttr("personQuality", personQuality);2147dev.writeAttr("showPedestrianNetwork", showPedestrianNetwork);2148dev.writeAttr("pedestrianNetworkColor", pedestrianNetworkColor);2149personSize.print(dev, "person");2150dev.lf();2151dev << " ";2152personName.print(dev, "personName");2153dev.lf();2154dev << " ";2155personValue.print(dev, "personValue");2156personColorer.save(dev);2157dev.closeTag();2158// containers2159dev.openTag(SUMO_TAG_VIEWSETTINGS_CONTAINERS);2160dev.writeAttr("containerMode", containerColorer.getActive());2161dev.writeAttr("containerQuality", containerQuality);2162containerSize.print(dev, "container");2163dev.lf();2164dev << " ";2165containerName.print(dev, "containerName");2166containerColorer.save(dev);2167dev.closeTag();2168// junctions2169dev.openTag(SUMO_TAG_VIEWSETTINGS_JUNCTIONS);2170dev.writeAttr("junctionMode", junctionColorer.getActive());2171dev.lf();2172dev << " ";2173drawLinkTLIndex.print(dev, "drawLinkTLIndex");2174dev.lf();2175dev << " ";2176drawLinkJunctionIndex.print(dev, "drawLinkJunctionIndex");2177dev.lf();2178dev << " ";2179junctionID.print(dev, "junctionID");2180dev.lf();2181dev << " ";2182junctionName.print(dev, "junctionName");2183dev.lf();2184dev << " ";2185internalJunctionName.print(dev, "internalJunctionName");2186dev.lf();2187dev << " ";2188tlsPhaseIndex.print(dev, "tlsPhaseIndex");2189tlsPhaseName.print(dev, "tlsPhaseName");2190dev.lf();2191dev << " ";2192dev.writeAttr("showLane2Lane", showLane2Lane);2193dev.writeAttr("drawShape", drawJunctionShape);2194dev.writeAttr("drawCrossingsAndWalkingareas", drawCrossingsAndWalkingareas);2195junctionSize.print(dev, "junction");2196junctionValueRainBow.print(dev, "junctionValue");2197junctionColorer.save(dev);2198dev.closeTag();2199// additionals2200dev.openTag(SUMO_TAG_VIEWSETTINGS_ADDITIONALS);2201dev.writeAttr("addMode", addMode);2202addSize.print(dev, "add");2203addName.print(dev, "addName");2204addFullName.print(dev, "addFullName");2205// temporal (will be integrated in a schema)2206dev.writeAttr("busStopColor", colorSettings.busStopColor);2207dev.writeAttr("busStopColorSign", colorSettings.busStopColorSign);2208dev.writeAttr("chargingStationColor", colorSettings.chargingStationColor);2209dev.writeAttr("chargingStationColorCharge", colorSettings.chargingStationColorCharge);2210dev.writeAttr("chargingStationColorSign", colorSettings.chargingStationColorSign);2211dev.writeAttr("containerStopColor", colorSettings.containerStopColor);2212dev.writeAttr("containerStopColorSign", colorSettings.containerStopColorSign);2213dev.writeAttr("parkingAreaColor", colorSettings.parkingAreaColor);2214dev.writeAttr("parkingAreaColorSign", colorSettings.parkingAreaColorSign);2215dev.writeAttr("parkingSpaceColor", colorSettings.parkingSpaceColor);2216dev.writeAttr("parkingSpaceColorContour", colorSettings.parkingSpaceColorContour);2217dev.writeAttr("personTripColor", colorSettings.personTripColor);2218dev.writeAttr("personTripWidth", widthSettings.personTripWidth);2219dev.writeAttr("rideColor", colorSettings.rideColor);2220dev.writeAttr("rideWidth", widthSettings.rideWidth);2221dev.writeAttr("selectedAdditionalColor", colorSettings.selectedAdditionalColor);2222dev.writeAttr("selectedConnectionColor", colorSettings.selectedConnectionColor);2223dev.writeAttr("selectedContainerColor", colorSettings.selectedContainerColor);2224dev.writeAttr("selectedContainerPlanColor", colorSettings.selectedContainerPlanColor);2225dev.writeAttr("selectedCrossingColor", colorSettings.selectedCrossingColor);2226dev.writeAttr("selectedEdgeColor", colorSettings.selectedEdgeColor);2227dev.writeAttr("selectedEdgeDataColor", colorSettings.selectedEdgeDataColor);2228dev.writeAttr("selectedLaneColor", colorSettings.selectedLaneColor);2229dev.writeAttr("selectedPersonColor", colorSettings.selectedPersonColor);2230dev.writeAttr("selectedPersonPlanColor", colorSettings.selectedPersonPlanColor);2231dev.writeAttr("selectedProhibitionColor", colorSettings.selectedProhibitionColor);2232dev.writeAttr("selectedRouteColor", colorSettings.selectedRouteColor);2233dev.writeAttr("selectedVehicleColor", colorSettings.selectedVehicleColor);2234dev.writeAttr("selectionColor", colorSettings.selectionColor);2235dev.writeAttr("stopColor", colorSettings.stopColor);2236dev.writeAttr("waypointColor", colorSettings.waypointColor);2237dev.writeAttr("stopContainerColor", colorSettings.stopContainerColor);2238dev.writeAttr("stopPersonColor", colorSettings.stopPersonColor);2239dev.writeAttr("trainStopColor", colorSettings.trainStopColor);2240dev.writeAttr("trainStopColorSign", colorSettings.trainStopColorSign);2241dev.writeAttr("transhipColor", colorSettings.transhipColor);2242dev.writeAttr("transhipWidth", widthSettings.transhipWidth);2243dev.writeAttr("transportColor", colorSettings.transportColor);2244dev.writeAttr("transportWidth", widthSettings.transportWidth);2245dev.writeAttr("tripWidth", widthSettings.tripWidth);2246dev.writeAttr("vehicleTripColor", colorSettings.personTripColor);2247dev.writeAttr("walkColor", colorSettings.walkColor);2248dev.writeAttr("walkWidth", widthSettings.walkWidth);2249dev.closeTag();2250// pois2251dev.openTag(SUMO_TAG_VIEWSETTINGS_POIS);2252dev.writeAttr("poiTextParam", poiTextParam);2253poiSize.print(dev, "poi");2254dev.writeAttr("poiDetail", poiDetail);2255poiName.print(dev, "poiName");2256poiType.print(dev, "poiType");2257poiText.print(dev, "poiText");2258dev.writeAttr("poiUseCustomLayer", poiUseCustomLayer);2259dev.writeAttr("poiCustomLayer", poiCustomLayer);2260poiColorer.save(dev);2261dev.closeTag();2262// polys2263dev.openTag(SUMO_TAG_VIEWSETTINGS_POLYS);2264polySize.print(dev, "poly");2265polyName.print(dev, "polyName");2266polyType.print(dev, "polyType");2267dev.writeAttr("polyUseCustomLayer", polyUseCustomLayer);2268dev.writeAttr("polyCustomLayer", polyCustomLayer);2269polyColorer.save(dev);2270dev.closeTag();2271// 3D2272dev.openTag(SUMO_TAG_VIEWSETTINGS_3D);2273dev.writeAttr("ignoreColorSchemeFor3DVehicles", ignoreColorSchemeFor3DVehicles);2274dev.writeAttr("show3DTLSLinkMarkers", show3DTLSLinkMarkers);2275dev.writeAttr("show3DTLSDomes", show3DTLSDomes);2276dev.writeAttr("show3DHeadUpDisplay", show3DHeadUpDisplay);2277dev.writeAttr("generate3DTLSModels", generate3DTLSModels);2278dev.writeAttr("ambient3DLight", ambient3DLight);2279dev.writeAttr("diffuse3DLight", diffuse3DLight);2280dev.closeTag();2281// legend2282dev.openTag(SUMO_TAG_VIEWSETTINGS_LEGEND);2283dev.writeAttr("showSizeLegend", showSizeLegend);2284dev.writeAttr("showColorLegend", showColorLegend);2285dev.writeAttr("showVehicleColorLegend", showVehicleColorLegend);2286dev.closeTag();22872288dev.closeTag();2289}229022912292bool2293GUIVisualizationSettings::operator==(const GUIVisualizationSettings& v2) {2294if (ignoreColorSchemeFor3DVehicles != v2.ignoreColorSchemeFor3DVehicles) {2295return false;2296}2297if (show3DTLSDomes != v2.show3DTLSDomes) {2298return false;2299}2300if (show3DTLSLinkMarkers != v2.show3DTLSLinkMarkers) {2301return false;2302}2303if (show3DHeadUpDisplay != v2.show3DHeadUpDisplay) {2304return false;2305}2306if (generate3DTLSModels != v2.generate3DTLSModels) {2307return false;2308}2309if (ambient3DLight != v2.ambient3DLight) {2310return false;2311}2312if (diffuse3DLight != v2.diffuse3DLight) {2313return false;2314}2315if (skyColor != v2.skyColor) {2316return false;2317}2318if (dither != v2.dither) {2319return false;2320}2321if (fps != v2.fps) {2322return false;2323}2324if (trueZ != v2.trueZ) {2325return false;2326}2327if (drawBoundaries != v2.drawBoundaries) {2328return false;2329}2330if (disableDottedContours != v2.disableDottedContours) {2331return false;2332}2333if (forceDrawForRectangleSelection != v2.forceDrawForRectangleSelection) {2334return false;2335}2336if (geometryIndices != v2.geometryIndices) {2337return false;2338}2339if (backgroundColor != v2.backgroundColor) {2340return false;2341}2342if (colorSettings != v2.colorSettings) {2343return false;2344}2345if (showGrid != v2.showGrid) {2346return false;2347}2348if (gridXSize != v2.gridXSize) {2349return false;2350}2351if (gridYSize != v2.gridYSize) {2352return false;2353}23542355if (!(edgeColorer == v2.edgeColorer)) {2356return false;2357}2358if (!(edgeScaler == v2.edgeScaler)) {2359return false;2360}2361if (!(laneColorer == v2.laneColorer)) {2362return false;2363}2364if (!(laneScaler == v2.laneScaler)) {2365return false;2366}2367if (laneShowBorders != v2.laneShowBorders) {2368return false;2369}2370if (showBikeMarkings != v2.showBikeMarkings) {2371return false;2372}2373if (showLinkDecals != v2.showLinkDecals) {2374return false;2375}2376if (realisticLinkRules != v2.realisticLinkRules) {2377return false;2378}2379if (showLinkRules != v2.showLinkRules) {2380return false;2381}2382if (showRails != v2.showRails) {2383return false;2384}2385if (secondaryShape != v2.secondaryShape) {2386return false;2387}2388if (edgeName != v2.edgeName) {2389return false;2390}2391if (internalEdgeName != v2.internalEdgeName) {2392return false;2393}2394if (cwaEdgeName != v2.cwaEdgeName) {2395return false;2396}2397if (streetName != v2.streetName) {2398return false;2399}2400if (edgeValue != v2.edgeValue) {2401return false;2402}2403if (edgeScaleValue != v2.edgeScaleValue) {2404return false;2405}2406if (hideConnectors != v2.hideConnectors) {2407return false;2408}2409if (laneWidthExaggeration != v2.laneWidthExaggeration) {2410return false;2411}2412if (laneMinSize != v2.laneMinSize) {2413return false;2414}2415if (showLaneDirection != v2.showLaneDirection) {2416return false;2417}2418if (showSublanes != v2.showSublanes) {2419return false;2420}2421if (spreadSuperposed != v2.spreadSuperposed) {2422return false;2423}2424if (disableHideByZoom != v2.disableHideByZoom) {2425return false;2426}2427if (edgeParam != v2.edgeParam) {2428return false;2429}2430if (laneParam != v2.laneParam) {2431return false;2432}2433if (vehicleParam != v2.vehicleParam) {2434return false;2435}2436if (vehicleScaleParam != v2.vehicleScaleParam) {2437return false;2438}2439if (vehicleTextParam != v2.vehicleTextParam) {2440return false;2441}2442if (edgeData != v2.edgeData) {2443return false;2444}2445if (edgeDataID != v2.edgeDataID) {2446return false;2447}2448if (edgeDataScaling != v2.edgeDataScaling) {2449return false;2450}2451if (edgeValueRainBow != v2.edgeValueRainBow) {2452return false;2453}2454if (!(vehicleColorer == v2.vehicleColorer)) {2455return false;2456}2457if (!(vehicleScaler == v2.vehicleScaler)) {2458return false;2459}2460if (vehicleQuality != v2.vehicleQuality) {2461return false;2462}2463if (vehicleSize != v2.vehicleSize) {2464return false;2465}2466if (vehicleValueRainBow != v2.vehicleValueRainBow) {2467return false;2468}2469if (showBlinker != v2.showBlinker) {2470return false;2471}2472if (drawLaneChangePreference != v2.drawLaneChangePreference) {2473return false;2474}2475if (drawMinGap != v2.drawMinGap) {2476return false;2477}2478if (drawBrakeGap != v2.drawBrakeGap) {2479return false;2480}2481if (showBTRange != v2.showBTRange) {2482return false;2483}2484if (showRouteIndex != v2.showRouteIndex) {2485return false;2486}2487if (scaleLength != v2.scaleLength) {2488return false;2489}2490if (drawReversed != v2.drawReversed) {2491return false;2492}2493if (showParkingInfo != v2.showParkingInfo) {2494return false;2495}2496if (showChargingInfo != v2.showChargingInfo) {2497return false;2498}2499if (vehicleName != v2.vehicleName) {2500return false;2501}2502if (vehicleValue != v2.vehicleValue) {2503return false;2504}2505if (vehicleScaleValue != v2.vehicleScaleValue) {2506return false;2507}2508if (vehicleText != v2.vehicleText) {2509return false;2510}2511if (!(personColorer == v2.personColorer)) {2512return false;2513}2514if (personQuality != v2.personQuality) {2515return false;2516}2517if (personSize != v2.personSize) {2518return false;2519}2520if (personName != v2.personName) {2521return false;2522}2523if (personValue != v2.personValue) {2524return false;2525}2526if (showPedestrianNetwork != v2.showPedestrianNetwork) {2527return false;2528}2529if (pedestrianNetworkColor != v2.pedestrianNetworkColor) {2530return false;2531}2532if (!(containerColorer == v2.containerColorer)) {2533return false;2534}2535if (containerQuality != v2.containerQuality) {2536return false;2537}2538if (containerSize != v2.containerSize) {2539return false;2540}2541if (containerName != v2.containerName) {2542return false;2543}2544if (!(junctionColorer == v2.junctionColorer)) {2545return false;2546}2547if (!(poiColorer == v2.poiColorer)) {2548return false;2549}2550if (!(polyColorer == v2.polyColorer)) {2551return false;2552}2553if (drawLinkTLIndex != v2.drawLinkTLIndex) {2554return false;2555}2556if (drawLinkJunctionIndex != v2.drawLinkJunctionIndex) {2557return false;2558}2559if (junctionID != v2.junctionID) {2560return false;2561}2562if (junctionName != v2.junctionName) {2563return false;2564}2565if (internalJunctionName != v2.internalJunctionName) {2566return false;2567}2568if (tlsPhaseIndex != v2.tlsPhaseIndex) {2569return false;2570}2571if (tlsPhaseName != v2.tlsPhaseName) {2572return false;2573}25742575if (showLane2Lane != v2.showLane2Lane) {2576return false;2577}25782579if (drawJunctionShape != v2.drawJunctionShape) {2580return false;2581}25822583if (drawCrossingsAndWalkingareas != v2.drawCrossingsAndWalkingareas) {2584return false;2585}2586if (junctionSize != v2.junctionSize) {2587return false;2588}2589if (junctionValueRainBow != v2.junctionValueRainBow) {2590return false;2591}25922593if (addMode != v2.addMode) {2594return false;2595}2596if (addSize != v2.addSize) {2597return false;2598}2599if (addName != v2.addName) {2600return false;2601}2602if (addFullName != v2.addFullName) {2603return false;2604}2605if (poiSize != v2.poiSize) {2606return false;2607}2608if (poiDetail != v2.poiDetail) {2609return false;2610}2611if (poiName != v2.poiName) {2612return false;2613}2614if (poiType != v2.poiType) {2615return false;2616}2617if (poiText != v2.poiText) {2618return false;2619}2620if (poiTextParam != v2.poiTextParam) {2621return false;2622}2623if (poiUseCustomLayer != v2.poiUseCustomLayer) {2624return false;2625}2626if (poiCustomLayer != v2.poiCustomLayer) {2627return false;2628}2629if (polySize != v2.polySize) {2630return false;2631}2632if (polyName != v2.polyName) {2633return false;2634}2635if (polyType != v2.polyType) {2636return false;2637}2638if (polyUseCustomLayer != v2.polyUseCustomLayer) {2639return false;2640}2641if (polyCustomLayer != v2.polyCustomLayer) {2642return false;2643}26442645if (showSizeLegend != v2.showSizeLegend) {2646return false;2647}2648if (showColorLegend != v2.showColorLegend) {2649return false;2650}2651if (showVehicleColorLegend != v2.showVehicleColorLegend) {2652return false;2653}2654if (!(dataColorer == v2.dataColorer)) {2655return false;2656}2657if (!(dataValue == v2.dataValue)) {2658return false;2659}2660if (!(tazRelWidthExaggeration == v2.tazRelWidthExaggeration)) {2661return false;2662}2663if (!(edgeRelWidthExaggeration == v2.edgeRelWidthExaggeration)) {2664return false;2665}2666if (!(relDataAttr == v2.relDataAttr)) {2667return false;2668}2669if (!(dataValueRainBow == v2.dataValueRainBow)) {2670return false;2671}26722673return true;2674}267526762677const RGBColor&2678GUIVisualizationSettings::getLinkColor(const LinkState& ls, bool realistic) {2679switch (ls) {2680case LINKSTATE_TL_GREEN_MAJOR:2681return SUMO_color_TL_GREEN_MAJOR;2682case LINKSTATE_TL_GREEN_MINOR:2683return SUMO_color_TL_GREEN_MINOR;2684case LINKSTATE_TL_RED:2685return SUMO_color_TL_RED;2686case LINKSTATE_TL_REDYELLOW:2687return SUMO_color_TL_REDYELLOW;2688case LINKSTATE_TL_YELLOW_MAJOR:2689return SUMO_color_TL_YELLOW_MAJOR;2690case LINKSTATE_TL_YELLOW_MINOR:2691return SUMO_color_TL_YELLOW_MINOR;2692case LINKSTATE_TL_OFF_BLINKING:2693return SUMO_color_TL_OFF_BLINKING;2694case LINKSTATE_TL_OFF_NOSIGNAL:2695return SUMO_color_TL_OFF_NOSIGNAL;2696case LINKSTATE_MAJOR:2697return realistic ? RGBColor::INVISIBLE : SUMO_color_MAJOR;2698case LINKSTATE_MINOR:2699return realistic ? SUMO_color_MAJOR : SUMO_color_MINOR;2700case LINKSTATE_EQUAL:2701return SUMO_color_EQUAL;2702case LINKSTATE_STOP:2703return realistic ? SUMO_color_MAJOR : SUMO_color_STOP;2704case LINKSTATE_ALLWAY_STOP:2705return realistic ? SUMO_color_MAJOR : SUMO_color_ALLWAY_STOP;2706case LINKSTATE_ZIPPER:2707return realistic ? RGBColor::INVISIBLE : SUMO_color_ZIPPER;2708case LINKSTATE_DEADEND:2709return SUMO_color_DEADEND;2710default:2711throw ProcessError(TLF("No color defined for LinkState '%'", std::string(ls, 1)));2712}2713}271427152716double2717GUIVisualizationSettings::getTextAngle(double objectAngle) const {2718double viewAngle = objectAngle - angle;2719while (viewAngle < 0) {2720viewAngle += 360;2721}2722// fmod round towards zero which is not want we want for negative numbers2723viewAngle = fmod(viewAngle, 360);2724if (viewAngle > 90 && viewAngle < 270) {2725// avoid reading text on its head2726objectAngle -= 180;2727}2728return objectAngle;2729}273027312732bool2733GUIVisualizationSettings::flippedTextAngle(double objectAngle) const {2734double viewAngle = objectAngle - angle;2735while (viewAngle < 0) {2736viewAngle += 360;2737}2738// fmod round towards zero which is not want we want for negative numbers2739viewAngle = fmod(viewAngle, 360);2740return (viewAngle > 90 && viewAngle < 270);2741}274227432744GUIVisualizationSettings::Detail2745GUIVisualizationSettings::getDetailLevel(const double exaggeration) const {2746// calculate factor2747const auto factor = (scale * exaggeration);2748if (factor >= 10) {2749return GUIVisualizationSettings::Detail::Level0;2750} else if (factor >= 5) {2751return GUIVisualizationSettings::Detail::Level1;2752} else if (factor >= 2.5) {2753return GUIVisualizationSettings::Detail::Level2;2754} else if (factor >= 1.25) {2755return GUIVisualizationSettings::Detail::Level3;2756} else {2757return GUIVisualizationSettings::Detail::Level4;2758}2759}276027612762bool2763GUIVisualizationSettings::drawDetail(const double detail, const double exaggeration) const {2764if (detail <= 0) {2765return true;2766} else {2767return ((scale * exaggeration) >= detail);2768}2769}277027712772bool2773GUIVisualizationSettings::drawMovingGeometryPoint(const double exaggeration, const double radius) const {2774return (scale * radius * exaggeration > 10);2775}27762777/****************************************************************************/277827792780