#ifndef MESH_VIEWER_H #define MESH_VIEWER_H #define GL_GLEXT_PROTOTYPES #include "my_mesh.h" #include "mesh_view.h" #include #include #include #include #include #include #include #include #define WIREFRAME_COLOR 0, 0, 0 #define FOV 40 using namespace OpenMesh; class MeshViewer : public QOpenGLWidget { Q_OBJECT std::list meshes; QOpenGLShaderProgram program; QMatrix4x4 proj; QMatrix4x4 zoom = QMatrix4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1); QMatrix4x4 rot, trans; QMatrix4x4 view; QPoint mouse_pos; void updateViewMatrix(); bool is_initialized = false; public: MeshViewer(QWidget *parent=nullptr); virtual QSize sizeHint() const override; void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; constexpr bool isInitialized() { return is_initialized; } public slots: void addMesh(MyMesh &mesh); void removeMesh(const MyMesh &mesh); void updateForReal(); protected: virtual void mousePressEvent(QMouseEvent *e); virtual void mouseReleaseEvent(QMouseEvent *e); virtual void mouseMoveEvent(QMouseEvent *e); virtual void wheelEvent(QWheelEvent *e); signals: void initialized(); void clicked(QVector3D position); }; #endif