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-2015 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>
44 #include <utils/xml/XMLSubSys.h>
45 #include "GUISettingsHandler.h"
46 
47 #ifdef CHECK_MEMORY_LEAKS
48 #include <foreign/nvwa/debug_new.h>
49 #endif // CHECK_MEMORY_LEAKS
50 
51 
52 // ===========================================================================
53 // method definitions
54 // ===========================================================================
55 GUISettingsHandler::GUISettingsHandler(const std::string& content, bool isFile)
56  : SUMOSAXHandler(content), myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1),
57  myCurrentColorer(SUMO_TAG_NOTHING), myCurrentScheme(0), myJamSoundTime(-1) {
58  if (isFile) {
59  XMLSubSys::runParser(*this, content);
60  } else {
61  setFileName("registrySettings");
62  SUMOSAXReader* reader = XMLSubSys::getSAXReader(*this);
63  reader->parseString(content);
64  delete reader;
65  }
66 }
67 
68 
70 }
71 
72 
73 void
75  const SUMOSAXAttributes& attrs) {
76  bool ok = true;
77  switch (element) {
79  std::string file = attrs.get<std::string>(SUMO_ATTR_VALUE, 0, ok);
81  }
82  break;
84  myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, 0, ok, "default");
85  std::transform(myViewType.begin(), myViewType.end(), myViewType.begin(), tolower);
86  break;
87  case SUMO_TAG_DELAY:
88  myDelay = attrs.getOpt<SUMOReal>(SUMO_ATTR_VALUE, 0, ok, myDelay);
89  break;
90  case SUMO_TAG_VIEWPORT: {
91  const SUMOReal x = attrs.getOpt<SUMOReal>(SUMO_ATTR_X, 0, ok, myLookFrom.x());
92  const SUMOReal y = attrs.getOpt<SUMOReal>(SUMO_ATTR_Y, 0, ok, myLookFrom.y());
93  const SUMOReal z = attrs.getOpt<SUMOReal>(SUMO_ATTR_ZOOM, 0, ok, myLookFrom.z());
94  myLookFrom.set(x, y, z);
95  const SUMOReal cx = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_X, 0, ok, myLookAt.x());
96  const SUMOReal cy = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Y, 0, ok, myLookAt.y());
97  const SUMOReal cz = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Z, 0, ok, myLookAt.z());
98  myLookAt.set(cx, cy, cz);
99  break;
100  }
101  case SUMO_TAG_SNAPSHOT: {
102  bool ok = true;
103  std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, 0, ok);
104  if (file != "" && !FileHelpers::isAbsolute(file)) {
106  }
107  mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)] = file;
108  }
109  break;
111  bool ok = true;
112  mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, 0, ok, mySettings.name);
115  }
116  }
117  break;
121  break;
123  bool ok = true;
124  mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", 0, true, ok);
128  }
129  break;
131  int laneEdgeMode = TplConvert::_2int(attrs.getStringSecure("laneEdgeMode", "0").c_str());
132  int laneEdgeScaleMode = TplConvert::_2int(attrs.getStringSecure("scaleMode", "0").c_str());
142  myCurrentColorer = element;
143 #ifdef HAVE_INTERNAL
144  mySettings.edgeColorer.setActive(laneEdgeMode);
145  mySettings.edgeScaler.setActive(laneEdgeScaleMode);
146 #endif
147  mySettings.laneColorer.setActive(laneEdgeMode);
148  mySettings.laneScaler.setActive(laneEdgeScaleMode);
149  }
150  break;
152  myCurrentScheme = 0;
156 #ifdef HAVE_INTERNAL
157  if (myCurrentScheme == 0) {
158  myCurrentScheme = mySettings.edgeColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
159  }
160 #endif
161  }
164  }
167  }
170  }
172  bool ok = true;
173  myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, 0, ok, false));
175  }
176  break;
178  myCurrentScheme = 0;
182 #ifdef HAVE_INTERNAL
183  if (myCurrentScaleScheme == 0) {
184  myCurrentScaleScheme = mySettings.edgeScaler.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
185  }
186 #endif
187  }
189  bool ok = true;
192  }
193  break;
194 
195  case SUMO_TAG_ENTRY:
196  if (myCurrentScheme != 0) {
197  bool ok = true;
198  RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, 0, ok);
199  if (myCurrentScheme->isFixed()) {
201  } else {
202  myCurrentScheme->addColor(color, attrs.getOpt<SUMOReal>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
203  }
204  } else if (myCurrentScaleScheme != 0) {
205  bool ok = true;
206  SUMOReal scale = attrs.get<SUMOReal>(SUMO_ATTR_COLOR, 0, ok);
207  if (myCurrentScaleScheme->isFixed()) {
209  } else {
211  }
212  }
213  break;
215  mySettings.vehicleColorer.setActive(TplConvert::_2int(attrs.getStringSecure("vehicleMode", "0").c_str()));
220  myCurrentColorer = element;
221  break;
223  mySettings.personColorer.setActive(TplConvert::_2int(attrs.getStringSecure("personMode", "0").c_str()));
227  myCurrentColorer = element;
228  break;
230  mySettings.containerColorer.setActive(TplConvert::_2int(attrs.getStringSecure("containerMode", "0").c_str()));
234  myCurrentColorer = element;
235  break;
237  mySettings.junctionColorer.setActive(TplConvert::_2int(attrs.getStringSecure("junctionMode", "0").c_str()));
244  myCurrentColorer = element;
245  break;
250  break;
254  break;
258  break;
261  break;
264  d.filename = attrs.getStringSecure("filename", d.filename);
265  if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
267  }
268  d.centerX = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
269  d.centerY = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
270  d.centerZ = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
271  d.width = attrs.getOpt<SUMOReal>(SUMO_ATTR_WIDTH, 0, ok, d.width);
272  d.height = attrs.getOpt<SUMOReal>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
273  d.altitude = TplConvert::_2SUMOReal(attrs.getStringSecure("altitude", toString(d.height)).c_str());
274  d.rot = TplConvert::_2SUMOReal(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
275  d.tilt = TplConvert::_2SUMOReal(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
276  d.roll = TplConvert::_2SUMOReal(attrs.getStringSecure("roll", toString(d.roll)).c_str());
277  d.layer = attrs.getOpt<SUMOReal>(SUMO_ATTR_LAYER, 0, ok, d.layer);
278  d.initialised = false;
279  myDecals.push_back(d);
280  }
281  break;
284  d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, 0, ok, "0");
285  d.centerX = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
286  d.centerY = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
287  d.centerZ = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
288  d.width = attrs.getOpt<SUMOReal>(SUMO_ATTR_WIDTH, 0, ok, d.width);
289  d.height = attrs.getOpt<SUMOReal>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
290  d.altitude = TplConvert::_2SUMOReal(attrs.getStringSecure("altitude", toString(d.height)).c_str());
291  d.rot = TplConvert::_2SUMOReal(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
292  d.tilt = TplConvert::_2SUMOReal(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
293  d.roll = TplConvert::_2SUMOReal(attrs.getStringSecure("roll", toString(d.roll)).c_str());
294  d.layer = attrs.getOpt<SUMOReal>(SUMO_ATTR_LAYER, 0, ok, d.layer);
295  d.initialised = false;
296  myDecals.push_back(d);
297  }
298  break;
300  const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
301  const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, 0, ok);
302  const SUMOReal prob = attrs.get<SUMOReal>(SUMO_ATTR_PROB, id.c_str(), ok);
303  myEventDistributions[id].add(prob, cmd);
304  }
305  break;
307  myJamSoundTime = attrs.get<SUMOReal>(SUMO_ATTR_VALUE, 0, ok);
308  break;
309  default:
310  break;
311  }
312 }
313 
314 
317  const std::string& prefix, const SUMOSAXAttributes& attrs,
318  GUIVisualizationTextSettings defaults) {
319  bool ok = true;
321  TplConvert::_2bool(attrs.getStringSecure(prefix + "_show", toString(defaults.show)).c_str()),
322  TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_size", toString(defaults.size)).c_str()),
323  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "edges", 0, true, ok));
324 }
325 
326 
329  const std::string& prefix, const SUMOSAXAttributes& attrs,
330  GUIVisualizationSizeSettings defaults) {
332  TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize)).c_str()),
333  TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration)).c_str()),
334  TplConvert::_2bool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize)).c_str()));
335 }
336 
337 
338 std::string
340  if (mySettings.name != "") {
342  if (view) {
343  FXint index = view->getColoringSchemesCombo().appendItem(mySettings.name.c_str());
344  view->getColoringSchemesCombo().setCurrentItem(index);
346  }
347  }
348  return mySettings.name;
349 }
350 
351 
352 void
354  if (myLookFrom.z() > 0) {
356  }
357 }
358 
359 
360 void
362  lookFrom = myLookFrom;
363  lookAt = myLookAt;
364 }
365 
366 
367 void
369  if (!mySnapshots.empty()) {
370  view->setSnapshots(mySnapshots);
371  }
372 }
373 
374 
375 bool
377  return !myDecals.empty();
378 }
379 
380 
381 const std::vector<GUISUMOAbstractView::Decal>&
383  return myDecals;
384 }
385 
386 
387 SUMOReal
389  return myDelay;
390 }
391 
392 
393 std::vector<SUMOTime>
394 GUISettingsHandler::loadBreakpoints(const std::string& file) {
395  std::vector<SUMOTime> result;
396  std::ifstream strm(file.c_str());
397  while (strm.good()) {
398  std::string val;
399  strm >> val;
400  if (val.length() == 0) {
401  continue;
402  }
403  try {
404  SUMOTime value = string2time(val);
405  result.push_back(value);
406  } catch (NumberFormatException&) {
407  WRITE_ERROR(" A breakpoint-value must be an int, is:" + val);
408  } catch (ProcessError&) {
409  WRITE_ERROR(" Could not decode breakpoint '" + val + "'");
410  } catch (EmptyData&) {}
411  }
412  return result;
413 }
414 
415 
419  if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
420  // unscaled probabilities are assumed, fill up with dummy event
421  result.add(1 - result.getOverallProb(), "");
422  }
423  return result;
424 }
425 
426 
427 /****************************************************************************/
428 
GUIVisualizationTextSettings junctionName
A decal (an image) that can be shown.
GUIScaleScheme * myCurrentScaleScheme
The current scaling scheme.
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:86
GUIVisualizationTextSettings streetName
float laneWidthExaggeration
The lane exaggeration (upscale thickness)
SUMOReal roll
The roll of the image to the ground plane (in degrees)
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.
virtual void setViewport(const Position &lookFrom, const Position &lookAt)
applies the given viewport settings
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings addName
int myCurrentColorer
The last color scheme category (edges or vehicles)
GUIVisualizationTextSettings personName
GUIColorScheme * myCurrentScheme
The current color scheme.
bool drawLinkTLIndex
Information whether a link's tls index shall be drawn.
static SUMOReal _2SUMOReal(const E *const data)
Definition: TplConvert.h:223
GUIVisualizationTextSettings poiName
static bool _2bool(const E *const data)
Definition: TplConvert.h:282
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:252
GUIColorer laneColorer
The lane colorer.
GUIColorer containerColorer
The container colorer.
bool add(SUMOReal prob, T val, bool checkDuplicates=true)
Adds a value with an assigned probability to the distribution.
A layer number.
void setColor(const size_t pos, const T &color)
bool showRails
Information whether rails shall be drawn.
std::vector< GUISUMOAbstractView::Decal > myDecals
The decals list to fill.
GUIVisualizationTextSettings vehicleName
SAX-reader encapsulation containing binary reader.
Definition: SUMOSAXReader.h:58
Position myLookAt
The point to look at, only needed for osg view.
SUMOReal myDelay
The delay loaded.
T * getSchemeByName(std::string name)
bool hasDecals() const
Returns whether any decals have been parsed.
GUIVisualizationTextSettings cwaEdgeName
bool laneShowBorders
Information whether lane borders shall be drawn.
SUMOReal centerZ
The center of the image in z-direction (net coordinates, in m)
void setSnapshots(std::map< SUMOTime, std::string > snaps)
Sets the snapshot time to file map.
SUMOReal width
The width of the image (net coordinates in x-direction, in m)
static std::vector< SUMOTime > loadBreakpoints(const std::string &file)
loads breakpoints from the specified file
void parseString(std::string content)
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's ok.
Definition: XMLSubSys.cpp:114
SUMOReal x() const
Returns the x-position.
Definition: Position.h:63
bool dither
Information whether dithering shall be enabled.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
void setViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
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.
SUMOReal getDelay() const
Returns the parsed delay.
bool isFixed() const
RandomDistributor< std::string > getEventDistribution(const std::string &id)
GUIVisualizationTextSettings edgeName
void setInterpolated(const bool interpolate, SUMOReal interpolationStart=0.f)
GUIVisualizationSizeSettings addSize
std::map< SUMOTime, std::string > mySnapshots
mappig of time steps to filenames for potential snapshots
const std::string & getFileName() const
returns the current file name
void setFileName(const std::string &name)
Sets the current file name.
std::string name
The name of this setting.
SUMOReal altitude
The altitude of the image (net coordinates in z-direction, in m)
Encapsulated SAX-Attributes.
GUIVisualizationTextSettings internalEdgeName
static bool isAbsolute(const std::string &path)
Returns the information whether the given path is absolute.
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
SUMOReal centerY
The center of the image in y-direction (net coordinates, in m)
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.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
SUMOReal z() const
Returns the z-position.
Definition: Position.h:73
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
FXComboBox & getColoringSchemesCombo()
static SUMOSAXReader * getSAXReader(SUMOSAXHandler &handler)
Builds a reader and assigns the handler to it.
Definition: XMLSubSys.cpp:102
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:48
bool initialised
Whether this image was initialised (inserted as a texture)
GUIColorer personColorer
The person colorer.
GUIVisualizationTextSettings internalJunctionName
float minSize
The minimum size to draw this object.
GUIColorer junctionColorer
The junction colorer.
~GUISettingsHandler()
Destructor.
std::string filename
The path to the file the image is located at.
SUMOReal gridXSize
Information about the grid spacings.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
Definition: ToString.h:53
unsigned int addColor(const T &color, const SUMOReal threshold, const std::string &name="")
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.
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:205
SUMOReal height
The height of the image (net coordinates in y-direction, in m)
GUIVisualizationSizeSettings poiSize
SUMOReal getOverallProb() const
Return the sum of the probabilites assigned to the members.
SUMOReal centerX
The center of the image in x-direction (net coordinates, in m)
static int _2int(const E *const data)
Definition: TplConvert.h:114
float exaggeration
The size exaggeration (upscale)
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
GUIVisualizationSizeSettings containerSize
SUMOReal y() const
Returns the y-position.
Definition: Position.h:68
virtual std::string getStringSecure(int id, const std::string &def) const =0
Returns the string-value of the named (by its enum-value) attribute.
void set(SUMOReal x, SUMOReal y)
Definition: Position.h:78
bool drawLinkJunctionIndex
Information whether a link's junction index shall be drawn.
GUIVisualizationSizeSettings personSize
int SUMOTime
Definition: SUMOTime.h:43
virtual bool setColorScheme(const std::string &)
int personQuality
The quality of person drawing.
bool showGrid
Information whether a grid shall be shown.
SUMOReal layer
The layer of the image.
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
std::map< std::string, RandomDistributor< std::string > > myEventDistributions
The parsed event distributions.
#define SUMOReal
Definition: config.h:218
GUIVisualizationSizeSettings vehicleSize
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.
SUMOReal tilt
The tilt of the image to the ground plane (in degrees)
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.
GUIScaler laneScaler
The lane scaler.
A color information.
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.
SUMOReal rot
The rotation of the image in the ground plane (in degrees)
void add(const GUIVisualizationSettings &scheme)
Adds a visualization scheme.
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName