152 lines
3.1 KiB
C++
152 lines
3.1 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#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
|