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