142 lines
2.8 KiB
C++
142 lines
2.8 KiB
C++
#ifndef MAPVIEW3D_H
|
|
#define MAPVIEW3D_H
|
|
|
|
#include "../../fixC11.h"
|
|
|
|
#include <QtWidgets>
|
|
#include <QOpenGLWidget>
|
|
#include <QOpenGLFunctions>
|
|
|
|
#include <Indoor/geo/Point3.h>
|
|
|
|
class MapModel;
|
|
class GridModel;
|
|
class GridRenderer;
|
|
class NavMeshRenderer;
|
|
class NavMeshModel;
|
|
class FloorplanRenderer;
|
|
class FloorplanRendererModel;
|
|
|
|
class MapView3D : public QOpenGLWidget, protected QOpenGLFunctions {
|
|
|
|
Q_OBJECT
|
|
|
|
bool usePerspectiveProjection = false;
|
|
bool useWireframe = false;
|
|
|
|
QOpenGLDebugLogger* logger = nullptr;
|
|
|
|
public:
|
|
|
|
MapView3D(QWidget* parent = 0);
|
|
|
|
/** set the underlying data-model */
|
|
void setModel(MapModel* mdl) {
|
|
this->model = mdl;
|
|
update();
|
|
}
|
|
|
|
/** redraw on layer change */
|
|
void layerChange();
|
|
|
|
|
|
/** get the underlying data-model */
|
|
MapModel* getModel() {return model;}
|
|
|
|
|
|
/** get the renderer to use for the floorplan */
|
|
FloorplanRenderer* getFloorplanRenderer() {return floorplanRenderer;}
|
|
|
|
/** get the renderer to use for the grid */
|
|
GridRenderer* getGridRenderer() {return gridRenderer;}
|
|
|
|
/** get the renderer to use for the NavMesh */
|
|
NavMeshRenderer* getNavMeshRenderer() {return navMeshRenderer;}
|
|
|
|
|
|
// /** show 3D rendered floorplan */
|
|
// void showFloorplan();
|
|
|
|
// /** show 3D rendered grid derived from the floorplan */
|
|
// void showGrid();
|
|
|
|
// /** show 3D rendered NavMesh derived from the floorplan */
|
|
// void showNavMesh();
|
|
|
|
/** show 3D rendered floorplan */
|
|
void setShowFloorplan(bool show);
|
|
|
|
/** show 3D rendered grid derived from the floorplan */
|
|
void setShowGrid(bool show);
|
|
|
|
/** show 3D rendered NavMesh derived from the floorplan */
|
|
void setShowNavMesh(bool show);
|
|
|
|
private:
|
|
|
|
/** the underlying data-model */
|
|
MapModel* model = nullptr;
|
|
|
|
FloorplanRenderer* floorplanRenderer = nullptr;
|
|
FloorplanRendererModel* floorplanRendererModel = nullptr;
|
|
|
|
GridModel* gridModel = nullptr;
|
|
GridRenderer* gridRenderer = nullptr;
|
|
|
|
NavMeshModel* navMeshModel = nullptr;
|
|
NavMeshRenderer* navMeshRenderer = nullptr;
|
|
|
|
bool showFloorplan = true;
|
|
bool showGrid = false;
|
|
bool showNavMesh = false;
|
|
|
|
Point3 rot;
|
|
Point3 center;
|
|
Point3 scale;
|
|
|
|
struct Mouse {
|
|
int btn;
|
|
float x;
|
|
float y;
|
|
} mouse;
|
|
|
|
struct Viewport {
|
|
Point2 size;
|
|
} viewport;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void initializeGL();
|
|
void paintGL();
|
|
void resizeGL(int width, int height);
|
|
|
|
void mousePressEvent(QMouseEvent* e);
|
|
void mouseMoveEvent(QMouseEvent* e);
|
|
void mouseReleaseEvent(QMouseEvent* e);
|
|
void wheelEvent(QWheelEvent* e);
|
|
|
|
// android
|
|
bool event(QEvent *e) override;
|
|
bool gestureEvent(QGestureEvent* event);
|
|
void pinchTriggered(QPinchGesture* gesture);
|
|
void panTriggered(QPanGesture* gesture);
|
|
|
|
private:
|
|
|
|
void moveXY(float dx, float dy);
|
|
|
|
signals:
|
|
|
|
void onShow3DFloorplan(bool show);
|
|
void onShow3DGrid(bool show);
|
|
void onShow3DNavMesh(bool show);
|
|
|
|
private:
|
|
void draw();
|
|
|
|
};
|
|
|
|
#endif // MAPVIEW3D_H
|