added nav-mesh support to indoor-map
some fixes/changes
This commit is contained in:
85
mapview/3DNavMesh/NavMeshModel.h
Normal file
85
mapview/3DNavMesh/NavMeshModel.h
Normal 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
|
||||
Reference in New Issue
Block a user