Eclipse SUMO - Simulation of Urban MObility
GUIParameterTracker.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 /****************************************************************************/
16 // A window which displays the time line of one (or more) value(s)
17 /****************************************************************************/
18 
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
25 #include <string>
26 #include <fstream>
29 #include <utils/common/ToString.h>
31 #include <utils/common/SUMOTime.h>
32 #include <utils/gui/div/GLHelper.h>
40 #include "GUIParameterTracker.h"
42 
43 
44 // ===========================================================================
45 // FOX callback mapping
46 // ===========================================================================
47 FXDEFMAP(GUIParameterTracker) GUIParameterTrackerMap[] = {
48  FXMAPFUNC(SEL_CONFIGURE, 0, GUIParameterTracker::onConfigure),
49  FXMAPFUNC(SEL_PAINT, 0, GUIParameterTracker::onPaint),
50  FXMAPFUNC(SEL_COMMAND, MID_SIMSTEP, GUIParameterTracker::onSimStep),
53 
54 };
55 
56 // Macro for the GLTestApp class hierarchy implementation
57 FXIMPLEMENT(GUIParameterTracker, FXMainWindow, GUIParameterTrackerMap, ARRAYNUMBER(GUIParameterTrackerMap))
58 
59 
60 // ===========================================================================
61 // method definitions
62 // ===========================================================================
64  const std::string& name)
65  : FXMainWindow(app.getApp(), "Tracker", nullptr, nullptr, DECOR_ALL, 20, 20, 300, 200),
66  myApplication(&app) {
67  buildToolBar();
68  app.addChild(this);
69  FXVerticalFrame* glcanvasFrame = new FXVerticalFrame(this, FRAME_SUNKEN | LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
70  myPanel = new GUIParameterTrackerPanel(glcanvasFrame, *myApplication, *this);
71  setTitle(name.c_str());
73 }
74 
75 
78  for (std::vector<TrackerValueDesc*>::iterator i1 = myTracked.begin(); i1 != myTracked.end(); i1++) {
79  delete (*i1);
80  }
81  // deleted by GUINet
82  for (std::vector<GLObjectValuePassConnector<double>*>::iterator i2 = myValuePassers.begin(); i2 != myValuePassers.end(); i2++) {
83  delete (*i2);
84  }
85  delete myToolBarDrag;
86  delete myToolBar;
87 }
88 
89 
90 void
92  FXMainWindow::create();
93  myToolBarDrag->create();
94 }
95 
96 
97 void
99  myToolBarDrag = new FXToolBarShell(this, GUIDesignToolBar);
100  myToolBar = new FXToolBar(this, myToolBarDrag, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | FRAME_RAISED);
101  new FXToolBarGrip(myToolBar, myToolBar, FXToolBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
102  // save button
103  new FXButton(myToolBar, "\t\tSave the data...",
105  // aggregation interval combo
107  new FXComboBox(myToolBar, 8, this, MID_AGGREGATIONINTERVAL,
109  myAggregationInterval->appendItem("1s");
110  myAggregationInterval->appendItem("1min");
111  myAggregationInterval->appendItem("5min");
112  myAggregationInterval->appendItem("15min");
113  myAggregationInterval->appendItem("30min");
114  myAggregationInterval->appendItem("60min");
115  myAggregationInterval->setNumVisible(6);
116 }
117 
118 
119 void
121  TrackerValueDesc* newTracked) {
122  myTracked.push_back(newTracked);
123  // build connection (is automatically set into an execution map)
124  myValuePassers.push_back(new GLObjectValuePassConnector<double>(o, src, newTracked));
125 }
126 
127 
128 long
129 GUIParameterTracker::onConfigure(FXObject* sender, FXSelector sel, void* ptr) {
130  myPanel->onConfigure(sender, sel, ptr);
131  return FXMainWindow::onConfigure(sender, sel, ptr);
132 }
133 
134 
135 long
136 GUIParameterTracker::onPaint(FXObject* sender, FXSelector sel, void* ptr) {
137  myPanel->onPaint(sender, sel, ptr);
138  return FXMainWindow::onPaint(sender, sel, ptr);
139 }
140 
141 
142 long
143 GUIParameterTracker::onSimStep(FXObject*, FXSelector, void*) {
144  update();
145  return 1;
146 }
147 
148 
149 long
150 GUIParameterTracker::onCmdChangeAggregation(FXObject*, FXSelector, void*) {
151  int index = myAggregationInterval->getCurrentItem();
152  int aggInt = 0;
153  switch (index) {
154  case 0:
155  aggInt = 1;
156  break;
157  case 1:
158  aggInt = 60;
159  break;
160  case 2:
161  aggInt = 60 * 5;
162  break;
163  case 3:
164  aggInt = 60 * 15;
165  break;
166  case 4:
167  aggInt = 60 * 30;
168  break;
169  case 5:
170  aggInt = 60 * 60;
171  break;
172  default:
173  throw 1;
174  break;
175  }
176  for (std::vector<TrackerValueDesc*>::iterator i1 = myTracked.begin(); i1 != myTracked.end(); i1++) {
177  (*i1)->setAggregationSpan(TIME2STEPS(aggInt));
178  }
179  return 1;
180 }
181 
182 
183 long
184 GUIParameterTracker::onCmdSave(FXObject*, FXSelector, void*) {
185  FXString file = MFXUtils::getFilename2Write(this, "Save Data", ".csv", GUIIconSubSys::getIcon(ICON_EMPTY), gCurrentFolder);
186  if (file == "") {
187  return 1;
188  }
189  try {
190  OutputDevice& dev = OutputDevice::getDevice(file.text());
191  // write header
192  std::vector<TrackerValueDesc*>::iterator i;
193  dev << "# ";
194  for (i = myTracked.begin(); i != myTracked.end(); ++i) {
195  if (i != myTracked.begin()) {
196  dev << ';';
197  }
198  TrackerValueDesc* tvd = *i;
199  dev << tvd->getName();
200  }
201  dev << '\n';
202  // count entries
203  int max = 0;
204  for (i = myTracked.begin(); i != myTracked.end(); ++i) {
205  TrackerValueDesc* tvd = *i;
206  int sizei = (int)tvd->getAggregatedValues().size();
207  if (max < sizei) {
208  max = sizei;
209  }
210  tvd->unlockValues();
211  }
212  // write entries
213  for (int j = 0; j < max; j++) {
214  for (i = myTracked.begin(); i != myTracked.end(); ++i) {
215  if (i != myTracked.begin()) {
216  dev << ';';
217  }
218  TrackerValueDesc* tvd = *i;
219  dev << tvd->getAggregatedValues()[j];
220  tvd->unlockValues();
221  }
222  dev << '\n';
223  }
224  dev.close();
225  } catch (IOError& e) {
226  FXMessageBox::error(this, MBOX_OK, "Storing failed!", "%s", e.what());
227  }
228  return 1;
229 }
230 
231 
232 /* -------------------------------------------------------------------------
233  * GUIParameterTracker::GUIParameterTrackerPanel-methods
234  * ----------------------------------------------------------------------- */
235 FXDEFMAP(GUIParameterTracker::GUIParameterTrackerPanel) GUIParameterTrackerPanelMap[] = {
238 
239 };
240 
241 // Macro for the GLTestApp class hierarchy implementation
242 FXIMPLEMENT(GUIParameterTracker::GUIParameterTrackerPanel, FXGLCanvas, GUIParameterTrackerPanelMap, ARRAYNUMBER(GUIParameterTrackerPanelMap))
243 
244 
245 
247  FXComposite* c, GUIMainWindow& app,
248  GUIParameterTracker& parent)
249  : FXGLCanvas(c, app.getGLVisual(), app.getBuildGLCanvas(), (FXObject*) nullptr, (FXSelector) 0, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 300, 200),
250  myParent(&parent), myApplication(&app) {}
251 
252 
254 
255 
256 void
258  glMatrixMode(GL_PROJECTION);
259  glLoadIdentity();
260  glMatrixMode(GL_MODELVIEW);
261  glLoadIdentity();
262  glDisable(GL_TEXTURE_2D);
263  int run = 0;
264  for (std::vector<TrackerValueDesc*>::iterator i = myParent->myTracked.begin(); i != myParent->myTracked.end(); i++) {
265  TrackerValueDesc* desc = *i;
266  drawValue(*desc,
267  (double) myWidthInPixels / (double) myParent->myTracked.size() * (double) run);
268  run++;
269  }
270 }
271 
272 
273 void
275  double /*namePos*/) {
276  const double fontWidth = 0.1 * 300. / myWidthInPixels;
277  const double fontHeight = 0.1 * 300. / myHeightInPixels;
278  //
279  // apply scaling
280  glPushMatrix();
281 
282  // apply the positiopn offset of the display
283  glScaled(0.8, 0.8, 1);
284  // apply value range scaling
285  double ys = (double) 2.0 / (double) desc.getRange();
286  glScaled(1.0, ys, 1.0);
287  glTranslated(-1.0, -desc.getYCenter(), 0);
288 
289  // set color
290  const unsigned char red = desc.getColor().red();
291  const unsigned char green = desc.getColor().green();
292  const unsigned char blue = desc.getColor().blue();
293  // draw value bounderies
294  // draw minimum boundary
295  glBegin(GL_LINES);
296  glVertex2d(0, desc.getMin());
297  glVertex2d(2.0, desc.getMin());
298  glEnd();
299  glBegin(GL_LINES);
300  glVertex2d(0, desc.getMax());
301  glVertex2d(2.0, desc.getMax());
302  glEnd();
303  glColor4ub(red, green, blue, 77);
304  for (int a = 1; a < 6; a++) {
305  const double yp = desc.getRange() / 6.0 * (double) a + desc.getMin();
306  glBegin(GL_LINES);
307  glVertex2d(0, yp);
308  glVertex2d(2.0, yp);
309  glEnd();
310  }
311  const std::vector<double>& values = desc.getAggregatedValues();
312  double latest = 0;
313  if (values.size() < 2) {
314  glPopMatrix();
315  desc.unlockValues();
316  return;
317  } else {
318  latest = values.back();
319  // init values
320  const double xStep = 2.0 / (double) values.size();
321  std::vector<double>::const_iterator i = values.begin();
322  double yp = (*i);
323  double xp = 0;
324  i++;
325  glColor4ub(red, green, blue, 255);
326  for (; i != values.end(); i++) {
327  double yn = (*i);
328  double xn = xp + xStep;
329  glBegin(GL_LINES);
330  glVertex2d(xp, yp);
331  glVertex2d(xn, yn);
332  glEnd();
333  yp = yn;
334  xp = xn;
335  }
336  desc.unlockValues();
337  glPopMatrix();
338  }
339 
340  // draw value bounderies and descriptions
341  glColor3b(red, green, blue);
342 
343  // draw min time
344  SUMOTime beginStep = desc.getRecordingBegin();
345  std::string begStr = time2string(beginStep);
346  double w = 50 / myWidthInPixels;
347  glTranslated(-0.8 - w / 2., -0.88, 0);
348  GLHelper::drawText(begStr, Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
349  glTranslated(0.8 + w / 2., 0.88, 0);
350 
351  // draw max time
352  glTranslated(0.75, -0.88, 0);
353  GLHelper::drawText(time2string(beginStep + static_cast<SUMOTime>(values.size() * desc.getAggregationSpan())),
354  Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
355  glTranslated(-0.75, 0.88, 0);
356 
357  // draw min value
358  glTranslated(-0.98, -0.82, 0);
359  GLHelper::drawText(toString(desc.getMin()), Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
360  glTranslated(0.98, 0.82, 0);
361 
362  // draw max value
363  glTranslated(-0.98, 0.78, 0);
364  GLHelper::drawText(toString(desc.getMax()), Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
365  glTranslated(0.98, -0.78, 0);
366 
367  // draw current value
368  double p = (double) 0.8 -
369  ((double) 1.6 / (desc.getMax() - desc.getMin()) * (latest - desc.getMin()));
370  glTranslated(-0.98, -(p + .02), 0);
371  GLHelper::drawText(toString(latest), Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
372  glTranslated(0.98, p + .02, 0);
373 
374  // draw name
375  glTranslated(-0.98, .92, 0);
376  GLHelper::drawText(desc.getName(), Position(0, 0), 1, fontHeight, RGBColor::BLACK, 0, FONS_ALIGN_LEFT | FONS_ALIGN_MIDDLE, fontWidth);
377  glTranslated(0.98, -.92, 0);
378 }
379 
380 
381 long
383  FXSelector, void*) {
384  if (makeCurrent()) {
385  myWidthInPixels = myParent->getWidth();
386  myHeightInPixels = myParent->getHeight();
387  if (myWidthInPixels != 0 && myHeightInPixels != 0) {
388  glViewport(0, 0, myWidthInPixels - 1, myHeightInPixels - 1);
389  glClearColor(1.0, 1.0, 1.0, 1);
390  glDisable(GL_DEPTH_TEST);
391  glDisable(GL_LIGHTING);
392  glDisable(GL_LINE_SMOOTH);
393  glEnable(GL_BLEND);
394  glEnable(GL_ALPHA_TEST);
395  glDisable(GL_COLOR_MATERIAL);
396  glLineWidth(1);
397  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
398  }
399  makeNonCurrent();
400  }
401  return 1;
402 }
403 
404 
405 long
407  FXSelector, void*) {
408  if (!isEnabled()) {
409  return 1;
410  }
411  if (makeCurrent()) {
412  myWidthInPixels = getWidth();
413  myHeightInPixels = getHeight();
414  if (myWidthInPixels != 0 && myHeightInPixels != 0) {
415  glViewport(0, 0, myWidthInPixels - 1, myHeightInPixels - 1);
416  glClearColor(1.0, 1.0, 1.0, 1);
417  glDisable(GL_DEPTH_TEST);
418  glDisable(GL_LIGHTING);
419  glDisable(GL_LINE_SMOOTH);
420  glEnable(GL_BLEND);
421  glEnable(GL_ALPHA_TEST);
422  glDisable(GL_COLOR_MATERIAL);
423  glLineWidth(1);
424  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
425  // draw
426  glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
427  drawValues();
428  swapBuffers();
429  }
430  makeNonCurrent();
431  }
432  return 1;
433 }
434 
435 
436 
437 /****************************************************************************/
438 
GUIParameterTracker::GUIParameterTrackerPanel::~GUIParameterTrackerPanel
~GUIParameterTrackerPanel()
Destructor.
Definition: GUIParameterTracker.cpp:253
GUIParameterTracker::myToolBarDrag
FXToolBarShell * myToolBarDrag
for some menu detaching fun
Definition: GUIParameterTracker.h:194
GUIParameterTracker::buildToolBar
void buildToolBar()
Builds the tool bar.
Definition: GUIParameterTracker.cpp:98
GUIGlObject.h
ToString.h
GUIDesignToolBarGrip
#define GUIDesignToolBarGrip
design for toolbar grip (used to change the position of toolbar with mouse)
Definition: GUIDesigns.h:307
SUMOTime.h
TrackerValueDesc::getMin
double getMin() const
Returns the values minimum.
Definition: TrackerValueDesc.cpp:89
GUIParameterTracker::GUIParameterTrackerPanel::drawValues
void drawValues()
Draws all values.
Definition: GUIParameterTracker.cpp:257
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:63
RGBColor::BLACK
static const RGBColor BLACK
Definition: RGBColor.h:197
GUIParameterTracker::onPaint
long onPaint(FXObject *, FXSelector, void *)
Called if the window shall be repainted.
Definition: GUIParameterTracker.cpp:136
GUIParameterTracker::onSimStep
long onSimStep(FXObject *, FXSelector, void *)
Called on a simulation step.
Definition: GUIParameterTracker.cpp:143
ICON_EMPTY
@ ICON_EMPTY
Definition: GUIIcons.h:41
TrackerValueDesc::getColor
const RGBColor & getColor() const
Returns the color to use to display the value.
Definition: TrackerValueDesc.cpp:107
GUIParameterTracker::myApplication
GUIMainWindow * myApplication
The main application.
Definition: GUIParameterTracker.h:182
GUIParameterTracker::myValuePassers
std::vector< GLObjectValuePassConnector< double > * > myValuePassers
The value sources.
Definition: GUIParameterTracker.h:191
ICON_SAVE
@ ICON_SAVE
Definition: GUIIcons.h:48
GUIParameterTracker::myToolBar
FXToolBar * myToolBar
The tracker tool bar.
Definition: GUIParameterTracker.h:203
GUIParameterTracker::MID_AGGREGATIONINTERVAL
@ MID_AGGREGATIONINTERVAL
Change aggregation interval.
Definition: GUIParameterTracker.h:54
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
FONS_ALIGN_LEFT
@ FONS_ALIGN_LEFT
Definition: fontstash.h:42
TrackerValueDesc::getMax
double getMax() const
Returns the values maximum.
Definition: TrackerValueDesc.cpp:95
RGBColor::red
unsigned char red() const
Returns the red-amount of the color.
Definition: RGBColor.h:61
GLHelper.h
GUIDesigns.h
TrackerValueDesc::unlockValues
void unlockValues()
Releases the locking after the values have been drawn.
Definition: TrackerValueDesc.cpp:132
GUIIconSubSys::getIcon
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Definition: GUIIconSubSys.cpp:609
OutputDevice::close
void close()
Closes the device and removes it from the dictionary.
Definition: OutputDevice.cpp:207
MFXUtils::getFilename2Write
static FXString getFilename2Write(FXWindow *parent, const FXString &header, const FXString &extension, FXIcon *icon, FXString &currentFolder)
Returns the file name to write.
Definition: MFXUtils.cpp:83
GUIDesignButtonToolbar
#define GUIDesignButtonToolbar
little button with icon placed in navigation toolbar
Definition: GUIDesigns.h:79
TrackerValueDesc::getYCenter
double getYCenter() const
Returns the center of the value.
Definition: TrackerValueDesc.cpp:101
GUIMainWindow.h
GUIAppEnum.h
GLHelper::drawText
static void drawText(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &col=RGBColor::BLACK, const double angle=0, int align=0, double width=-1)
Definition: GLHelper.cpp:673
GUIParameterTracker::myPanel
GUIParameterTrackerPanel * myPanel
The panel to display the values in.
Definition: GUIParameterTracker.h:188
FXDEFMAP
FXDEFMAP(GUIParameterTracker) GUIParameterTrackerMap[]
GUIParameterTracker::create
void create()
Creates the window.
Definition: GUIParameterTracker.cpp:91
TIME2STEPS
#define TIME2STEPS(x)
Definition: SUMOTime.h:58
GUIParameterTracker::GUIParameterTrackerPanel::onConfigure
long onConfigure(FXObject *, FXSelector, void *)
Called on window resizing.
Definition: GUIParameterTracker.cpp:382
MID_SIMSTEP
@ MID_SIMSTEP
A Simulation step was performed.
Definition: GUIAppEnum.h:456
update
GUIMainWindow::removeChild
void removeChild(FXMainWindow *child)
Definition: GUIMainWindow.cpp:115
GUIDesignToolBar
#define GUIDesignToolBar
design for default toolbar
Definition: GUIDesigns.h:295
OutputDevice.h
GUIParameterTracker::MID_SAVE
@ MID_SAVE
Save the current values.
Definition: GUIParameterTracker.h:56
FONS_ALIGN_MIDDLE
@ FONS_ALIGN_MIDDLE
Definition: fontstash.h:47
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GUIParameterTracker::~GUIParameterTracker
~GUIParameterTracker()
Destructor.
Definition: GUIParameterTracker.cpp:76
GUIParameterTracker::onCmdChangeAggregation
long onCmdChangeAggregation(FXObject *, FXSelector, void *)
Called when the aggregation interval (combo) has been changed.
Definition: GUIParameterTracker.cpp:150
time2string
std::string time2string(SUMOTime t)
Definition: SUMOTime.cpp:67
GLObjectValuePassConnector
Class passing values from a GUIGlObject to another object.
Definition: GLObjectValuePassConnector.h:59
GUIIOGlobals.h
TrackerValueDesc
Representation of a timeline of floats with their names and moments.
Definition: TrackerValueDesc.h:42
GUIGlObject
Definition: GUIGlObject.h:65
TrackerValueDesc::getName
const std::string & getName() const
Returns the name of the value.
Definition: TrackerValueDesc.cpp:127
RGBColor::green
unsigned char green() const
Returns the green-amount of the color.
Definition: RGBColor.h:68
GUIDesignComboBoxStatic
#define GUIDesignComboBoxStatic
Combo box static (not editable)
Definition: GUIDesigns.h:208
gCurrentFolder
FXString gCurrentFolder
The folder used as last.
Definition: GUIIOGlobals.cpp:32
GUIParameterTracker::GUIParameterTrackerPanel::drawValue
void drawValue(TrackerValueDesc &desc, double namePos)
Draws a single value.
Definition: GUIParameterTracker.cpp:274
GUIParameterTracker::myTracked
std::vector< TrackerValueDesc * > myTracked
The list of tracked values.
Definition: GUIParameterTracker.h:185
GUIParameterTracker::addTracked
void addTracked(GUIGlObject &o, ValueSource< double > *src, TrackerValueDesc *newTracked)
Adds a further time line to display.
Definition: GUIParameterTracker.cpp:120
GUIParameterTracker::myAggregationInterval
FXComboBox * myAggregationInterval
A combo box to select an aggregation interval.
Definition: GUIParameterTracker.h:197
GUIParameterTracker
A window which displays the time line of one (or more) value(s)
Definition: GUIParameterTracker.h:48
GUIIconSubSys.h
GLIncludes.h
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:47
StringUtils.h
OutputDevice::getDevice
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
Definition: OutputDevice.cpp:54
GUIMainWindow
Definition: GUIMainWindow.h:46
RGBColor::blue
unsigned char blue() const
Returns the blue-amount of the color.
Definition: RGBColor.h:75
MFXUtils.h
ICON_APP_TRACKER
@ ICON_APP_TRACKER
Definition: GUIIcons.h:109
GUIParameterTracker::onConfigure
long onConfigure(FXObject *, FXSelector, void *)
Called on window resizing.
Definition: GUIParameterTracker.cpp:129
IOError
Definition: UtilExceptions.h:161
config.h
GUIParameterTracker::onCmdSave
long onCmdSave(FXObject *, FXSelector, void *)
Called when the data shall be saved.
Definition: GUIParameterTracker.cpp:184
ValueSource< double >
GUIParameterTracker::GUIParameterTrackerPanel
Definition: GUIParameterTracker.h:113
TrackerValueDesc::getRange
double getRange() const
returns the maximum value range
Definition: TrackerValueDesc.cpp:83
TrackerValueDesc::getAggregatedValues
const std::vector< double > & getAggregatedValues()
returns the vector of aggregated values The values will be locked - no further addition will be perfo...
Definition: TrackerValueDesc.cpp:120
GUIParameterTracker.h
TrackerValueDesc::getRecordingBegin
SUMOTime getRecordingBegin() const
Returns the timestep the recording started.
Definition: TrackerValueDesc.cpp:172
TrackerValueDesc::getAggregationSpan
SUMOTime getAggregationSpan() const
get the aggregation amount
Definition: TrackerValueDesc.cpp:166
GUIParameterTracker::GUIParameterTrackerPanel::onPaint
long onPaint(FXObject *, FXSelector, void *)
Called if the window shall be repainted.
Definition: GUIParameterTracker.cpp:406
fontstash.h