Eclipse SUMO - Simulation of Urban MObility
GUISettingsHandler.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // The dialog to change the view (gui) settings.
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
27 #include <vector>
29 #include <utils/common/ToString.h>
30 #include <utils/common/RGBColor.h>
38 #include <utils/xml/XMLSubSys.h>
39 #include "GUISettingsHandler.h"
40 
41 
42 // ===========================================================================
43 // method definitions
44 // ===========================================================================
45 GUISettingsHandler::GUISettingsHandler(const std::string& content, bool isFile, bool netedit) :
46  SUMOSAXHandler(content),
47  mySettings(netedit),
48  myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1),
49  myRotation(0),
50  myCurrentColorer(SUMO_TAG_NOTHING),
51  myCurrentScheme(nullptr),
52  myJamSoundTime(-1) {
53  if (isFile) {
54  XMLSubSys::runParser(*this, content);
55  } else {
56  setFileName("registrySettings");
57  SUMOSAXReader* reader = XMLSubSys::getSAXReader(*this);
58  reader->parseString(content);
59  delete reader;
60  }
61 }
62 
63 
65 }
66 
67 
68 void
70  const SUMOSAXAttributes& attrs) {
71  bool ok = true;
72  switch (element) {
74  std::string file = attrs.get<std::string>(SUMO_ATTR_VALUE, nullptr, ok);
76  }
77  break;
79  myBreakpoints.push_back(attrs.getSUMOTimeReporting(SUMO_ATTR_VALUE, nullptr, ok));
80  break;
82  myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, nullptr, ok, "default");
83  std::transform(myViewType.begin(), myViewType.end(), myViewType.begin(), tolower);
84  break;
85  case SUMO_TAG_DELAY:
86  myDelay = attrs.getOpt<double>(SUMO_ATTR_VALUE, nullptr, ok, myDelay);
87  break;
88  case SUMO_TAG_VIEWPORT: {
89  const double x = attrs.getOpt<double>(SUMO_ATTR_X, nullptr, ok, myLookFrom.x());
90  const double y = attrs.getOpt<double>(SUMO_ATTR_Y, nullptr, ok, myLookFrom.y());
91  const double z = attrs.getOpt<double>(SUMO_ATTR_ZOOM, nullptr, ok, myLookFrom.z());
92  myLookFrom.set(x, y, z);
93  const double cx = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, myLookAt.x());
94  const double cy = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, myLookAt.y());
95  const double cz = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, myLookAt.z());
96  myLookAt.set(cx, cy, cz);
97  myRotation = attrs.getOpt<double>(SUMO_ATTR_ANGLE, nullptr, ok, myRotation);
98  break;
99  }
100  case SUMO_TAG_SNAPSHOT: {
101  bool ok = true;
102  std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, nullptr, ok);
103  if (file != "" && !FileHelpers::isAbsolute(file)) {
105  }
106  mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)].push_back(file);
107  }
108  break;
110  bool ok = true;
111  mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, nullptr, ok, mySettings.name);
114  }
115  }
116  break;
122  break;
124  bool ok = true;
125  mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", nullptr, true, ok);
129  }
130  break;
132  int laneEdgeMode = StringUtils::toInt(attrs.getStringSecure("laneEdgeMode", "0"));
133  int laneEdgeScaleMode = StringUtils::toInt(attrs.getStringSecure("scaleMode", "0"));
153  myCurrentColorer = element;
154  mySettings.edgeColorer.setActive(laneEdgeMode);
155  mySettings.edgeScaler.setActive(laneEdgeScaleMode);
156  mySettings.laneColorer.setActive(laneEdgeMode);
157  mySettings.laneScaler.setActive(laneEdgeScaleMode);
158  }
159  break;
161  myCurrentScheme = nullptr;
162  myCurrentScaleScheme = nullptr;
165  if (myCurrentScheme == nullptr) {
167  }
168  }
171  }
174  }
177  }
180  }
183  }
185  bool ok = true;
186  myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, nullptr, ok, false));
188  }
189  break;
191  myCurrentScheme = nullptr;
192  myCurrentScaleScheme = nullptr;
195  if (myCurrentScaleScheme == nullptr) {
197  }
198  }
200  bool ok = true;
201  myCurrentScaleScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, nullptr, ok, false));
203  }
204  break;
205 
206  case SUMO_TAG_ENTRY:
207  if (myCurrentScheme != nullptr) {
208  bool ok = true;
209  RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, nullptr, ok);
210  if (myCurrentScheme->isFixed()) {
212  } else {
213  myCurrentScheme->addColor(color, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, nullptr, ok, 0));
214  }
215  } else if (myCurrentScaleScheme != nullptr) {
216  bool ok = true;
217  double scale = attrs.get<double>(SUMO_ATTR_COLOR, nullptr, ok);
218  if (myCurrentScaleScheme->isFixed()) {
220  } else {
221  myCurrentScaleScheme->addColor(scale, attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, nullptr, ok, 0));
222  }
223  }
224  break;
234  myCurrentColorer = element;
235  break;
242  myCurrentColorer = element;
243  break;
249  myCurrentColorer = element;
250  break;
261  "drawCrossingsAndWalkingareas", toString(mySettings.drawCrossingsAndWalkingareas)));
263  myCurrentColorer = element;
264  break;
270  break;
276  myCurrentColorer = element;
277  break;
283  myCurrentColorer = element;
284  break;
288  break;
291  d.filename = attrs.getStringSecure("filename", d.filename);
292  if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
294  }
295  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, d.centerX);
296  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, d.centerY);
297  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, d.centerZ);
298  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, nullptr, ok, d.width);
299  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, nullptr, ok, d.height);
300  d.altitude = StringUtils::toDouble(attrs.getStringSecure("altitude", toString(d.height)));
301  d.rot = StringUtils::toDouble(attrs.getStringSecure("rotation", toString(d.rot)));
302  d.tilt = StringUtils::toDouble(attrs.getStringSecure("tilt", toString(d.tilt)));
303  d.roll = StringUtils::toDouble(attrs.getStringSecure("roll", toString(d.roll)));
304  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, nullptr, ok, d.layer);
306  d.initialised = false;
307  myDecals.push_back(d);
308  }
309  break;
312  d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, nullptr, ok, "0");
313  d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, d.centerX);
314  d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, d.centerY);
315  d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, d.centerZ);
316  d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, nullptr, ok, d.width);
317  d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, nullptr, ok, d.height);
318  d.altitude = StringUtils::toDouble(attrs.getStringSecure("altitude", toString(d.height)));
319  d.rot = StringUtils::toDouble(attrs.getStringSecure("rotation", toString(d.rot)));
320  d.tilt = StringUtils::toDouble(attrs.getStringSecure("tilt", toString(d.tilt)));
321  d.roll = StringUtils::toDouble(attrs.getStringSecure("roll", toString(d.roll)));
322  d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, nullptr, ok, d.layer);
323  d.initialised = false;
324  myDecals.push_back(d);
325  }
326  break;
328  const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, nullptr, ok);
329  const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, nullptr, ok);
330  const double prob = attrs.get<double>(SUMO_ATTR_PROB, id.c_str(), ok);
331  myEventDistributions[id].add(cmd, prob);
332  }
333  break;
335  myJamSoundTime = attrs.get<double>(SUMO_ATTR_VALUE, nullptr, ok);
336  break;
337  default:
338  break;
339  }
340 }
341 
342 
345  const std::string& prefix, const SUMOSAXAttributes& attrs,
346  GUIVisualizationTextSettings defaults) {
347  bool ok = true;
349  StringUtils::toBool(attrs.getStringSecure(prefix + "_show", toString(defaults.show))),
350  StringUtils::toDouble(attrs.getStringSecure(prefix + "_size", toString(defaults.size))),
351  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "textSettings", nullptr, true, ok),
352  RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_bgColor", toString(defaults.bgColor)), "textSettings", nullptr, true, ok),
353  StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constSize))));
354 }
355 
356 
359  const std::string& prefix, const SUMOSAXAttributes& attrs,
360  GUIVisualizationSizeSettings defaults) {
362  StringUtils::toDouble(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize))),
363  StringUtils::toDouble(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration))),
364  StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize))),
365  StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSizeSelected", toString(defaults.constantSizeSelected))));
366 }
367 
368 
369 std::string
371  if (mySettings.name != "") {
373  if (view) {
374  FXint index = view->getColoringSchemesCombo()->appendItem(mySettings.name.c_str());
375  view->getColoringSchemesCombo()->setCurrentItem(index);
377  }
378  }
379  return mySettings.name;
380 }
381 
382 
383 void
385  if (myLookFrom.z() > 0) {
386  // z value stores zoom so we must convert first
387  Position lookFrom(myLookFrom.x(), myLookFrom.y(), view->getChanger().zoom2ZPos(myLookFrom.z()));
388  view->setViewportFromToRot(lookFrom, myLookAt, myRotation);
389  }
390 }
391 
392 
393 void
395  if (!mySnapshots.empty()) {
396  for (auto item : mySnapshots) {
397  for (auto file : item.second) {
398  view->addSnapshot(item.first, file);
399  }
400  }
401  }
402 }
403 
404 
405 bool
407  return !myDecals.empty();
408 }
409 
410 
411 const std::vector<GUISUMOAbstractView::Decal>&
413  return myDecals;
414 }
415 
416 
417 double
419  return myDelay;
420 }
421 
422 
423 std::vector<SUMOTime>
424 GUISettingsHandler::loadBreakpoints(const std::string& file) {
425  std::vector<SUMOTime> result;
426  std::ifstream strm(file.c_str());
427  while (strm.good()) {
428  std::string val;
429  strm >> val;
430  if (val.length() == 0) {
431  continue;
432  }
433  try {
434  SUMOTime value = string2time(val);
435  result.push_back(value);
436  } catch (NumberFormatException& e) {
437  WRITE_ERROR(" A breakpoint-value must be an int. " + toString(e.what()));
438  } catch (EmptyData&) {
439  } catch (ProcessError&) {
440  WRITE_ERROR(" Could not decode breakpoint '" + val + "'");
441  }
442  }
443  return result;
444 }
445 
446 
450  if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
451  // unscaled probabilities are assumed, fill up with dummy event
452  result.add("", 1. - result.getOverallProb());
453  }
454  return result;
455 }
456 
457 
458 /****************************************************************************/
459 
GUIVisualizationSizeSettings junctionSize
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
bool drawBrakeGap
Information whether the brake gap shall be drawn.
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)
GUICompleteSchemeStorage gSchemeStorage
bool showSizeLegend
Information whether the size legend shall be drawn.
long long int SUMOTime
Definition: SUMOTime.h:35
GUIVisualizationTextSettings poiType
static std::string getConfigurationRelative(const std::string &configPath, const std::string &path)
Returns the second path as a relative path to the first file.
GUIVisualizationTextSettings streetName
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag.
double myRotation
View rotation.
bool showBlinker
Information whether vehicle blinkers shall be drawn.
double z() const
Returns the z-position.
Definition: Position.h:67
GUIVisualizationTextSettings addName
int myCurrentColorer
The last color scheme category (edges or vehicles)
GUIVisualizationTextSettings personValue
GUIVisualizationTextSettings personName
GUIColorScheme * myCurrentScheme
The current color scheme.
GUIVisualizationTextSettings poiName
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:257
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.
RGBColor bgColor
background text color
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:62
GUIVisualizationTextSettings edgeValue
bool showRails
Information whether rails shall be drawn.
std::vector< GUISUMOAbstractView::Decal > myDecals
The decals list to fill.
bool constantSizeSelected
whether only selected objects shall be drawn with constant
GUIVisualizationTextSettings vehicleName
double x() const
Returns the x-position.
Definition: Position.h:57
double centerX
The center of the image in x-direction (net coordinates, in m)
SAX-reader encapsulation containing binary reader.
Definition: SUMOSAXReader.h:56
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.
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:87
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:113
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.
SUMOTime getSUMOTimeReporting(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
double getDelay() const
Returns the parsed delay.
double layer
The layer of the image.
GUIVisualizationSettings mySettings
The settings to fill.
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter ...
GUIVisualizationSizeSettings polySize
GUIColorer vehicleColorer
The vehicle colorer.
std::string edgeParam
key for coloring by edge parameter
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
bool constantSize
whether the object shall be drawn with constant size regardless of zoom
GUIColorer poiColorer
The POI colorer.
GUISettingsHandler(const std::string &content, bool isFile=true, bool netedit=false)
Constructor.
GUIVisualizationTextSettings vehicleValue
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:48
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.
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter ...
GUIVisualizationTextSettings internalEdgeName
static bool isAbsolute(const std::string &path)
Returns the information whether the given path is absolute.
bool constSize
flag to avoid size changes
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
GUIVisualizationTextSettings parseTextSettings(const std::string &prefix, const SUMOSAXAttributes &attrs, GUIVisualizationTextSettings defaults)
parse attributes for textSettings
bool drawMinGap
Information whether the minimum gap shall be drawn.
FXComboBox * getColoringSchemesCombo()
get coloring schemes combo
int addMode
The additional structures visualization scheme.
double rot
The rotation of the image in the ground plane (in degrees)
GUIVisualizationTextSettings polyType
bool showSublanes
Whether to show sublane boundaries.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
GUIPerspectiveChanger & getChanger() const
get changer
static SUMOSAXReader * getSAXReader(SUMOSAXHandler &handler)
Builds a reader and assigns the handler to it.
Definition: XMLSubSys.cpp:101
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:42
bool initialised
Whether this image was initialised (inserted as a texture)
GUIVisualizationTextSettings drawLinkTLIndex
GUIColorer polyColorer
The polygon colorer.
GUIColorer personColorer
The person colorer.
bool showColorLegend
Information whether the colo legend shall be drawn.
GUIVisualizationTextSettings internalJunctionName
double centerY
The center of the image in y-direction (net coordinates, in m)
bool fps
Information whether frames-per-second should be drawn.
GUIColorer junctionColorer
The junction colorer.
~GUISettingsHandler()
Destructor.
std::string filename
The path to the file the image is located at.
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter...
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.
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:245
GUIVisualizationSizeSettings poiSize
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
std::string edgeData
key for coloring by edgeData
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.
GUIVisualizationTextSettings addFullName
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.
GUIVisualizationTextSettings tlsPhaseIndex
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)
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)
void addSnapshot(SUMOTime time, const std::string &file, const int width=-1, const int height=-1)
Sets the snapshot time to file map.
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
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 forceDrawForSelecting
flag to force draw to selecting (see drawForSelecting)
bool add(T val, double prob, bool checkDuplicates=true)
Adds a value with an assigned probability to the distribution.
GUIScaler laneScaler
The lane scaler.
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
A color information.
bool drawBoundaries
enable or disable draw boundaries
GUIVisualizationTextSettings drawLinkJunctionIndex
GUIVisualizationSizeSettings parseSizeSettings(const std::string &prefix, const SUMOSAXAttributes &attrs, GUIVisualizationSizeSettings defaults)
parse attributes for sizeSettings
bool hideConnectors
flag to show or hidde connectors
Position myLookFrom
The viewport loaded, zoom is stored in z coordinate.
bool showBikeMarkings
Information whether bicycle lane marking shall be drawn.
void setInterpolated(const bool interpolate, double interpolationStart=0.f)
void add(const GUIVisualizationSettings &scheme)
Adds a visualization scheme.
GUIVisualizationTextSettings polyName
GUIVisualizationTextSettings containerName