added nav-mesh support to indoor-map

some fixes/changes
This commit is contained in:
2018-01-16 12:43:45 +01:00
parent 281ef3f7dc
commit 4dda7e656b
16 changed files with 524 additions and 60 deletions

View File

@@ -26,7 +26,8 @@ protected:
glDisable(GL_CULL_FACE);
glColor3f(1.0, 0.55, 0.55);
//glColor3f(1.0, 0.55, 0.55);
glColor3f(0.3, 0.3, 0.3);
glBegin(GL_QUADS);
const std::vector<Floorplan::StairPart> parts = stair->getParts();

View File

@@ -7,6 +7,9 @@
#include "../3DGrid/GridModel.h"
#include "../3DGrid/GridRenderer.h"
#include "../3DNavMesh/NavMeshModel.h"
#include "../3DNavMesh/NavMeshRenderer.h"
MapView3D::MapView3D(QWidget *parent) : QGLWidget(parent) {
rot.x = 45;
@@ -180,12 +183,20 @@ void MapView3D::wheelEvent(QWheelEvent* e) {
}
void MapView3D::showFloorplan() {
if (gridModel) {delete gridModel; gridModel = nullptr;}
void MapView3D::setShowFloorplan(bool show) {
this->showFloorplan = show;
//if (gridModel) {delete gridModel; gridModel = nullptr;}
//if (navMeshModel) {delete navMeshModel; navMeshModel = nullptr;}
update();
}
void MapView3D::showGrid() {
void MapView3D::setShowGrid(bool show) {
this->showGrid = show;
if (!show) {update(); return;}
// delete the previous grid (if any)
if (gridModel) {delete gridModel; gridModel = nullptr;}
@@ -203,31 +214,53 @@ void MapView3D::showGrid() {
}
void MapView3D::setShowNavMesh(bool show) {
this->showNavMesh = show;
if (!show) {update(); return;}
// delete the previous grid (if any)
if (navMeshModel) {delete navMeshModel; navMeshModel = nullptr;}
// build a new model
NavMeshModel* nm = new NavMeshModel();
Floorplan::IndoorMap* im = getModel()->getMap();
nm->rebuild(im);
// remember
this->navMeshModel = nm;
// update UI
update();
}
void MapView3D::draw() {
if (gridModel) {
// show grid
gridRenderer->paintGL(gridModel->getGrid());
} else {
// solid floorplan parts
if (showFloorplan) {
std::vector<MapModelElement*> elements = getModel()->getVisibleElements();
// order: transparent last
auto func = [] (const MapModelElement* e1, const MapModelElement* e2) {
if (e1->getMV3D() == nullptr) {return false;}
if (e2->getMV3D() == nullptr) {return true;}
const bool e1t = e1->getMV3D()->isTransparent();
const bool e2t = e2->getMV3D()->isTransparent();
return e1t < e2t;
};
std::sort(elements.begin(), elements.end(), func);
// show floorplan
for (MapModelElement* el : elements) {
if (el->getMV3D()) {el->getMV3D()->paintGL();}
if (el->getMV3D() && !el->getMV3D()->isTransparent()) {el->getMV3D()->paintGL();}
}
}
if (showGrid) {
gridRenderer->paintGL(gridModel->getGrid());
}
if (showNavMesh) {
navMeshRenderer->paintGL(navMeshModel->getNavMesh(), this);
}
// transparant floorplan parts
if (showFloorplan) {
std::vector<MapModelElement*> elements = getModel()->getVisibleElements();
for (MapModelElement* el : elements) {
if (el->getMV3D() && el->getMV3D()->isTransparent()) {el->getMV3D()->paintGL();}
}
}

View File

@@ -9,6 +9,8 @@
class MapModel;
class GridModel;
class GridRenderer;
class NavMeshRenderer;
class NavMeshModel;
class MapView3D : public QGLWidget {
@@ -34,13 +36,27 @@ public:
/** 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 showFloorplan();
void setShowFloorplan(bool show);
/** show 3D rendered grid derived from the floorplan */
void showGrid();
void setShowGrid(bool show);
/** show 3D rendered NavMesh derived from the floorplan */
void setShowNavMesh(bool show);
private:
@@ -50,6 +66,13 @@ private:
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;
@@ -67,6 +90,7 @@ private:
protected:
void initializeGL();
void paintGL();
void resizeGL(int width, int height);