started working on walling, dooring and windowing
refactoring
This commit is contained in:
@@ -157,6 +157,12 @@ namespace Floorplan {
|
||||
_END,
|
||||
};
|
||||
|
||||
/** available window types */
|
||||
enum class WindowType {
|
||||
UNKNOWN,
|
||||
_END,
|
||||
};
|
||||
|
||||
/** all supported material types */
|
||||
enum class Material {
|
||||
UNKNOWN,
|
||||
@@ -193,6 +199,7 @@ namespace Floorplan {
|
||||
struct Elevator;
|
||||
struct GroundTruthPoint;
|
||||
struct FloorObstacleWallDoor;
|
||||
struct FloorObstacleWallWindow;
|
||||
|
||||
struct FloorOutline : public std::vector<FloorOutlinePolygon*> {
|
||||
bool enabled = true;
|
||||
@@ -351,7 +358,6 @@ namespace Floorplan {
|
||||
Point2 to;
|
||||
float thickness_m;
|
||||
float height_m = 0; // 0 = floor's height
|
||||
std::vector<FloorObstacleWallDoor*> doors;
|
||||
FloorObstacleLine(const ObstacleType type, const Material material, const Point2 from, const Point2 to, const float thickness_m = 0.2f, const float height_m = 0) : FloorObstacle(material), type(type), from(from), to(to), thickness_m(thickness_m), height_m(height_m) {;}
|
||||
FloorObstacleLine(const ObstacleType type, const Material material, const float x1, const float y1, const float x2, const float y2, const float thickness_m = 0.2f, const float height_m = 0) : FloorObstacle(material), type(type), from(x1,y1), to(x2,y2), thickness_m(thickness_m), height_m(height_m) {;}
|
||||
};
|
||||
@@ -378,7 +384,21 @@ namespace Floorplan {
|
||||
float getSize() const {return (to-from).length();}
|
||||
};
|
||||
|
||||
/** door obstacle */
|
||||
|
||||
/** wall obstacle */
|
||||
struct FloorObstacleWall: public FloorObstacle {
|
||||
ObstacleType type;
|
||||
Point2 from;
|
||||
Point2 to;
|
||||
float thickness_m;
|
||||
float height_m = 0; // 0 = floor's height
|
||||
std::vector<FloorObstacleWallDoor*> doors;
|
||||
std::vector<FloorObstacleWallWindow*> windows;
|
||||
FloorObstacleWall(const ObstacleType type, const Material material, const Point2 from, const Point2 to, const float thickness_m = 0.2f, const float height_m = 0) : FloorObstacle(material), type(type), from(from), to(to), thickness_m(thickness_m), height_m(height_m) {;}
|
||||
FloorObstacleWall(const ObstacleType type, const Material material, const float x1, const float y1, const float x2, const float y2, const float thickness_m = 0.2f, const float height_m = 0) : FloorObstacle(material), type(type), from(x1,y1), to(x2,y2), thickness_m(thickness_m), height_m(height_m) {;}
|
||||
};
|
||||
|
||||
/** wall->door obstacle */
|
||||
struct FloorObstacleWallDoor : public FloorObstacle {
|
||||
DoorType type;
|
||||
float atLinePos;
|
||||
@@ -386,17 +406,40 @@ namespace Floorplan {
|
||||
float height;
|
||||
bool leftRight = false;
|
||||
bool inOut = false;
|
||||
FloorObstacleWallDoor(const DoorType type, const Material material, const float atLinePos, const float width, const float height) : FloorObstacle(material), type(type), atLinePos(atLinePos), width(width), height(height) {;}
|
||||
Point2 getStart(const FloorObstacleLine* wall) const {
|
||||
FloorObstacleWallDoor(const DoorType type, const Material material, const float atLinePos, const float width, const float height, const bool lr = false, const bool io = false) : FloorObstacle(material), type(type), atLinePos(atLinePos), width(width), height(height), leftRight(lr), inOut(io) {;}
|
||||
Point2 getStart(const FloorObstacleWall* wall) const {
|
||||
const Point2 dir = wall->to - wall->from;
|
||||
return wall->from + dir * atLinePos;
|
||||
}
|
||||
Point2 getEnd(const FloorObstacleLine* wall) const {
|
||||
Point2 getEnd(const FloorObstacleWall* wall) const {
|
||||
const Point2 dir = wall->to - wall->from;
|
||||
return getStart(wall) + dir.normalized() * (leftRight ? -width : +width);
|
||||
}
|
||||
};
|
||||
|
||||
/** wall->window obstacle */
|
||||
struct FloorObstacleWallWindow : public FloorObstacle {
|
||||
WindowType type;
|
||||
float atLinePos;
|
||||
float startsAtHeight;
|
||||
float width;
|
||||
float height;
|
||||
bool leftRight = false;
|
||||
bool inOut = false;
|
||||
FloorObstacleWallWindow(const WindowType type, const Material material, const float atLinePos, const float startsAtHeight, const float width, const float height, const bool lr = false, const bool io = false) : FloorObstacle(material), type(type), atLinePos(atLinePos), startsAtHeight(startsAtHeight), width(width), height(height), leftRight(lr), inOut(io) {;}
|
||||
Point2 getStart(const FloorObstacleWall* wall) const {
|
||||
const Point2 dir = wall->to - wall->from;
|
||||
const Point2 cen = wall->from + dir * atLinePos;
|
||||
return cen - dir.normalized() * width/2;
|
||||
}
|
||||
Point2 getEnd(const FloorObstacleWall* wall) const {
|
||||
const Point2 dir = wall->to - wall->from;
|
||||
const Point2 cen = wall->from + dir * atLinePos;
|
||||
return cen + dir.normalized() * width/2;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** 3D obstacle */
|
||||
struct FloorObstacleObject : public FloorObstacle {
|
||||
std::string file;
|
||||
|
||||
Reference in New Issue
Block a user