refactoring to add nav mesh

This commit is contained in:
k-a-z-u
2018-07-11 19:04:42 +02:00
parent bb974d3871
commit b4a1a3d969
27 changed files with 1581 additions and 712 deletions

View File

@@ -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);
}