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, bool netedit) :
53  SUMOSAXHandler(content),
54  mySettings(netedit),
55  myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1),
56  myCurrentColorer(SUMO_TAG_NOTHING),
57  myCurrentScheme(0),
58  myJamSoundTime(-1) {
59  if (isFile) {
60  XMLSubSys::runParser(*this, content);
61  } else {
62  setFileName("registrySettings");
63  SUMOSAXReader* reader = XMLSubSys::getSAXReader(*this);
64  reader->parseString(content);
65  delete reader;
66  }
67 }
68 
69 
71 }
72 
73 
74 void
76  const SUMOSAXAttributes& attrs) {
77  bool ok = true;
78  switch (element) {
80  std::string file = attrs.get<std::string>(SUMO_ATTR_VALUE, 0, ok);
82  }
83  break;
85  myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, 0, ok, "default");
86  std::transform(myViewType.begin(), myViewType.end(), myViewType.begin(), tolower);
87  break;
88  case SUMO_TAG_DELAY:
89  myDelay = attrs.getOpt<double>(SUMO_ATTR_VALUE, 0, ok, myDelay);
90  break;
91  case SUMO_TAG_VIEWPORT: {
92  const double x = attrs.getOpt<double>(SUMO_ATTR_X, 0, ok, myLookFrom.x());
93  const double y = attrs.getOpt<double>(SUMO_ATTR_Y, 0, ok, myLookFrom.y());
94  const double z = attrs.getOpt<double>(SUMO_ATTR_ZOOM, 0, ok, myLookFrom.z());
95  myLookFrom.set(x, y, z);
96  const double cx = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, myLookAt.x());
97  const double cy = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, myLookAt.y());
98  const double cz = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, myLookAt.z());
99  myLookAt.set(cx, cy, cz);
100  break;
101  }
102  case SUMO_TAG_SNAPSHOT: {
103  bool ok = true;
104  std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, 0, ok);
105  if (file != "" && !FileHelpers::isAbsolute(file)) {
107  }
108  mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)].push_back(file);
109  }
110  break;
112  bool ok = true;
113  mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, 0, ok, mySettings.name);
116  }
117  }
118  break;
122  break;
124  bool ok = true;
125  mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", 0, true, ok);
129  }
130  break;
132  int laneEdgeMode = TplConvert::_2int(attrs.getStringSecure("laneEdgeMode", "0").c_str());
133  int laneEdgeScaleMode = TplConvert::_2int(attrs.getStringSecure("scaleMode", "0").c_str());
147  myCurrentColorer = element;
148  mySettings.edgeColorer.setActive(laneEdgeMode);
149  mySettings.edgeScaler.setActive(laneEdgeScaleMode);
150  mySettings.laneColorer.setActive(laneEdgeMode);
151  mySettings.laneScaler.setActive(laneEdgeScaleMode);
152  }
153  break;
155  myCurrentScheme = 0;
159  if (myCurrentScheme == 0) {
161  }
162  }
165  }
168  }
171  }
173  bool ok = true;
174  myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, 0, ok, false));
176  }
177  break;
179  myCurrentScheme = 0;
183  if (myCurrentScaleScheme == 0) {
185  }
186  }
188  bool ok = true;
191  }
192  break;
193 
194  case SUMO_TAG_ENTRY:
195  if (myCurrentScheme != 0) {
196  bool ok = true;
197  RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, 0, ok);
198  if (myCurrentScheme->isFixed()) {
200  } else {
201  myCurrentScheme->addColor(color, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
202  }
203  } else if (myCurrentScaleScheme != 0) {
204  bool ok = true;
205  double scale = attrs.get<double>(SUMO_ATTR_COLOR, 0, ok);
206  if (myCurrentScaleScheme->isFixed()) {
208  } else {
209  myCurrentScaleScheme->addColor(scale, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
210  }
211  }
212  break;
214  mySettings.vehicleColorer.setActive(TplConvert::_2int(attrs.getStringSecure("vehicleMode", "0").c_str()));
219  myCurrentColorer = element;
220  break;
222  mySettings.personColorer.setActive(TplConvert::_2int(attrs.getStringSecure("personMode", "0").c_str()));
226  myCurrentColorer = element;
227  break;
229  mySettings.containerColorer.setActive(TplConvert::_2int(attrs.getStringSecure("containerMode", "0").c_str()));
233  myCurrentColorer = element;
234  break;
236  mySettings.junctionColorer.setActive(TplConvert::_2int(attrs.getStringSecure("junctionMode", "0").c_str()));
244  "drawCrossingsAndWalkingareas", toString(mySettings.drawCrossingsAndWalkingareas)).c_str());
246  myCurrentColorer = element;
247  break;
252  break;
256  break;
260  break;
263  break;
266  d.filename = attrs.getStringSecure("filename", d.filename);
267  if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
269  }
270  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
271  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
272  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
273  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, 0, ok, d.width);
274  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
275  d.altitude = TplConvert::_2double(attrs.getStringSecure("altitude", toString(d.height)).c_str());
276  d.rot = TplConvert::_2double(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
277  d.tilt = TplConvert::_2double(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
278  d.roll = TplConvert::_2double(attrs.getStringSecure("roll", toString(d.roll)).c_str());
279  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, 0, ok, d.layer);
280  d.screenRelative = TplConvert::_2bool(attrs.getStringSecure("screenRelative", toString(d.screenRelative)).c_str());
281  d.initialised = false;
282  myDecals.push_back(d);
283  }
284  break;
287  d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, 0, ok, "0");
288  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
289  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
290  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
291  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, 0, ok, d.width);
292  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
293  d.altitude = TplConvert::_2double(attrs.getStringSecure("altitude", toString(d.height)).c_str());
294  d.rot = TplConvert::_2double(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
295  d.tilt = TplConvert::_2double(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
296  d.roll = TplConvert::_2double(attrs.getStringSecure("roll", toString(d.roll)).c_str());
297  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, 0, ok, d.layer);
298  d.initialised = false;
299  myDecals.push_back(d);
300  }
301  break;
303  const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
304  const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, 0, ok);
305  const double prob = attrs.get<double>(SUMO_ATTR_PROB, id.c_str(), ok);
306  myEventDistributions[id].add(cmd, prob);
307  }
308  break;
310  myJamSoundTime = attrs.get<double>(SUMO_ATTR_VALUE, 0, ok);
311  break;
312  default:
313  break;
314  }
315 }
316 
317 
320  const std::string& prefix, const SUMOSAXAttributes& attrs,
321  GUIVisualizationTextSettings defaults) {
322  bool ok = true;
324  TplConvert::_2bool(attrs.getStringSecure(prefix + "_show", toString(defaults.show)).c_str()),
325  TplConvert::_2double(attrs.getStringSecure(prefix + "_size", toString(defaults.size)).c_str()),
326  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "edges", 0, true, ok));
327 }
328 
329 
332  const std::string& prefix, const SUMOSAXAttributes& attrs,
333  GUIVisualizationSizeSettings defaults) {
335  TplConvert::_2double(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize)).c_str()),
336  TplConvert::_2double(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration)).c_str()),
337  TplConvert::_2bool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize)).c_str()));
338 }
339 
340 
341 std::string
343  if (mySettings.name != "") {
345  if (view) {
346  FXint index = view->getColoringSchemesCombo().appendItem(mySettings.name.c_str());
347  view->getColoringSchemesCombo().setCurrentItem(index);
349  }
350  }
351  return mySettings.name;
352 }
353 
354 
355 void
357  if (myLookFrom.z() > 0) {
358  // z value stores zoom so we must convert first
359  Position lookFrom(myLookFrom.x(), myLookFrom.y(), view->getChanger().zoom2ZPos(myLookFrom.z()));
360  view->setViewportFromTo(lookFrom, myLookAt);
361  }
362 }
363 
364 
365 void
367  if (!mySnapshots.empty()) {
368  for (auto item : mySnapshots) {
369  for (auto file : item.second) {
370  view->addSnapshot(item.first, file);
371  }
372  }
373  }
374 }
375 
376 
377 bool
379  return !myDecals.empty();
380 }
381 
382 
383 const std::vector<GUISUMOAbstractView::Decal>&
385  return myDecals;
386 }
387 
388 
389 double
391  return myDelay;
392 }
393 
394 
395 std::vector<SUMOTime>
396 GUISettingsHandler::loadBreakpoints(const std::string& file) {
397  std::vector<SUMOTime> result;
398  std::ifstream strm(file.c_str());
399  while (strm.good()) {
400  std::string val;
401  strm >> val;
402  if (val.length() == 0) {
403  continue;
404  }
405  try {
406  SUMOTime value = string2time(val);
407  result.push_back(value);
408  } catch (NumberFormatException&) {
409  WRITE_ERROR(" A breakpoint-value must be an int, is:" + val);
410  } catch (ProcessError&) {
411  WRITE_ERROR(" Could not decode breakpoint '" + val + "'");
412  } catch (EmptyData&) {}
413  }
414  return result;
415 }
416 
417 
421  if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
422  // unscaled probabilities are assumed, fill up with dummy event
423  result.add("", 1. - result.getOverallProb());
424  }
425  return result;
426 }
427 
428 
429 /****************************************************************************/
430 
GUIVisualizationSizeSettings junctionSize
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)
double z() const
Returns the z-position.
Definition: Position.h:73
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.
std::string addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
bool showBlinker
Information whether vehicle blinkers shall be drawn.
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:389
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:260
double exaggeration
The size exaggeration (upscale)
GUIColorer laneColorer
The lane colorer.
GUIColorer containerColorer
The container colorer.
A layer number.
double x() const
Returns the x-position.
Definition: Position.h:63
GUIColorer edgeColorer
The mesoscopic edge colorer.
bool showRails
Information whether rails shall be drawn.
std::vector< GUISUMOAbstractView::Decal > myDecals
The decals list to fill.
void addSnapshot(SUMOTime time, const std::string &file)
Sets the snapshot time to file map.
GUIVisualizationTextSettings vehicleName
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 hasDecals() const
Returns whether any decals have been parsed.
double getOverallProb() const
Return the sum of the probabilites assigned to the members.
bool showLaneDirection
Whether to show direction indicators for lanes.
GUIVisualizationTextSettings cwaEdgeName
bool laneShowBorders
Information whether lane borders shall be drawn.
static std::vector< SUMOTime > loadBreakpoints(const std::string &file)
loads breakpoints from the specified file
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.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
double layer
The layer of the image.
GUIVisualizationSettings mySettings
The settings to fill.
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.
GUIVisualizationSizeSettings polySize
GUIColorer vehicleColorer
The vehicle colorer.
virtual std::string getStringSecure(int id, const std::string &def) const =0
Returns the string-value of the named (by its enum-value) attribute.
bool isFixed() const
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
GUISettingsHandler(const std::string &content, bool isFile=true, bool netedit=false)
Constructor.
const std::string & getFileName() const
returns the current file name
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
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
double minSize
The minimum size to draw this object.
Encapsulated SAX-Attributes.
virtual double zoom2ZPos(double zoom) const =0
Returns the camera height at which the given zoom level is reached.
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
double getDelay() const
Returns the parsed delay.
GUIVisualizationTextSettings parseTextSettings(const std::string &prefix, const SUMOSAXAttributes &attrs, GUIVisualizationTextSettings defaults)
parse attributes for textSettings
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
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.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
double y() const
Returns the y-position.
Definition: Position.h:68
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
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.
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.
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:156
trigger: the time of the step
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
GUIVisualizationSizeSettings containerSize
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:312
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 tilt
The tilt of the image to the ground plane (in degrees)
GUIPerspectiveChanger & getChanger() const
get changer
std::map< SUMOTime, std::vector< std::string > > mySnapshots
mappig of time steps to filenames for potential snapshots
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
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.
int vehicleQuality
The quality of vehicle drawing.
T get(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is an int.
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