This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
IndoorMap/mapview/3D/MapView3D.h
2018-04-04 11:00:57 +02:00

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