diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index 6f8e20cee145d5ef894b865a5370ce7dafabd371..eb753d009075c3f011c95ab807e50beda6b99ca7 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -96,7 +96,7 @@ SaxParser::SaxParser(GeometryFactory& geoFac, SyncData& dataset, double * fps):_ _color=0.0; _dataset.clearFrames(); - _geometry = std::shared_ptr<FacilityGeometry>(new FacilityGeometry("No name")); + _geometry = std::shared_ptr<FacilityGeometry>(new FacilityGeometry("No name", "No name", "No name")); _geoFactory.AddElement(-1,-1,_geometry); //default header @@ -634,7 +634,6 @@ void SaxParser::clearPoints() /// provided for convenience and will be removed in the next version bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) { - double captionsColor=0;//red if(!fileName.endsWith(".xml",Qt::CaseInsensitive)) return false; QString wd; @@ -654,7 +653,10 @@ bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) { for(auto&& itr_subroom: itr_room.second->GetAllSubRooms()) { - auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry(itr_subroom.second->GetType())); + auto geometry= shared_ptr<FacilityGeometry>( + new FacilityGeometry(itr_subroom.second->GetType(), itr_room.second->GetCaption(),itr_subroom.second->GetCaption() + ) + ); int currentFloorPolyID=0; int currentObstPolyID=0; @@ -803,7 +805,7 @@ void SaxParser::parseGeometryTRAV(QString content, GeometryFactory& geoFac,QDomN // to be filled QDomDocument doc(""); QDomNode geoNode; - auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry("no mame")); + auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name", "no name", "no name")); //first try to open the file if(content.endsWith(".trav",Qt::CaseInsensitive) ) { @@ -1039,6 +1041,7 @@ QString SaxParser::extractGeometryFilename(QString &filename) void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac) { + cout << "parsing 04\n" ; QDomDocument doc(""); QFile file(filename); @@ -1049,7 +1052,8 @@ void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac) //cout<<"The file is too large: "<<filename.toStdString()<<endl; return; } - auto geo= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name")); + + auto geo= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name", "no name", "no name")); //cout<<"filename: "<<filename.toStdString()<<endl; //TODO: check if you can parse this with the building classes. @@ -1129,8 +1133,10 @@ void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac) position[1]/=pos_count; position[2]/=pos_count; geo->addObjectLabel(position,position,caption,color); - //cout<<"position: [" <<position[0]<<", "<<position[1]<<", "<<position[2]<<" ]"<<endl;; - + geo->SetRoomCaption(roomCaption); + geo->SetSubRoomCaption(subroomCaption); + cout<<"position: [" <<position[0]<<", "<<position[1]<<", "<<position[2]<<" ]"<<endl;; + cout << roomCaption<< " " << subroomCaption << "\n" ; } QDomNodeList xObstaclesList=doc.elementsByTagName("obstacle"); @@ -1406,7 +1412,7 @@ bool SaxParser::ParseGradientFieldVTK(QString fileName, GeometryFactory& geoFac) //conversion from m to cm actor->SetScale(100); - auto gradient_field= shared_ptr<FacilityGeometry>(new FacilityGeometry("Gradient Field")); + auto gradient_field= shared_ptr<FacilityGeometry>(new FacilityGeometry("Gradient Field", "no name", "no name")); gradient_field->addGradientField(actor); geoFac.AddElement(-1,-1,gradient_field); diff --git a/src/geometry/Building.cpp b/src/geometry/Building.cpp index 89400ce07315130e0c4cc5f877b8d4768b913703..dda5bfef89c83f5bfe2c16f42b948cdfa0e8f54e 100644 --- a/src/geometry/Building.cpp +++ b/src/geometry/Building.cpp @@ -439,7 +439,7 @@ bool Building::LoadGeometry(const std::string &geometryfile) for(TiXmlElement* xSubRoom = xRoom->FirstChildElement("subroom"); xSubRoom; xSubRoom = xSubRoom->NextSiblingElement("subroom")) { - + string subroom_caption = xmltoa(xSubRoom->Attribute("caption"), "no Caption"); string subroom_id = xmltoa(xSubRoom->Attribute("id"), "-1"); string SubroomClosed = xmltoa(xSubRoom->Attribute("closed"), "0"); string type = xmltoa(xSubRoom->Attribute("class"),"subroom"); @@ -471,7 +471,7 @@ bool Building::LoadGeometry(const std::string &geometryfile) //normal subroom or corridor subroom = new NormalSubRoom(); } - + subroom->SetCaption(subroom_caption); subroom->SetType(type); subroom->SetPlanEquation(A_x,B_y,C_z); subroom->SetRoomID(room->GetID()); diff --git a/src/geometry/FacilityGeometry.cpp b/src/geometry/FacilityGeometry.cpp index 79b592380702698634f8e495c4231a78c386a38e..3ecb786dfae33be1ecec62cedccca9ea1d8aa917 100644 --- a/src/geometry/FacilityGeometry.cpp +++ b/src/geometry/FacilityGeometry.cpp @@ -68,7 +68,7 @@ using namespace std; vtkSmartPointer<type> name = vtkSmartPointer<type>::New() -FacilityGeometry::FacilityGeometry(const string &description) +FacilityGeometry::FacilityGeometry(const string &description, const string &roomCaption, const string &subroomCaption) { assembly = vtkAssembly::New(); @@ -107,6 +107,8 @@ FacilityGeometry::FacilityGeometry(const string &description) doorColor = 50; navlineColor=95; _description=description; + _roomCaption=roomCaption; + _subroomCaption=subroomCaption; } FacilityGeometry::~FacilityGeometry() @@ -891,3 +893,17 @@ const std::string & FacilityGeometry::GetDescription() const { return _description; } + +const std::string & FacilityGeometry::GetSubRoomCaption() const +{ + return _subroomCaption; +} + +const std::string & FacilityGeometry::GetRoomCaption() const +{ + return _roomCaption; +} + +void FacilityGeometry::SetRoomCaption(std::string s) {_roomCaption=s; } + +void FacilityGeometry::SetSubRoomCaption(std::string s) {_subroomCaption=s; } diff --git a/src/geometry/FacilityGeometry.h b/src/geometry/FacilityGeometry.h index ec8eb65c3f849df73a680715748fded58911ede0..9b9cff255c54fd113b09d9e67b81d731aca999e5 100644 --- a/src/geometry/FacilityGeometry.h +++ b/src/geometry/FacilityGeometry.h @@ -63,8 +63,7 @@ public: BOX //!< BOX defined by centre, length, width and height }; - FacilityGeometry(const std::string & description); - + FacilityGeometry(const std::string &description, const std::string &roomCaption, const std::string &subroomCaption); virtual ~FacilityGeometry(); vtkAssembly* getActor2D(); @@ -114,7 +113,10 @@ public: void addGradientField(vtkActor* gradientField); const std::string & GetDescription() const ; - + const std::string & GetRoomCaption() const ; + const std::string & GetSubRoomCaption() const ; + void SetRoomCaption(std::string s); + void SetSubRoomCaption(std::string s); /// draw other kinds of objects void addObjectSphere(double center[3], double radius, double couleur=1); void addObjectCone(double center[3], double height, double radius, double couleur=2); @@ -186,6 +188,8 @@ private: vtkActor2DCollection* captions; std::string _description; + std::string _roomCaption; + std::string _subroomCaption; bool _visibility=true; }; diff --git a/src/geometry/GeometryFactory.cpp b/src/geometry/GeometryFactory.cpp index 4e489107d1ddebb67809ac1e5a91d253122f5d7a..5aa8825b2ee2fecdc6cbbcdaf804fcee1be74af7 100644 --- a/src/geometry/GeometryFactory.cpp +++ b/src/geometry/GeometryFactory.cpp @@ -64,6 +64,7 @@ void GeometryFactory::ChangeWallsColor(double* color) subroom.second->changeWallsColor(color); } } + } void GeometryFactory::ChangeExitsColor(double* color) @@ -220,21 +221,35 @@ bool GeometryFactory::RefreshView() for (auto&& room: _geometryFactory) { + //room caption //QStandardItem *roomcaption = new QStandardItem( QString("R %0").arg(room.first)); //roomcaption->setEditable( false ); //_model.setItem(room.first, 1, roomcaption); + QString roomCaption; + if (room.first>=0) + roomCaption = QString::fromStdString(_geometryFactory[room.first][0]->GetRoomCaption()); + else + roomCaption = "empty"; + + QStandardItem *item = new QStandardItem( QString("Room: %0 (%1)") + .arg(room.first) + .arg(roomCaption) + ); +// .arg(QString::fromStdString( + // _geometryFactory[room.first][0]->GetRoomCaption() - QStandardItem *item = new QStandardItem( QString("Room:%0").arg(room.first)); + // room.second[0].second->GetRoomCaption() item->setCheckable(true); item->setCheckState(Qt::Checked); for(auto&& subroom:room.second) { QStandardItem *child = new QStandardItem( - QString("%0: (%1)") - .arg(QString::fromStdString(subroom.second->GetDescription())) + QString("%2: %0 (%1)") .arg(subroom.first) + .arg(QString::fromStdString(subroom.second->GetSubRoomCaption())) + .arg(QString::fromStdString(subroom.second->GetDescription())) ); child->setEditable(false); diff --git a/src/geometry/SubRoom.cpp b/src/geometry/SubRoom.cpp index 2866572c07a974bcae3e9cb2822c069f0891110d..82209a1da1b1423536f0eed411fa7f322a7ee32b 100644 --- a/src/geometry/SubRoom.cpp +++ b/src/geometry/SubRoom.cpp @@ -56,7 +56,7 @@ SubRoom::SubRoom() _walls = vector<Wall > (); _poly = vector<Point > (); _obstacles=vector<Obstacle*> (); - + _caption = "no subroom caption"; _crossings = vector<Crossing*>(); _transitions = vector<Transition*>(); _hlines = vector<Hline*>(); @@ -80,6 +80,15 @@ SubRoom::~SubRoom() _obstacles.clear(); } +void SubRoom::SetCaption(const string& s) +{ + _caption = s; +} + +const string& SubRoom::GetCaption() const +{ + return _caption; +} void SubRoom::SetSubRoomID(int ID) { diff --git a/src/geometry/SubRoom.h b/src/geometry/SubRoom.h index 8ee6788380bccc552f75a30d171c1b09546335dd..cc34f2c40136187f9e04c068d7a22566139ff524 100644 --- a/src/geometry/SubRoom.h +++ b/src/geometry/SubRoom.h @@ -59,6 +59,7 @@ private: int _id; /// the unique id resulting from the count of all subrooms in the system int _uid; + std::string _caption; int _roomID; std::vector<int> _goalIDs; // all navigation lines contained in this subroom double _area; @@ -103,6 +104,12 @@ public: * Set/Get the associated room id */ void SetRoomID(int ID); + /** + * Set/Get the caption of the room + */ + const std::string& GetCaption() const; + + void SetCaption(const std::string& s); /** * Set the plane equation for this subroom.