#ifndef MMFLOOROBSTACLES_H #define MMFLOOROBSTACLES_H #include "MapLayer.h" #include "MMFloorObstacleCircle.h" #include "MMFloorObstacleLine.h" #include "MMFloorObstacleWall.h" #include "MMFloorObstacleDoor.h" #include "MMFloorObstacleObject.h" #include /** * layer that contains all of one floor's obstacles */ class MMFloorObstacles : public MapLayer { Floorplan::Floor* floor; public: /** ctor with the floor */ MMFloorObstacles(MapLayer* parent, Floorplan::Floor* floor) : MapLayer(parent, MapLayerType::FLOOR_OBSTACLES), floor(floor) { // the obstacles for (Floorplan::FloorObstacle* o : floor->obstacles) { if (dynamic_cast(o)) { addElement(new MMFloorObstacleLine(this, floor, (Floorplan::FloorObstacleLine*)o)); } else if (dynamic_cast(o)) { addElement(new MMFloorObstacleWall(this, floor, (Floorplan::FloorObstacleWall*)o)); } else if (dynamic_cast(o)) { addElement(new MMFloorObstacleCircle(this, floor, (Floorplan::FloorObstacleCircle*)o)); } else if (dynamic_cast(o)) { addElement(new MMFloorObstacleDoor(this, floor, (Floorplan::FloorObstacleDoor*)o)); } else if (dynamic_cast(o)) { addElement(new MMFloorObstacleObject(this, floor, (Floorplan::FloorObstacleObject*)o)); } else { throw new Exception("todo: not yet implemented obstacle type"); } } } bool isVisible() const override { return floor->obstacles.enabled; } void setVisible(const bool visible) override { this-> floor->obstacles.enabled = visible; onVisibilityChanged(visible); } /** get the corresponding floor from the underlying model */ Floorplan::Floor* getFloor() {return floor;} //TODO: check MMFloorObstacleWall* createWall(Floorplan::FloorObstacleWall* obs) { // add to underlying model floor->obstacles.push_back(obs); // add to myself as element MMFloorObstacleWall* mm = new MMFloorObstacleWall(this, floor, obs); addElement(mm); return mm; } //TODO: check MMFloorObstacleDoor* createDoor(Floorplan::FloorObstacleDoor* obs) { // add to underlying model floor->obstacles.push_back(obs); // add to myself as element MMFloorObstacleDoor* mm = new MMFloorObstacleDoor(this, floor, obs); addElement(mm); return mm; } //TODO: check MMFloorObstacleLine* createLine(Floorplan::FloorObstacleLine* obs) { // add to underlying model floor->obstacles.push_back(obs); // add to myself as element MMFloorObstacleLine* mm = new MMFloorObstacleLine(this, floor, obs); addElement(mm); return mm; } //TODO: check MMFloorObstacleCircle* createCircle(Floorplan::FloorObstacleCircle* obs) { // add to underlying model floor->obstacles.push_back(obs); // add to myself as element MMFloorObstacleCircle* mm = new MMFloorObstacleCircle(this, floor, obs); addElement(mm); return mm; } //TODO: check MMFloorObstacleObject* createObject(Floorplan::FloorObstacleObject* obs) { // add to underlying model floor->obstacles.push_back(obs); // add to myself as element MMFloorObstacleObject* mm = new MMFloorObstacleObject(this, floor, obs); addElement(mm); return mm; } std::string getLayerName() const override {return "obstacles";} }; #endif // MMFLOOROBSTACLES_H