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

@@ -0,0 +1,85 @@
#ifndef NAVMESHMODEL_H
#define NAVMESHMODEL_H
#include <Indoor/floorplan/v2/Floorplan.h>
#include <Indoor/navMesh/NavMesh.h>
#include <Indoor/navMesh/NavMeshFactory.h>
#include <Indoor/navMesh/NavMeshFactoryListener.h>
#include <QProgressDialog>
#include <QApplication>
#include <QVBoxLayout>
#include <QLabel>
#include <QProgressBar>
#include "QNavMeshSettings.h"
/**
* used for 3D NavMesh rendering
*/
class NavMeshModel {
private:
NM::NavMesh<NM::NavMeshTriangle> navMesh;
NM::NavMeshSettings settings;
Floorplan::IndoorMap* im;
public:
NavMeshModel() : navMesh() {
;
}
NM::NavMesh<NM::NavMeshTriangle>* getNavMesh() {return &navMesh;}
class Listener : public NM::NavMeshFactoryListener {
private:
QDialog dlg;
QLabel* lbl1;
QProgressBar* bar1;
public:
Listener() {
QVBoxLayout* lay = new QVBoxLayout(&dlg);
lbl1 = new QLabel(); lay->addWidget(lbl1);
bar1 = new QProgressBar(); lay->addWidget(bar1);
dlg.resize(350, 90);
dlg.setWindowTitle("NavMesh building");
dlg.show();
}
~Listener() {
dlg.close();
}
void onNavMeshBuildUpdateMajor(const std::string& what) override {
lbl1->setText(what.c_str());
QApplication::processEvents();
}
void onNavMeshBuildUpdateMajor(const int cnt, const int cur) override {
bar1->setValue(cur*100/cnt);
QApplication::processEvents();
}
};
void rebuild(Floorplan::IndoorMap* im) {
Listener l;
QNavMeshSettings qs(&settings);
qs.exec();
if (qs.ok) {
NM::NavMeshFactory<NM::NavMeshTriangle> fac(&navMesh, settings);
fac.build(im, &l);
}
}
};
#endif // NAVMESHMODEL_H