From caca1bf2198c40d18ce9d6400030b7ebb9c5f6cf Mon Sep 17 00:00:00 2001 From: k-a-z-u Date: Wed, 4 Apr 2018 13:00:51 +0200 Subject: [PATCH] added lint for doors small obj-pool fix --- floorplan/v2/FloorplanLINT.h | 13 +++++++++++-- wifi/estimate/ray3/ModelFactory.h | 12 ++++++++++-- wifi/estimate/ray3/OBJPool.h | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/floorplan/v2/FloorplanLINT.h b/floorplan/v2/FloorplanLINT.h index 3ce9d24..30314b3 100644 --- a/floorplan/v2/FloorplanLINT.h +++ b/floorplan/v2/FloorplanLINT.h @@ -3,6 +3,7 @@ #include "Floorplan.h" #include "../../geo/BBox2.h" +#include "../../wifi/estimate/ray3/ModelFactory.h" #include #include @@ -84,7 +85,7 @@ namespace Floorplan { // check obstacles for (const FloorObstacle* obs : floor->obstacles) { - checkObstacle(res, floor, obs); + checkObstacle(res, map, floor, obs); } // check fingerprints @@ -127,7 +128,7 @@ namespace Floorplan { } /** check walls, doors, ... */ - static void checkObstacle(Issues& res, const Floor* floor, const FloorObstacle* fo) { + static void checkObstacle(Issues& res, const IndoorMap* map, const Floor* floor, const FloorObstacle* fo) { // line? -> check const FloorObstacleLine* line = dynamic_cast(fo); @@ -145,6 +146,14 @@ namespace Floorplan { if (len_m < 0.40) { res.push_back(Issue(Type::ERR, floor, "' door is too narrow: " + std::to_string(len_m) + " meter from " + door->from.asString() + " to " + door->to.asString())); } + + try { + Ray3D::ModelFactory fac(map); + fac.getDoorAbove(floor, door); + } catch (Exception e) { + res.push_back(Issue(Type::ERR, floor, std::string(e.what()) + "[from" + door->from.asString() + " to " + door->to.asString() + "]")); + } + } // pillar? -> check diff --git a/wifi/estimate/ray3/ModelFactory.h b/wifi/estimate/ray3/ModelFactory.h index fd8cb6e..4ccc10d 100644 --- a/wifi/estimate/ray3/ModelFactory.h +++ b/wifi/estimate/ray3/ModelFactory.h @@ -116,7 +116,7 @@ namespace Ray3D { - private: + public: /** convert a floor (floor/ceiling) into triangles */ std::vector getFloor(const Floorplan::Floor* f) { @@ -426,10 +426,18 @@ namespace Ray3D { return (line->from == door->from || line->to == door->from || line->from == door->to || line->to == door->to); }; auto it = std::find_if(f->obstacles.begin(), f->obstacles.end(), comp); + + // there is absolutely nothing attached directly to the door... + if (it == f->obstacles.end()) { + throw Exception("did not find a matching element to place above the door"); + } + + // try to convert the element directly connected to the door into a line-obstacle const Floorplan::FloorObstacleLine* line = dynamic_cast (*it); + // there seems to be no wall (but something else?!) attached to the door. fishy.. if (!line) { - throw Exception("did not find a matching element to place above the door"); + throw Exception("did not find a matching wall to place above the door"); } // get the obstacle to place above the door diff --git a/wifi/estimate/ray3/OBJPool.h b/wifi/estimate/ray3/OBJPool.h index 5aff034..a10c2d7 100644 --- a/wifi/estimate/ray3/OBJPool.h +++ b/wifi/estimate/ray3/OBJPool.h @@ -57,6 +57,7 @@ namespace Ray3D { scanFolder(folder); } catch (...) {;} } + initDone = true; }