mod_geo-tp/src/mesh_viewer.h

66 lines
1.4 KiB
C++

#ifndef MESH_VIEWER_H
#define MESH_VIEWER_H
#define GL_GLEXT_PROTOTYPES
#include "my_mesh.h"
#include "mesh_view.h"
#include <list>
#include <QMatrix4x4>
#include <QColor>
#include <QDebug>
#include <QOpenGLWidget>
#include <QOpenGLShaderProgram>
#include <QOpenGLFunctions>
#include <QMouseEvent>
#define WIREFRAME_COLOR 0, 0, 0
#define FOV 40
using namespace OpenMesh;
class MeshViewer : public QOpenGLWidget {
Q_OBJECT
std::list<MeshView> 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