refactoring to add nav mesh
This commit is contained in:
@@ -11,6 +11,9 @@
|
||||
#include <Indoor/grid/factory/v2/GridFactory.h>
|
||||
#include <Indoor/grid/factory/v2/Importance.h>
|
||||
|
||||
#include <Indoor/navMesh/NavMesh.h>
|
||||
#include <Indoor/navMesh/NavMeshFactory.h>
|
||||
|
||||
#include <Indoor/floorplan/v2/Floorplan.h>
|
||||
#include <Indoor/floorplan/v2/FloorplanReader.h>
|
||||
#include <Indoor/floorplan/v2/FloorplanHelper.h>
|
||||
@@ -34,6 +37,8 @@
|
||||
#include "tools/calibration/WiFiCalibrationDataModel.h"
|
||||
|
||||
#include "nav/NavController.h"
|
||||
#include "nav/grid/NavControllerGrid.h"
|
||||
#include "nav/mesh/NavControllerMesh.h"
|
||||
|
||||
|
||||
Controller::Controller() {
|
||||
@@ -196,12 +201,19 @@ void Controller::on3DButton() {
|
||||
|
||||
void Controller::onLoadButton() {
|
||||
|
||||
|
||||
// pick a map to load
|
||||
QDir dir = LoadSetupDialog::pickSetupFolder();
|
||||
|
||||
// cancelled?
|
||||
if (dir.path() == ".") { return; }
|
||||
|
||||
loadNavMesh(dir);
|
||||
|
||||
}
|
||||
|
||||
void Controller::loadGrid(QDir dir) {
|
||||
|
||||
QFile fMap(dir.path() + "/map.xml");
|
||||
QFile fGrid(dir.path() + "/grid.dat");
|
||||
QFile fWiFiFP(dir.path() + "/wifi_fp.dat");
|
||||
@@ -213,14 +225,6 @@ void Controller::onLoadButton() {
|
||||
QString str = QString(fMap.readAll());
|
||||
im = Floorplan::Reader::readFromString(str.toStdString());
|
||||
|
||||
|
||||
//just for debugging and testing in SHL REMOVE THAT LATER IMPORTANT!!!!
|
||||
// im->floors[0]->obstacles.clear();
|
||||
// im->floors[1]->obstacles.clear();
|
||||
// im->floors[2]->obstacles.clear();
|
||||
// im->floors[3]->obstacles.clear();
|
||||
|
||||
|
||||
const std::string sGrid = fGrid.fileName().toStdString();
|
||||
std::ifstream inp(sGrid, std::ifstream::binary);
|
||||
//Assert::isTrue(inp.good(), "failed to open grid.dat");
|
||||
@@ -240,7 +244,7 @@ void Controller::onLoadButton() {
|
||||
|
||||
// create a new navigator
|
||||
if (nav) {delete nav; nav = nullptr;}
|
||||
nav = new NavController(this, grid, im);
|
||||
nav = new GridBased::NavControllerGrid(this, im, grid);
|
||||
|
||||
WiFiCalibrationDataModel* wifiCalib = new WiFiCalibrationDataModel(sWiFiFP);
|
||||
|
||||
@@ -255,6 +259,44 @@ void Controller::onLoadButton() {
|
||||
// attach ipin step logger
|
||||
//nav->addListener(sl);
|
||||
|
||||
}
|
||||
|
||||
void Controller::loadNavMesh(QDir dir) {
|
||||
|
||||
QFile fMap(dir.path() + "/map.xml");
|
||||
QFile fGrid(dir.path() + "/grid.dat");
|
||||
QFile fWiFiFP(dir.path() + "/wifi_fp.dat");
|
||||
|
||||
Assert::isTrue(fMap.exists(), "map.xml missing");
|
||||
|
||||
fMap.open(QIODevice::ReadOnly);
|
||||
QString str = QString(fMap.readAll());
|
||||
im = Floorplan::Reader::readFromString(str.toStdString());
|
||||
|
||||
const std::string sWiFiFP = fWiFiFP.fileName().toStdString();
|
||||
|
||||
// create navmesh
|
||||
if (navMesh) {delete navMesh; navMesh = nullptr;}
|
||||
NM::NavMeshSettings settings;
|
||||
NM::NavMeshFactory<NM::NavMeshTriangle> fac(navMesh, settings);
|
||||
fac.build(im);
|
||||
|
||||
// create a new navigator
|
||||
if (nav) {delete nav; nav = nullptr;}
|
||||
nav = new MeshBased::NavControllerMesh(this, im, navMesh);
|
||||
|
||||
WiFiCalibrationDataModel* wifiCalib = new WiFiCalibrationDataModel(sWiFiFP);
|
||||
|
||||
getMapView3D()->setMap(im);
|
||||
getMapView2D()->setMap(wifiCalib, im);
|
||||
|
||||
getMapView3D()->showGridImportance(grid);
|
||||
getMapView2D()->showGridImportance(grid);
|
||||
|
||||
getMapView3D()->setVisible(false);
|
||||
|
||||
// attach ipin step logger
|
||||
//nav->addListener(sl);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user