SUMO - Simulation of Urban MObility
GUISettingsHandler.cpp
Go to the documentation of this file.
1 /****************************************************************************/
10 // The dialog to change the view (gui) settings.
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
13 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <vector>
36 #include <utils/common/ToString.h>
37 #include <utils/common/RGBColor.h>
45 #include <utils/xml/XMLSubSys.h>
46 #include "GUISettingsHandler.h"
47 
48 
49 // ===========================================================================
50 // method definitions
51 // ===========================================================================
52 GUISettingsHandler::GUISettingsHandler(const std::string& content, bool isFile)
53  : SUMOSAXHandler(content), myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1),
54  myCurrentColorer(SUMO_TAG_NOTHING), myCurrentScheme(0), myJamSoundTime(-1) {
55  if (isFile) {
56  XMLSubSys::runParser(*this, content);
57  } else {
58  setFileName("registrySettings");
59  SUMOSAXReader* reader = XMLSubSys::getSAXReader(*this);
60  reader->parseString(content);
61  delete reader;
62  }
63 }
64 
65 
67 }
68 
69 
70 void
72  const SUMOSAXAttributes& attrs) {
73  bool ok = true;
74  switch (element) {
76  std::string file = attrs.get<std::string>(SUMO_ATTR_VALUE, 0, ok);
78  }
79  break;
81  myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, 0, ok, "default");
82  std::transform(myViewType.begin(), myViewType.end(), myViewType.begin(), tolower);
83  break;
84  case SUMO_TAG_DELAY:
85  myDelay = attrs.getOpt<double>(SUMO_ATTR_VALUE, 0, ok, myDelay);
86  break;
87  case SUMO_TAG_VIEWPORT: {
88  const double x = attrs.getOpt<double>(SUMO_ATTR_X, 0, ok, myLookFrom.x());
89  const double y = attrs.getOpt<double>(SUMO_ATTR_Y, 0, ok, myLookFrom.y());
90  const double z = attrs.getOpt<double>(SUMO_ATTR_ZOOM, 0, ok, myLookFrom.z());
91  myLookFrom.set(x, y, z);
92  const double cx = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, myLookAt.x());
93  const double cy = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, myLookAt.y());
94  const double cz = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, myLookAt.z());
95  myLookAt.set(cx, cy, cz);
96  break;
97  }
98  case SUMO_TAG_SNAPSHOT: {
99  bool ok = true;
100  std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, 0, ok);
101  if (file != "" && !FileHelpers::isAbsolute(file)) {
103  }
104  mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)] = file;
105  }
106  break;
108  bool ok = true;
109  mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, 0, ok, mySettings.name);
112  }
113  }
114  break;
118  break;
120  bool ok = true;
121  mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", 0, true, ok);
125  }
126  break;
128  int laneEdgeMode = TplConvert::_2int(attrs.getStringSecure("laneEdgeMode", "0").c_str());
129  int laneEdgeScaleMode = TplConvert::_2int(attrs.getStringSecure("scaleMode", "0").c_str());
143  myCurrentColorer = element;
144  mySettings.edgeColorer.setActive(laneEdgeMode);
145  mySettings.edgeScaler.setActive(laneEdgeScaleMode);
146  mySettings.laneColorer.setActive(laneEdgeMode);
147  mySettings.laneScaler.setActive(laneEdgeScaleMode);
148  }
149  break;
151  myCurrentScheme = 0;
155  if (myCurrentScheme == 0) {
157  }
158  }
161  }
164  }
167  }
169  bool ok = true;
170  myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, 0, ok, false));
172  }
173  break;
175  myCurrentScheme = 0;
179  if (myCurrentScaleScheme == 0) {
181  }
182  }
184  bool ok = true;
187  }
188  break;
189 
190  case SUMO_TAG_ENTRY:
191  if (myCurrentScheme != 0) {
192  bool ok = true;
193  RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, 0, ok);
194  if (myCurrentScheme->isFixed()) {
196  } else {
197  myCurrentScheme->addColor(color, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
198  }
199  } else if (myCurrentScaleScheme != 0) {
200  bool ok = true;
201  double scale = attrs.get<double>(SUMO_ATTR_COLOR, 0, ok);
202  if (myCurrentScaleScheme->isFixed()) {
204  } else {
205  myCurrentScaleScheme->addColor(scale, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
206  }
207  }
208  break;
210  mySettings.vehicleColorer.setActive(TplConvert::_2int(attrs.getStringSecure("vehicleMode", "0").c_str()));
215  myCurrentColorer = element;
216  break;
218  mySettings.personColorer.setActive(TplConvert::_2int(attrs.getStringSecure("personMode", "0").c_str()));
222  myCurrentColorer = element;
223  break;
225  mySettings.containerColorer.setActive(TplConvert::_2int(attrs.getStringSecure("containerMode", "0").c_str()));
229  myCurrentColorer = element;
230  break;
232  mySettings.junctionColorer.setActive(TplConvert::_2int(attrs.getStringSecure("junctionMode", "0").c_str()));
240  "drawCrossingsAndWalkingareas", toString(mySettings.drawCrossingsAndWalkingareas)).c_str());
242  myCurrentColorer = element;
243  break;
248  break;
252  break;
256  break;
259  break;
262  d.filename = attrs.getStringSecure("filename", d.filename);
263  if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
265  }
266  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
267  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
268  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
269  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, 0, ok, d.width);
270  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
271  d.altitude = TplConvert::_2double(attrs.getStringSecure("altitude", toString(d.height)).c_str());
272  d.rot = TplConvert::_2double(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
273  d.tilt = TplConvert::_2double(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
274  d.roll = TplConvert::_2double(attrs.getStringSecure("roll", toString(d.roll)).c_str());
275  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, 0, ok, d.layer);
276  d.screenRelative = TplConvert::_2bool(attrs.getStringSecure("screenRelative", toString(d.screenRelative)).c_str());
277  d.initialised = false;
278  myDecals.push_back(d);
279  }
280  break;
283  d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, 0, ok, "0");
284  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
285  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
286  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
287  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, 0, ok, d.width);
288  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
289  d.altitude = TplConvert::_2double(attrs.getStringSecure("altitude", toString(d.height)).c_str());
290  d.rot = TplConvert::_2double(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
291  d.tilt = TplConvert::_2double(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
292  d.roll = TplConvert::_2double(attrs.getStringSecure("roll", toString(d.roll)).c_str());
293  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, 0, ok, d.layer);
294  d.initialised = false;
295  myDecals.push_back(d);
296  }
297  break;
299  const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
300  const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, 0, ok);
301  const double prob = attrs.get<double>(SUMO_ATTR_PROB, id.c_str(), ok);
302  myEventDistributions[id].add(cmd, prob);
303  }
304  break;
306  myJamSoundTime = attrs.get<double>(SUMO_ATTR_VALUE, 0, ok);
307  break;
308  default:
309  break;
310  }
311 }
312 
313 
316  const std::string& prefix, const SUMOSAXAttributes& attrs,
317  GUIVisualizationTextSettings defaults) {
318  bool ok = true;
320  TplConvert::_2bool(attrs.getStringSecure(prefix + "_show", toString(defaults.show)).c_str()),
321  TplConvert::_2double(attrs.getStringSecure(prefix + "_size", toString(defaults.size)).c_str()),
322  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "edges", 0, true, ok));
323 }
324 
325 
328  const std::string& prefix, const SUMOSAXAttributes& attrs,
329  GUIVisualizationSizeSettings defaults) {
331  TplConvert::_2double(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize)).c_str()),
332  TplConvert::_2double(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration)).c_str()),
333  TplConvert::_2bool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize)).c_str()));
334 }
335 
336 
337 std::string
339  if (mySettings.name != "") {
341  if (view) {
342  FXint index = view->getColoringSchemesCombo().appendItem(mySettings.name.c_str());
343  view->getColoringSchemesCombo().setCurrentItem(index);
345  }
346  }
347  return mySettings.name;
348 }
349 
350 
351 void
353  if (myLookFrom.z() > 0) {
354  // z value stores zoom so we must convert first
355  Position lookFrom(myLookFrom.x(), myLookFrom.y(), view->getChanger().zoom2ZPos(myLookFrom.z()));
356  view->setViewportFromTo(lookFrom, myLookAt);
357  }
358 }
359 
360 
361 void
363  if (!mySnapshots.empty()) {
364  view->setSnapshots(mySnapshots);
365  }
366 }
367 
368 
369 bool
371  return !myDecals.empty();
372 }
373 
374 
375 const std::vector<GUISUMOAbstractView::Decal>&
377  return myDecals;
378 }
379 
380 
381 double
383  return myDelay;
384 }
385 
386 
387 std::vector<SUMOTime>
388 GUISettingsHandler::loadBreakpoints(const std::string& file) {
389  std::vector<SUMOTime> result;
390  std::ifstream strm(file.c_str());
391  while (strm.good()) {
392  std::string val;
393  strm >> val;
394  if (val.length() == 0) {
395  continue;
396  }
397  try {
398  SUMOTime value = string2time(val);
399  result.push_back(value);
400  } catch (NumberFormatException&) {
401  WRITE_ERROR(" A breakpoint-value must be an int, is:" + val);
402  } catch (ProcessError&) {
403  WRITE_ERROR(" Could not decode breakpoint '" + val + "'");
404  } catch (EmptyData&) {}
405  }
406  return result;
407 }
408 
409 
413  if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
414  // unscaled probabilities are assumed, fill up with dummy event
415  result.add("", 1. - result.getOverallProb());
416  }
417  return result;
418 }
419 
420 
421 /****************************************************************************/
422 
GUIVisualizationSizeSettings junctionSize
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
GUIVisualizationTextSettings junctionName
A decal (an image) that can be shown.
GUIScaleScheme * myCurrentScaleScheme
The current scaling scheme.
double altitude
The altitude of the image (net coordinates in z-direction, in m)
GUISettingsHandler(const std::string &content, bool isFile=true)
Constructor.
GUICompleteSchemeStorage gSchemeStorage
bool showSizeLegend
Information whether the size legend shall be drawn.
static std::string getConfigurationRelative(const std::string &configPath, const std::string &path)
Returns the second path as a relative path to the first file.
Definition: FileHelpers.cpp:82
GUIVisualizationTextSettings streetName
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag.
bool showBlinker
Information whether vehicle blinkers shall be drawn.
double z() const
Returns the z-position.
Definition: Position.h:73
virtual void setViewportFromTo(const Position &lookFrom, const Position &lookAt)
applies the given viewport settings
GUIVisualizationTextSettings addName
int myCurrentColorer
The last color scheme category (edges or vehicles)
GUIVisualizationTextSettings personName
GUIColorScheme * myCurrentScheme
The current color scheme.
GUIVisualizationTextSettings poiName
static bool _2bool(const E *const data)
converts a 0-terminated char-type array into the boolean value described by it
Definition: TplConvert.h:371
static RGBColor parseColorReporting(const std::string &coldef, const std::string &objecttype, const char *objectid, bool report, bool &ok)
Parses a color information.
Definition: RGBColor.cpp:248
virtual double zoom2ZPos(double zoom) const =0
Returns the camera height at which the given zoom level is reached.
double exaggeration
The size exaggeration (upscale)
GUIColorer laneColorer
The lane colorer.
GUIColorer containerColorer
The container colorer.
A layer number.
GUIColorer edgeColorer
The mesoscopic edge colorer.
const std::string & getFileName() const
returns the current file name
double y() const
Returns the y-position.
Definition: Position.h:68
bool showRails
Information whether rails shall be drawn.
std::vector< GUISUMOAbstractView::Decal > myDecals
The decals list to fill.
GUIVisualizationTextSettings vehicleName
double x() const
Returns the x-position.
Definition: Position.h:63
double centerX
The center of the image in x-direction (net coordinates, in m)
SAX-reader encapsulation containing binary reader.
Definition: SUMOSAXReader.h:58
Position myLookAt
The point to look at, only needed for osg view.
bool screenRelative
Whether this image should be skipped in 2D-views.
T * getSchemeByName(std::string name)
bool showLaneDirection
Whether to show direction indicators for lanes.
GUIVisualizationTextSettings cwaEdgeName
bool laneShowBorders
Information whether lane borders shall be drawn.
void setSnapshots(std::map< SUMOTime, std::string > snaps)
Sets the snapshot time to file map.
static std::vector< SUMOTime > loadBreakpoints(const std::string &file)
loads breakpoints from the specified file
bool hasDecals() const
Returns whether any decals have been parsed.
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
void parseString(std::string content)
void set(double x, double y)
set positions x and y
Definition: Position.h:93
SAX-handler base for SUMO-files.
static bool runParser(GenericSAXHandler &handler, const std::string &file, const bool isNet=false)
Runs the given handler on the given file; returns if everything&#39;s ok.
Definition: XMLSubSys.cpp:110
bool dither
Information whether dithering shall be enabled.
double height
The height of the image (net coordinates in y-direction, in m)
double myDelay
The delay loaded.
double getDelay() const
Returns the parsed delay.
double layer
The layer of the image.
GUIVisualizationSettings mySettings
The settings to fill.
GUIVisualizationSizeSettings polySize
GUIColorer vehicleColorer
The vehicle colorer.
double roll
The roll of the image to the ground plane (in degrees)
RandomDistributor< std::string > getEventDistribution(const std::string &id)
GUIVisualizationTextSettings edgeName
GUIVisualizationSizeSettings addSize
std::map< SUMOTime, std::string > mySnapshots
mappig of time steps to filenames for potential snapshots
void setFileName(const std::string &name)
Sets the current file name.
int addColor(const T &color, const double threshold, const std::string &name="")
std::string name
The name of this setting.
double gridXSize
Information about the grid spacings.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:56
double minSize
The minimum size to draw this object.
Encapsulated SAX-Attributes.
T get(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is an int.
GUIVisualizationTextSettings internalEdgeName
static bool isAbsolute(const std::string &path)
Returns the information whether the given path is absolute.
Definition: FileHelpers.cpp:97
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
GUIVisualizationTextSettings parseTextSettings(const std::string &prefix, const SUMOSAXAttributes &attrs, GUIVisualizationTextSettings defaults)
parse attributes for textSettings
int addMode
The additional structures visualization scheme.
double rot
The rotation of the image in the ground plane (in degrees)
bool showSublanes
Whether to show sublane boundaries.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
GUIPerspectiveChanger & getChanger() const
get changer
FXComboBox & getColoringSchemesCombo()
get coloring schemes combo
static SUMOSAXReader * getSAXReader(SUMOSAXHandler &handler)
Builds a reader and assigns the handler to it.
Definition: XMLSubSys.cpp:98
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:47
bool initialised
Whether this image was initialised (inserted as a texture)
GUIVisualizationTextSettings drawLinkTLIndex
GUIColorer personColorer
The person colorer.
GUIVisualizationTextSettings internalJunctionName
double centerY
The center of the image in y-direction (net coordinates, in m)
GUIColorer junctionColorer
The junction colorer.
~GUISettingsHandler()
Destructor.
std::string filename
The path to the file the image is located at.
double laneMinSize
The minimum visual lane width for drawing.
GUIScaler edgeScaler
The mesoscopic edge scaler.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
std::string myViewType
The view type (osg, opengl, default) loaded.
int containerQuality
The quality of container drawing.
RGBColor backgroundColor
The background color to use.
bool antialiase
Information whether antialiase shall be enabled.
std::string addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
double width
The width of the image (net coordinates in x-direction, in m)
void setColor(const int pos, const T &color)
virtual bool setColorScheme(const std::string &)
set color scheme
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
GUIVisualizationSizeSettings poiSize
static int _2int(const E *const data)
converts a char-type array into the integer value described by it
Definition: TplConvert.h:149
trigger: the time of the step
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue, bool report=true) const
Tries to read given attribute assuming it is an int.
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
GUIVisualizationSizeSettings containerSize
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
SUMOTime getOptSUMOTimeReporting(int attr, const char *objectid, bool &ok, SUMOTime defaultValue, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
virtual std::string getStringSecure(int id, const std::string &def) const =0
Returns the string-value of the named (by its enum-value) attribute.
double centerZ
The center of the image in z-direction (net coordinates, in m)
static double _2double(const E *const data)
converts a char-type array into the double value described by it
Definition: TplConvert.h:297
GUIVisualizationSizeSettings personSize
int personQuality
The quality of person drawing.
bool showGrid
Information whether a grid shall be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
double getOverallProb() const
Return the sum of the probabilites assigned to the members.
double tilt
The tilt of the image to the ground plane (in degrees)
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
std::map< std::string, RandomDistributor< std::string > > myEventDistributions
The parsed event distributions.
GUIVisualizationSizeSettings vehicleSize
long long int SUMOTime
Definition: TraCIDefs.h:52
bool drawJunctionShape
whether the shape of the junction should be drawn
int vehicleQuality
The quality of vehicle drawing.
std::vector< SUMOTime > myBreakpoints
The parsed breakpoints.
bool add(T val, double prob, bool checkDuplicates=true)
Adds a value with an assigned probability to the distribution.
GUIScaler laneScaler
The lane scaler.
A color information.
GUIVisualizationTextSettings drawLinkJunctionIndex
GUIVisualizationSizeSettings parseSizeSettings(const std::string &prefix, const SUMOSAXAttributes &attrs, GUIVisualizationSizeSettings defaults)
parse attributes for sizeSettings
Position myLookFrom
The viewport loaded, zoom is stored in z coordinate.
void setInterpolated(const bool interpolate, double interpolationStart=0.f)
void add(const GUIVisualizationSettings &scheme)
Adds a visualization scheme.
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName