#pragma once #include #include #include #include #include #include struct Curve { QVector points; QVector3D color; }; class TrajectoryWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: explicit TrajectoryWidget(QWidget *parent = nullptr); void setCurves(const QVector& 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 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}; };