added nav-mesh support to indoor-map
some fixes/changes
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user