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-10-25 12:23:40 +02:00

152 lines
3.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* © 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