0.5.0
Loading...
Searching...
No Matches
Plot.hpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9/// @file Plot.hpp
10/// @brief Plots data into ImPlot Windows
11/// @author T. Topp (topp@ins.uni-stuttgart.de)
12/// @date 2021-01-09
13
14#pragma once
15
16#include <array>
17#include <imgui.h>
18#include <implot.h>
19
20#include <map>
21#include <memory>
22#include <mutex>
23#include <unordered_set>
24
25#include "NodeData/NodeData.hpp"
29
36
54
55namespace NAV
56{
57/// @brief Plot node which plots all kind of observations
58class Plot : public Node, public CommonLog
59{
60 public:
61 /// @brief Default constructor
62 Plot();
63 /// @brief Destructor
64 ~Plot() override;
65 /// @brief Copy constructor
66 Plot(const Plot&) = delete;
67 /// @brief Move constructor
68 Plot(Plot&&) = delete;
69 /// @brief Copy assignment operator
70 Plot& operator=(const Plot&) = delete;
71 /// @brief Move assignment operator
72 Plot& operator=(Plot&&) = delete;
73
74 /// @brief String representation of the Class Type
75 [[nodiscard]] static std::string typeStatic();
76
77 /// @brief String representation of the Class Type
78 [[nodiscard]] std::string type() const override;
79
80 /// @brief String representation of the Class Category
81 [[nodiscard]] static std::string category();
82
83 /// @brief ImGui config window which is shown on double click
84 /// @attention Don't forget to set _hasConfig to true in the constructor of the node
85 void guiConfig() override;
86
87 /// @brief Saves the node into a json object
88 [[nodiscard]] json save() const override;
89
90 /// @brief Restores the node from a json object
91 /// @param[in] j Json object with the node state
92 void restore(const json& j) override;
93
94 /// @brief Called when a new link was established
95 /// @param[in] startPin Pin where the link starts
96 /// @param[in] endPin Pin where the link ends
97 void afterCreateLink(OutputPin& startPin, InputPin& endPin) override;
98
99 /// @brief Information needed to plot the data on a certain pin
100 struct PinData
101 {
102 /// @brief Stores the actual data coming from a pin
103 struct PlotData
104 {
105 /// @brief Default constructor (needed to make serialization with json working)
106 PlotData() = default;
107
108 /// @brief Constructor
109 /// @param[in] displayName Display name of the contained data
110 /// @param[in] size Size of the buffer
111 PlotData(std::string displayName, size_t size);
112
113 /// Display name of the contained data
114 std::string displayName;
115 /// Buffer for the data
117 /// Flag if data was received, as the buffer contains std::nan("") otherwise
118 bool hasData = false;
119
120 /// When connecting a new link. All data is flagged for delete and only those who are also present in the new link are kept
121 bool markedForDelete = false;
122 /// Bool to show if dynamic data
123 bool isDynamic = false;
124 };
125
126 /// @brief Possible Pin types
127 enum class PinType : uint8_t
128 {
129 Flow, ///< NodeData Trigger
130 Bool, ///< Boolean
131 Int, ///< Integer Number
132 Float, ///< Floating Point Number
133 Matrix, ///< Matrix Object
134 };
135
136 /// @brief Constructor
137 PinData() = default;
138 /// @brief Destructor
139 ~PinData() = default;
140 /// @brief Copy constructor
141 /// @param[in] other The other element to copy
142 PinData(const PinData& other);
143
144 /// @brief Move constructor
145 /// @param[in] other The other element to move
146 PinData(PinData&& other) noexcept;
147
148 /// @brief Copy assignment operator
149 /// @param[in] rhs The other element to copy
150 PinData& operator=(const PinData& rhs);
151 /// @brief Move assignment operator
152 /// @param[in] rhs The other element to move
153 PinData& operator=(PinData&& rhs) noexcept;
154
155 /// @brief Adds a plotData Element to the list
156 /// @param[in] dataIndex Index where to add the data to
157 /// @param[in] displayName Display name of the contained data
158 void addPlotDataItem(size_t dataIndex, const std::string& displayName);
159
160 /// Size of all buffers of the plotData elements
161 int size = 0;
162 /// Data Identifier of the connected pin
163 std::string dataIdentifier;
164 /// List with all the data
165 std::vector<PlotData> plotData;
166 /// List with the raw data received
168 /// Pin Type
170 /// Amount of points to skip for plotting
171 int stride = 1;
172 /// Mutex to lock the buffer so that the GUI thread and the calculation threads don't cause a data race
173 std::mutex mutex;
174 /// Dynamic data start index
176 /// Events with relative time, absolute time, tooltip text and data Index (-1 means all)
177 std::vector<std::tuple<double, InsTime, std::string, int32_t>> events;
178 };
179
180 /// @brief Information specifying the look of each plot
181 struct PlotInfo
182 {
183 /// Info needed to draw a data set
184 struct PlotItem
185 {
186 /// @brief Default constructor (needed to make serialization with json working)
187 PlotItem() = default;
188
189 /// @brief Constructor
190 /// @param[in] pinIndex Index of the pin where the data came in
191 /// @param[in] dataIndex Index of the data on the pin
192 /// @param[in] displayName Display name of the data
193 PlotItem(size_t pinIndex, size_t dataIndex, std::string displayName)
195 {
196 style.colormapMaskDataCmpIdx = dataIndex;
197 style.markerColormapMaskDataCmpIdx = dataIndex;
198 }
199
200 /// @brief Constructor
201 /// @param[in] pinIndex Index of the pin where the data came in
202 /// @param[in] dataIndex Index of the data on the pin
203 /// @param[in] displayName Display name of the data
204 /// @param[in] axis Axis to plot the data on (Y1, Y2, Y3)
205 PlotItem(size_t pinIndex, size_t dataIndex, std::string displayName, ImAxis axis)
207 {
208 this->axis = axis; // NOLINT(cppcoreguidelines-prefer-member-initializer)
209 }
210
211 /// @brief Equal comparison operator (needed to search the vector with std::find)
212 /// @param[in] rhs Right-hand-side of the operator
213 /// @return True if the pin and data indices match
214 constexpr bool operator==(const PlotItem& rhs) const
215 {
216 return pinIndex == rhs.pinIndex && dataIndex == rhs.dataIndex && displayName == rhs.displayName;
217 }
218
219 size_t pinIndex{}; ///< Index of the pin where the data came in
220 size_t dataIndex{}; ///< Index of the data on the pin
221 std::string displayName; ///< Display name of the data (not changing and unique)
222 ImAxis axis{ ImAxis_Y1 }; ///< Axis to plot the data on (Y1, Y2, Y3)
223 PlotItemStyle style{}; ///< Defines how the data should be plotted
224 /// Buffer for the colormap mask
226 /// Colormap version (to track updates of the colormap)
228 /// Buffer for the colormap mask
230 /// Colormap version (to track updates of the colormap)
232
233 /// Buffer for event markers
235
236 /// Error bounds lower and upper data
237 std::array<ScrollingBuffer<double>, 2> errorBoundsData;
238
239 /// List of tooltips (x,y, tooltip)
240 std::vector<std::tuple<double, double, PlotEventTooltip>> eventTooltips;
241 };
242
243 /// @brief Default constructor
244 PlotInfo() = default;
245
246 /// @brief Constructor
247 /// @param[in] title Title of the ImPlot
248 /// @param[in] nInputPins Amount of inputPins
249 PlotInfo(const std::string& title, size_t nInputPins)
250 : title(title), headerText(title), selectedXdata(nInputPins, 1) {}
251
252 /// Size of the plot
253 ImVec2 size{ -1, 300 };
254
255 /// Title of the ImPlot
256 std::string title;
257 /// Title of the CollapsingHeader
258 std::string headerText;
259 /// Flag, whether to override the x axis label
260 bool overrideXAxisLabel = false;
261 /// X axis label
262 std::string xAxisLabel;
263 /// Y1 axis label
264 std::string y1AxisLabel;
265 /// Y2 axis label
266 std::string y2AxisLabel;
267 /// Y3 axis label
268 std::string y3AxisLabel;
269 /// Selected pin in the GUI for the Drag & Drop Data
270 size_t selectedPin = 0;
271 /// Flags which are passed to the plot
272 int plotFlags = 0;
273 /// Flags for the x-Axis
274 ImPlotAxisFlags xAxisFlags = ImPlotAxisFlags_AutoFit;
275 /// Flags for the y-Axes
276 ImPlotAxisFlags yAxisFlags = ImPlotAxisFlags_AutoFit;
277 /// Scale for the x-Axis
278 ImPlotScale xAxisScale = ImPlotScale_Linear;
279 /// Scale for the y-Axes
280 std::array<ImPlotScale, 3> yAxesScale = { ImPlotScale_Linear, ImPlotScale_Linear, ImPlotScale_Linear };
281 /// Line Flags for all items (each item can override the selection)
282 ImPlotLineFlags lineFlags = ImPlotLineFlags_NoClip | ImPlotLineFlags_SkipNaN;
283
284 /// @brief Key: PinIndex, Value: plotData to use for x-Axis
285 std::vector<size_t> selectedXdata;
286
287 /// List containing all elements which should be plotted
288 std::vector<PlotItem> plotItems;
289
290 /// Width of plot Data content
291 float leftPaneWidth = 180.0F;
292 /// Width of the plot
293 float rightPaneWidth = 400.0F;
294
295 /// Flag whether the whole plot is visible. If not, then it should be deleted
296 bool visible = true;
297
298 /// List of tooltip windows to show
299 std::vector<PlotTooltip> tooltips;
300 };
301
302 private:
303 /// @brief Initialize the node
304 bool initialize() override;
305
306 /// @brief Deinitialize the node
307 void deinitialize() override;
308
309 /// @brief Adds/Deletes Plots depending on the variable nPlots
310 void updateNumberOfPlots();
311
312 /// @brief Function to call to add a new pin
313 /// @param[in, out] node Pointer to this node
314 static void pinAddCallback(Node* node);
315 /// @brief Function to call to delete a pin
316 /// @param[in, out] node Pointer to this node
317 /// @param[in] pinIdx Input pin index to delete
318 static void pinDeleteCallback(Node* node, size_t pinIdx);
319
320 /// Index of the GPST data (unix timestamp)
321 size_t GPST_PLOT_IDX = 1;
322
323 /// Data storage for each pin
324 std::vector<PinData> _pinData;
325
326 /// Info for each plot window
327 std::vector<PlotInfo> _plots;
328
329 /// Amount of plot windows (should equal _plots.size())
330 size_t _nPlots = 0;
331 /// Possible data identifiers to connect
332 std::vector<std::string> _dataIdentifier = {
333 // General
335 // GNSS
341 // IMU
342 ImuObs::type(),
345 KvhObs::type(),
347 // State
349 Pos::type(),
350 PosVel::type(),
353 // WiFi
355 // Barometer
358
359 };
360
361 /// Index of the Collapsible Header currently being dragged
363
364 size_t _screenshotFrameCnt = 0; ///< Frame counter for taking screenshots (> 0 when screenshot in progress)
365 size_t _screenShotPlotIdx = 0; ///< Plot index a screenshot is taken of
366
367 /// Values to force the x axis range to and a set of plotIdx to force
368 std::pair<std::unordered_set<size_t>, ImPlotRange> _forceXaxisRange;
369
370 /// Start position for the calculation of relative North-South and East-West
371 std::optional<gui::widgets::PositionWithFrame> _originPosition;
372
373 /// Flag, whether to override the North/East startValues in the GUI
375
376 /// @brief Dynamic input pins
377 /// @attention This should always be the last variable in the header, because it accesses others through the function callbacks
379
380 /// @brief Adds a event to a certain point in time
381 /// @param[in] pinIndex Index of the input pin where the data was received
382 /// @param insTime Absolute time
383 /// @param text Text to display
384 /// @param dataIndex Data Index to add the event for (-1 means all)
385 void addEvent(size_t pinIndex, InsTime insTime, const std::string& text, int32_t dataIndex);
386
387 /// @brief Add Data to the buffer of the pin
388 /// @param[in] pinIndex Index of the input pin where the data was received
389 /// @param[in] dataIndex Index of the data to insert
390 /// @param[in] value The value to insert
391 void addData(size_t pinIndex, size_t dataIndex, double value);
392
393 /// @brief Add Data to the buffer of the pin
394 /// @param[in] pinIndex Index of the input pin where the data was received
395 /// @param[in] displayName Display name of the data
396 /// @param[in] value The value to insert
397 /// @return Data Index where data were inserted
398 size_t addData(size_t pinIndex, std::string displayName, double value);
399
400 /// @brief Calculate the local position offset from the plot origin
401 /// @param[in] lla_position [𝜙, λ, h] Latitude, Longitude, Altitude in [rad, rad, m]
402 /// @return Local positions in north/south and east/west directions in [m]
403 CommonLog::LocalPosition calcLocalPosition(const Eigen::Vector3d& lla_position);
404
405 /// @brief Plots the data on this port
406 /// @param[in] insTime Time the data was received
407 /// @param[in] pinIdx Index of the pin the data is received on
408 void plotBoolean(const InsTime& insTime, size_t pinIdx);
409
410 /// @brief Plots the data on this port
411 /// @param[in] insTime Time the data was received
412 /// @param[in] pinIdx Index of the pin the data is received on
413 void plotInteger(const InsTime& insTime, size_t pinIdx);
414
415 /// @brief Plots the data on this port
416 /// @param[in] insTime Time the data was received
417 /// @param[in] pinIdx Index of the pin the data is received on
418 void plotFloat(const InsTime& insTime, size_t pinIdx);
419
420 /// @brief Plots the data on this port
421 /// @param[in] insTime Time the data was received
422 /// @param[in] pinIdx Index of the pin the data is received on
423 void plotMatrix(const InsTime& insTime, size_t pinIdx);
424
425 /// @brief Plot the data on this port
426 /// @param[in] queue Queue with all the received data messages
427 /// @param[in] pinIdx Index of the pin the data is received on
428 void plotFlowData(InputPin::NodeDataQueue& queue, size_t pinIdx);
429
430 /// @brief Plot the data
431 /// @param[in] obs Observation to plot
432 /// @param[in] pinIndex Index of the input pin where the data was received
433 /// @param[in, out] plotIndex Index for inserting the data into the plot data vector
434 /// @param[in] startIndex Data descriptor start index
435 template<typename T>
436 void plotData(const std::shared_ptr<const T>& obs, size_t pinIndex, size_t& plotIndex, size_t startIndex = 0)
437 {
438 for (size_t i = startIndex; i < T::GetStaticDescriptorCount(); ++i)
439 {
440 addData(pinIndex, plotIndex++, obs->getValueAtOrNaN(i));
441 }
442 }
443};
444
445} // namespace NAV
Barometric Height Storage Class.
Barometric Pressure Storage Class.
Common logging variables like time into run and local positions.
Dynamic Data container.
Inputs pins which can be added dynamically.
nlohmann::json json
json namespace
GNSS measurement combinations.
GNSS Observation messages.
Data storage class for simulated IMU observations.
Data storage class for one VectorNavImu observation.
Parent Class for all IMU Observations.
Loosely-coupled Kalman Filter INS/GNSS errors.
Tightly-coupled Kalman Filter INS/GNSS errors.
Data storage class for one KVH Imu observation.
Abstract NodeData Class.
Node Class.
Tooltips for a plot events.
Specifying the look of a certain line in the plot.
Plot Tooltips on hover.
Position, Velocity and Attitude Storage Class.
Position Input GUI widgets.
RTK Node/Algorithm output.
RTKLIB Pos Observation Class.
A buffer which is overwriting itself from the start when full.
SPP Algorithm output.
Binary Outputs from VectorNav Sensors.
Vector Utility functions.
WiFi Positioning Algorithm output.
static std::string type()
Returns the type of the data class.
Definition BaroHgt.hpp:28
static std::string type()
Returns the type of the data class.
CommonLog(const CommonLog &)=delete
Copy constructor.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
Definition GnssObs.hpp:150
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
Definition ImuObs.hpp:33
Input pins of nodes.
Definition Pin.hpp:491
TsDeque< std::shared_ptr< const NAV::NodeData > > NodeDataQueue
Node data queue type.
Definition Pin.hpp:707
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
The class is responsible for all time-related tasks.
Definition InsTime.hpp:710
static std::string type()
Returns the type of the data class.
Definition KvhObs.hpp:39
Node(std::string name)
Constructor.
Definition Node.cpp:30
Output pins of nodes.
Definition Pin.hpp:338
static std::string typeStatic()
String representation of the Class Type.
Definition Plot.cpp:336
void plotInteger(const InsTime &insTime, size_t pinIdx)
Plots the data on this port.
Definition Plot.cpp:1901
static void pinDeleteCallback(Node *node, size_t pinIdx)
Function to call to delete a pin.
Definition Plot.cpp:1768
gui::widgets::DynamicInputPins _dynamicInputPins
Dynamic input pins.
Definition Plot.hpp:378
size_t _screenshotFrameCnt
Frame counter for taking screenshots (> 0 when screenshot in progress)
Definition Plot.hpp:364
void restore(const json &j) override
Restores the node from a json object.
Definition Plot.cpp:1484
void plotData(const std::shared_ptr< const T > &obs, size_t pinIndex, size_t &plotIndex, size_t startIndex=0)
Plot the data.
Definition Plot.hpp:436
Plot(const Plot &)=delete
Copy constructor.
void plotFlowData(InputPin::NodeDataQueue &queue, size_t pinIdx)
Plot the data on this port.
Definition Plot.cpp:2016
void plotFloat(const InsTime &insTime, size_t pinIdx)
Plots the data on this port.
Definition Plot.cpp:1927
int _dragAndDropHeaderIndex
Index of the Collapsible Header currently being dragged.
Definition Plot.hpp:362
std::string type() const override
String representation of the Class Type.
Definition Plot.cpp:341
bool _overridePositionStartValues
Flag, whether to override the North/East startValues in the GUI.
Definition Plot.hpp:374
Plot & operator=(Plot &&)=delete
Move assignment operator.
CommonLog::LocalPosition calcLocalPosition(const Eigen::Vector3d &lla_position)
Calculate the local position offset from the plot origin.
Definition Plot.cpp:1852
std::vector< PinData > _pinData
Data storage for each pin.
Definition Plot.hpp:324
std::optional< gui::widgets::PositionWithFrame > _originPosition
Start position for the calculation of relative North-South and East-West.
Definition Plot.hpp:371
void deinitialize() override
Deinitialize the node.
Definition Plot.cpp:1599
size_t _screenShotPlotIdx
Plot index a screenshot is taken of.
Definition Plot.hpp:365
void plotMatrix(const InsTime &insTime, size_t pinIdx)
Plots the data on this port.
Definition Plot.cpp:1953
size_t GPST_PLOT_IDX
Index of the GPST data (unix timestamp)
Definition Plot.hpp:321
Plot()
Default constructor.
Definition Plot.cpp:295
Plot & operator=(const Plot &)=delete
Copy assignment operator.
json save() const override
Saves the node into a json object.
Definition Plot.cpp:1465
static std::string category()
String representation of the Class Category.
Definition Plot.cpp:346
static void pinAddCallback(Node *node)
Function to call to add a new pin.
Definition Plot.cpp:1756
std::pair< std::unordered_set< size_t >, ImPlotRange > _forceXaxisRange
Values to force the x axis range to and a set of plotIdx to force.
Definition Plot.hpp:368
void addEvent(size_t pinIndex, InsTime insTime, const std::string &text, int32_t dataIndex)
Adds a event to a certain point in time.
Definition Plot.cpp:1800
void addData(size_t pinIndex, size_t dataIndex, double value)
Add Data to the buffer of the pin.
Definition Plot.cpp:1809
void plotBoolean(const InsTime &insTime, size_t pinIdx)
Plots the data on this port.
Definition Plot.cpp:1875
~Plot() override
Destructor.
Definition Plot.cpp:331
void updateNumberOfPlots()
Adds/Deletes Plots depending on the variable nPlots.
Definition Plot.cpp:1744
void afterCreateLink(OutputPin &startPin, InputPin &endPin) override
Called when a new link was established.
Definition Plot.cpp:1604
std::vector< PlotInfo > _plots
Info for each plot window.
Definition Plot.hpp:327
void guiConfig() override
ImGui config window which is shown on double click.
Definition Plot.cpp:351
size_t _nPlots
Amount of plot windows (should equal _plots.size())
Definition Plot.hpp:330
Plot(Plot &&)=delete
Move constructor.
std::vector< std::string > _dataIdentifier
Possible data identifiers to connect.
Definition Plot.hpp:332
bool initialize() override
Initialize the node.
Definition Plot.cpp:1557
static std::string type()
Returns the type of the data class.
Definition PosVelAtt.hpp:29
static std::string type()
Returns the type of the data class.
Definition PosVel.hpp:27
static std::string type()
Returns the type of the data class.
Definition Pos.hpp:36
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
A buffer which is overwriting itself from the start when full.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
void move(std::vector< T > &v, size_t sourceIdx, size_t targetIdx)
Moves an element within a vector to a new position.
Definition Vector.hpp:27
Local position offset from a reference point.
Definition CommonLog.hpp:54
Specifying the look of a certain line in the plot.
bool isDynamic
Bool to show if dynamic data.
Definition Plot.hpp:123
PlotData()=default
Default constructor (needed to make serialization with json working)
bool hasData
Flag if data was received, as the buffer contains std::nan("") otherwise.
Definition Plot.hpp:118
bool markedForDelete
When connecting a new link. All data is flagged for delete and only those who are also present in the...
Definition Plot.hpp:121
ScrollingBuffer< double > buffer
Buffer for the data.
Definition Plot.hpp:116
std::string displayName
Display name of the contained data.
Definition Plot.hpp:114
std::mutex mutex
Mutex to lock the buffer so that the GUI thread and the calculation threads don't cause a data race.
Definition Plot.hpp:173
~PinData()=default
Destructor.
PinType
Possible Pin types.
Definition Plot.hpp:128
@ Int
Integer Number.
Definition Plot.hpp:131
@ Float
Floating Point Number.
Definition Plot.hpp:132
@ Flow
NodeData Trigger.
Definition Plot.hpp:129
@ Matrix
Matrix Object.
Definition Plot.hpp:133
std::vector< std::tuple< double, InsTime, std::string, int32_t > > events
Events with relative time, absolute time, tooltip text and data Index (-1 means all)
Definition Plot.hpp:177
PinData()=default
Constructor.
int size
Size of all buffers of the plotData elements.
Definition Plot.hpp:161
ScrollingBuffer< std::shared_ptr< const NodeData > > rawNodeData
List with the raw data received.
Definition Plot.hpp:167
int stride
Amount of points to skip for plotting.
Definition Plot.hpp:171
PinData & operator=(const PinData &rhs)
Copy assignment operator.
Definition Plot.cpp:222
PinType pinType
Pin Type.
Definition Plot.hpp:169
int dynamicDataStartIndex
Dynamic data start index.
Definition Plot.hpp:175
std::vector< PlotData > plotData
List with all the data.
Definition Plot.hpp:165
std::string dataIdentifier
Data Identifier of the connected pin.
Definition Plot.hpp:163
void addPlotDataItem(size_t dataIndex, const std::string &displayName)
Adds a plotData Element to the list.
Definition Plot.cpp:252
std::string displayName
Display name of the data (not changing and unique)
Definition Plot.hpp:221
ScrollingBuffer< ImU32 > markerColormapMaskColors
Buffer for the colormap mask.
Definition Plot.hpp:229
PlotItem()=default
Default constructor (needed to make serialization with json working)
size_t pinIndex
Index of the pin where the data came in.
Definition Plot.hpp:219
std::vector< std::tuple< double, double, PlotEventTooltip > > eventTooltips
List of tooltips (x,y, tooltip)
Definition Plot.hpp:240
ScrollingBuffer< double > eventMarker
Buffer for event markers.
Definition Plot.hpp:234
PlotItem(size_t pinIndex, size_t dataIndex, std::string displayName, ImAxis axis)
Constructor.
Definition Plot.hpp:205
ScrollingBuffer< ImU32 > colormapMaskColors
Buffer for the colormap mask.
Definition Plot.hpp:225
size_t colormapMaskVersion
Colormap version (to track updates of the colormap)
Definition Plot.hpp:227
size_t dataIndex
Index of the data on the pin.
Definition Plot.hpp:220
constexpr bool operator==(const PlotItem &rhs) const
Equal comparison operator (needed to search the vector with std::find)
Definition Plot.hpp:214
std::array< ScrollingBuffer< double >, 2 > errorBoundsData
Error bounds lower and upper data.
Definition Plot.hpp:237
size_t markerColormapMaskVersion
Colormap version (to track updates of the colormap)
Definition Plot.hpp:231
PlotItem(size_t pinIndex, size_t dataIndex, std::string displayName)
Constructor.
Definition Plot.hpp:193
ImAxis axis
Axis to plot the data on (Y1, Y2, Y3)
Definition Plot.hpp:222
ImVec2 size
Size of the plot.
Definition Plot.hpp:253
bool visible
Flag whether the whole plot is visible. If not, then it should be deleted.
Definition Plot.hpp:296
std::string y2AxisLabel
Y2 axis label.
Definition Plot.hpp:266
std::string headerText
Title of the CollapsingHeader.
Definition Plot.hpp:258
std::array< ImPlotScale, 3 > yAxesScale
Scale for the y-Axes.
Definition Plot.hpp:280
ImPlotLineFlags lineFlags
Line Flags for all items (each item can override the selection)
Definition Plot.hpp:282
ImPlotAxisFlags xAxisFlags
Flags for the x-Axis.
Definition Plot.hpp:274
float leftPaneWidth
Width of plot Data content.
Definition Plot.hpp:291
int plotFlags
Flags which are passed to the plot.
Definition Plot.hpp:272
bool overrideXAxisLabel
Flag, whether to override the x axis label.
Definition Plot.hpp:260
std::vector< PlotTooltip > tooltips
List of tooltip windows to show.
Definition Plot.hpp:299
std::string xAxisLabel
X axis label.
Definition Plot.hpp:262
size_t selectedPin
Selected pin in the GUI for the Drag & Drop Data.
Definition Plot.hpp:270
ImPlotScale xAxisScale
Scale for the x-Axis.
Definition Plot.hpp:278
PlotInfo(const std::string &title, size_t nInputPins)
Constructor.
Definition Plot.hpp:249
PlotInfo()=default
Default constructor.
float rightPaneWidth
Width of the plot.
Definition Plot.hpp:293
std::vector< PlotItem > plotItems
List containing all elements which should be plotted.
Definition Plot.hpp:288
std::vector< size_t > selectedXdata
Key: PinIndex, Value: plotData to use for x-Axis.
Definition Plot.hpp:285
std::string title
Title of the ImPlot.
Definition Plot.hpp:256
std::string y1AxisLabel
Y1 axis label.
Definition Plot.hpp:264
ImPlotAxisFlags yAxisFlags
Flags for the y-Axes.
Definition Plot.hpp:276
std::string y3AxisLabel
Y3 axis label.
Definition Plot.hpp:268
Inputs pins which can be added dynamically.