Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
FrameGraphCanvas.h
Go to the documentation of this file.
1#pragma once
2
3#include <QWidget>
4#include <array>
5#include <atomic>
6#include <memory>
7#include <vector>
8#include <QPointF>
9#include <QPixmap>
10#include <QTimer>
11
12#include "Metric.h"
13#include "physics/PhysicsBody.h"
14
15class FrameGraphCanvas : public QWidget {
16 Q_OBJECT
17public:
18 explicit FrameGraphCanvas(QWidget* parent = nullptr);
19 void setSharedData(std::shared_ptr<const std::vector<ObjectSnapshot>> frames,
20 const std::array<std::pair<float, float>, kPlottableMetricCount>& valueMinMax, float tMin, float tMax);
21 void clear();
22 void setMetric(Metric metric);
23protected:
24 void paintEvent(QPaintEvent* event) override;
25 void mouseMoveEvent(QMouseEvent* event) override;
26 void leaveEvent(QEvent* event) override;
27 void resizeEvent(QResizeEvent* event) override;
28private:
29 int bottomLabelHeight() const;
30 QRect plotRect() const;
31 void requestPointRebuild();
32 void invalidateCache();
33 void rebuildBaseCache();
34 void applyRebuiltPoints(uint64_t generation, std::vector<QPointF> points, std::vector<size_t> frameIndices);
35 Metric currentMetric = Metric::PositionX;
36 std::shared_ptr<const std::vector<ObjectSnapshot>> framesData;
37 std::array<std::pair<float, float>, kPlottableMetricCount> valueMinMaxPerMetric{};
38 float tMin = 0.0f;
39 float tMax = 0.0f;
40 std::vector<QPointF> graphPoints;
41 std::vector<size_t> graphPointFrameIndices;
42 QPixmap baseCache;
43 QTimer resizeRebuildTimer;
44 std::atomic<uint64_t> rebuildGeneration{0};
45 bool cacheDirty = true;
46 int hoverIndex = -1;
47};
constexpr std::size_t kPlottableMetricCount
Definition Metric.h:21
Metric
Definition Metric.h:9
void mouseMoveEvent(QMouseEvent *event) override
void setSharedData(std::shared_ptr< const std::vector< ObjectSnapshot > > frames, const std::array< std::pair< float, float >, kPlottableMetricCount > &valueMinMax, float tMin, float tMax)
void resizeEvent(QResizeEvent *event) override
void leaveEvent(QEvent *event) override
void setMetric(Metric metric)
void paintEvent(QPaintEvent *event) override