SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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-sim.org/
13 // Copyright (C) 2001-2014 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());
140  myCurrentColorer = element;
141 #ifdef HAVE_INTERNAL
142  mySettings.edgeColorer.setActive(laneEdgeMode);
143 #endif
144  mySettings.laneColorer.setActive(laneEdgeMode);
145  }
146  break;
148  myCurrentScheme = 0;
151 #ifdef HAVE_INTERNAL
152  if (myCurrentScheme == 0) {
153  myCurrentScheme = mySettings.edgeColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
154  }
155 #endif
156  }
159  }
162  }
164  bool ok = true;
165  myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, 0, ok, false));
167  }
168  break;
169  case SUMO_TAG_ENTRY:
170  if (myCurrentScheme) {
171  bool ok = true;
172  RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, 0, ok);
173  if (myCurrentScheme->isFixed()) {
175  } else {
176  myCurrentScheme->addColor(color, attrs.getOpt<SUMOReal>(SUMO_ATTR_THRESHOLD, 0, ok, 0));
177  }
178  }
179  break;
181  mySettings.vehicleColorer.setActive(TplConvert::_2int(attrs.getStringSecure("vehicleMode", "0").c_str()));
187  myCurrentColorer = element;
188  break;
190  mySettings.personColorer.setActive(TplConvert::_2int(attrs.getStringSecure("personMode", "0").c_str()));
195  myCurrentColorer = element;
196  break;
198  mySettings.junctionColorer.setActive(TplConvert::_2int(attrs.getStringSecure("junctionMode", "0").c_str()));
205  myCurrentColorer = element;
206  break;
212  break;
217  break;
222  break;
225  break;
228  d.filename = attrs.getStringSecure("filename", d.filename);
229  if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
231  }
232  d.centerX = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
233  d.centerY = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
234  d.centerZ = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
235  d.width = attrs.getOpt<SUMOReal>(SUMO_ATTR_WIDTH, 0, ok, d.width);
236  d.height = attrs.getOpt<SUMOReal>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
237  d.altitude = TplConvert::_2SUMOReal(attrs.getStringSecure("altitude", toString(d.height)).c_str());
238  d.rot = TplConvert::_2SUMOReal(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
239  d.tilt = TplConvert::_2SUMOReal(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
240  d.roll = TplConvert::_2SUMOReal(attrs.getStringSecure("roll", toString(d.roll)).c_str());
241  d.layer = attrs.getOpt<SUMOReal>(SUMO_ATTR_LAYER, 0, ok, d.layer);
242  d.initialised = false;
243  myDecals.push_back(d);
244  }
245  break;
248  d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, 0, ok, "0");
249  d.centerX = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_X, 0, ok, d.centerX);
250  d.centerY = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Y, 0, ok, d.centerY);
251  d.centerZ = attrs.getOpt<SUMOReal>(SUMO_ATTR_CENTER_Z, 0, ok, d.centerZ);
252  d.width = attrs.getOpt<SUMOReal>(SUMO_ATTR_WIDTH, 0, ok, d.width);
253  d.height = attrs.getOpt<SUMOReal>(SUMO_ATTR_HEIGHT, 0, ok, d.height);
254  d.altitude = TplConvert::_2SUMOReal(attrs.getStringSecure("altitude", toString(d.height)).c_str());
255  d.rot = TplConvert::_2SUMOReal(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
256  d.tilt = TplConvert::_2SUMOReal(attrs.getStringSecure("tilt", toString(d.tilt)).c_str());
257  d.roll = TplConvert::_2SUMOReal(attrs.getStringSecure("roll", toString(d.roll)).c_str());
258  d.layer = attrs.getOpt<SUMOReal>(SUMO_ATTR_LAYER, 0, ok, d.layer);
259  d.initialised = false;
260  myDecals.push_back(d);
261  }
262  break;
264  const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
265  const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, 0, ok);
266  const SUMOReal prob = attrs.get<SUMOReal>(SUMO_ATTR_PROB, id.c_str(), ok);
267  myEventDistributions[id].add(prob, cmd);
268  }
269  break;
271  myJamSoundTime = attrs.get<SUMOReal>(SUMO_ATTR_VALUE, 0, ok);
272  break;
273  default:
274  break;
275  }
276 }
277 
278 
281  const std::string& prefix, const SUMOSAXAttributes& attrs,
282  GUIVisualizationTextSettings defaults) {
283  bool ok = true;
285  TplConvert::_2bool(attrs.getStringSecure(prefix + "_show", toString(defaults.show)).c_str()),
286  TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_size", toString(defaults.size)).c_str()),
287  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "edges", 0, true, ok));
288 }
289 
290 
291 std::string
293  if (mySettings.name != "") {
295  if (view) {
296  FXint index = view->getColoringSchemesCombo().appendItem(mySettings.name.c_str());
297  view->getColoringSchemesCombo().setCurrentItem(index);
299  }
300  }
301  return mySettings.name;
302 }
303 
304 
305 void
307  if (myLookFrom.z() > 0) {
309  }
310 }
311 
312 
313 void
315  lookFrom = myLookFrom;
316  lookAt = myLookAt;
317 }
318 
319 
320 void
322  if (!mySnapshots.empty()) {
323  view->setSnapshots(mySnapshots);
324  }
325 }
326 
327 
328 bool
330  return !myDecals.empty();
331 }
332 
333 
334 const std::vector<GUISUMOAbstractView::Decal>&
336  return myDecals;
337 }
338 
339 
340 SUMOReal
342  return myDelay;
343 }
344 
345 
346 std::vector<SUMOTime>
347 GUISettingsHandler::loadBreakpoints(const std::string& file) {
348  std::vector<SUMOTime> result;
349  std::ifstream strm(file.c_str());
350  while (strm.good()) {
351  std::string val;
352  strm >> val;
353  if (val.length() == 0) {
354  continue;
355  }
356  try {
357  SUMOTime value = string2time(val);
358  result.push_back(value);
359  } catch (NumberFormatException&) {
360  WRITE_ERROR(" A breakpoint-value must be an int, is:" + val);
361  } catch (ProcessError&) {
362  WRITE_ERROR(" Could not decode breakpoint '" + val + "'");
363  } catch (EmptyData&) {}
364  }
365  return result;
366 }
367 
368 
372  if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
373  // unscaled probabilities are assumed, fill up with dummy event
374  result.add(1 - result.getOverallProb(), "");
375  }
376  return result;
377 }
378 
379 
380 /****************************************************************************/
381