48 lines
1.0 KiB
C++
Executable File
48 lines
1.0 KiB
C++
Executable File
#pragma once
|
|
|
|
#include <QOpenGLWidget>
|
|
#include <QOpenGLFunctions>
|
|
#include <QOpenGLShaderProgram>
|
|
#include <QVector3D>
|
|
#include <QVector>
|
|
#include <QPoint>
|
|
|
|
struct Curve {
|
|
QVector<QVector3D> points;
|
|
QVector3D color;
|
|
};
|
|
|
|
class TrajectoryWidget : public QOpenGLWidget, protected QOpenGLFunctions
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit TrajectoryWidget(QWidget *parent = nullptr);
|
|
|
|
void setCurves(const QVector<Curve>& curves);
|
|
void addCurve(const Curve& curve);
|
|
void clearCurves();
|
|
|
|
protected:
|
|
void initializeGL() override;
|
|
void resizeGL(int w, int h) override;
|
|
void paintGL() override;
|
|
|
|
void mousePressEvent(QMouseEvent *event) override;
|
|
void mouseMoveEvent(QMouseEvent *event) override;
|
|
void wheelEvent(QWheelEvent *event) override;
|
|
|
|
private slots:
|
|
void fitViewToCurves();
|
|
|
|
private:
|
|
QVector<Curve> m_curves;
|
|
|
|
QOpenGLShaderProgram m_program;
|
|
float m_rotX = 20.0f;
|
|
float m_rotY = -30.0f;
|
|
float m_zoom = -10.0f;
|
|
QPoint m_lastMousePos;
|
|
QVector3D m_viewCenter{0, 0, 0};
|
|
};
|