From 565f3521672d4a98430dd0c1d1565e030e29eb5f Mon Sep 17 00:00:00 2001 From: Ulrich Kemloh <kemlohulrich@gmail.com> Date: Tue, 9 Jun 2015 21:15:04 +0200 Subject: [PATCH] feature to individually change attribute of the geometry, e.g different floor colors for different subrooms. Only the elements (colors,visibilty,walls..) of the selected subrooms will be changed. First select the room/subroom in the geometry structure view --- src/geometry/FacilityGeometry.cpp | 9 +++++++++ src/geometry/FacilityGeometry.h | 3 +++ src/geometry/GeometryFactory.cpp | 31 ++++++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/geometry/FacilityGeometry.cpp b/src/geometry/FacilityGeometry.cpp index 415f318..c3cf7e0 100644 --- a/src/geometry/FacilityGeometry.cpp +++ b/src/geometry/FacilityGeometry.cpp @@ -161,8 +161,13 @@ void FacilityGeometry::CreateActors() { assembly3D->SetVisibility(status); } + _visibility=status; } + bool FacilityGeometry::getVisibility() const + { + return _visibility; + } /*** * This is the main build method and should be called by all functions * drawing a wall or a door. Important @@ -812,6 +817,10 @@ void FacilityGeometry::showFloor(bool status) floorActor->SetVisibility(status); } +void FacilityGeometry::showObstacles(bool status) +{ + obstaclesActor->SetVisibility(status); +} void FacilityGeometry::addObjectLabel(double center[3], double orientation[3], std::string caption, double color) { addNewElementText(center, orientation, caption, color); diff --git a/src/geometry/FacilityGeometry.h b/src/geometry/FacilityGeometry.h index 0af9ad2..2aee2b5 100644 --- a/src/geometry/FacilityGeometry.h +++ b/src/geometry/FacilityGeometry.h @@ -133,9 +133,11 @@ public: void showWalls(bool status); void showNavLines(bool status); void showFloor(bool status); + void showObstacles(bool status); void showGeometryLabels(int status); void setVisibility(bool status); + bool getVisibility() const; private: @@ -179,6 +181,7 @@ private: vtkActor2DCollection* captions; std::string _description; + bool _visibility=true; }; #endif /* FACILITYGEOMETRY_H_ */ diff --git a/src/geometry/GeometryFactory.cpp b/src/geometry/GeometryFactory.cpp index 500c9dd..ce41a6b 100644 --- a/src/geometry/GeometryFactory.cpp +++ b/src/geometry/GeometryFactory.cpp @@ -28,10 +28,10 @@ void GeometryFactory::Set2D(bool status) { for(auto&& subroom:room.second) { - subroom.second->set2D(status); + if(_geometryFactory[room.first][subroom.first]->getVisibility()) + subroom.second->set2D(status); } } - //Set3D(!status); } void GeometryFactory::Set3D(bool status) @@ -40,10 +40,10 @@ void GeometryFactory::Set3D(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->set3D(status); } } - //Set2D(!status); } void GeometryFactory::Clear() @@ -60,6 +60,7 @@ void GeometryFactory::ChangeWallsColor(double* color) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->changeWallsColor(color); } } @@ -71,6 +72,7 @@ void GeometryFactory::ChangeExitsColor(double* color) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->changeExitsColor(color); } } @@ -82,6 +84,7 @@ void GeometryFactory::ChangeNavLinesColor(double* color) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->changeNavLinesColor(color); } } @@ -93,7 +96,8 @@ void GeometryFactory::ChangeFloorColor(double* color) { for(auto&& subroom:room.second) { - subroom.second->changeFloorColor(color); + if(_geometryFactory[room.first][subroom.first]->getVisibility()) + subroom.second->changeFloorColor(color); } } } @@ -104,6 +108,7 @@ void GeometryFactory::ChangeObstaclesColor(double* color) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->changeObstaclesColor(color); } } @@ -115,6 +120,7 @@ void GeometryFactory::ShowDoors(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showDoors(status); } } @@ -126,6 +132,7 @@ void GeometryFactory::ShowStairs(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showStairs(status); } } @@ -137,6 +144,7 @@ void GeometryFactory::ShowWalls(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showWalls(status); } } @@ -148,6 +156,7 @@ void GeometryFactory::ShowNavLines(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showNavLines(status); } } @@ -159,10 +168,22 @@ void GeometryFactory::ShowFloor(bool status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showFloor(status); } } } +void GeometryFactory::ShowObstacles(bool status) +{ + for (auto&& room: _geometryFactory) + { + for(auto&& subroom:room.second) + { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) + subroom.second->showObstacles(status); + } + } +} void GeometryFactory::ShowGeometryLabels(int status) { @@ -170,6 +191,7 @@ void GeometryFactory::ShowGeometryLabels(int status) { for(auto&& subroom:room.second) { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) subroom.second->showGeometryLabels(status); } } @@ -228,7 +250,6 @@ const std::map<int , std::map<int, std::shared_ptr<FacilityGeometry> > > & Geome void GeometryFactory::AddElement(int room, int subroom, std::shared_ptr<FacilityGeometry> geo) { - //_geometryFactory.insert({room,{subroom,geo}}); _geometryFactory[room][subroom]=geo; } -- GitLab