From ea2c329933711115ecf2a7be49c6417feb7311e9 Mon Sep 17 00:00:00 2001 From: Ulrich Kemloh <kemlohulrich@gmail.com> Date: Mon, 20 Jul 2015 16:21:05 +0200 Subject: [PATCH] navigation lines in online mode --- src/MainWindow.cpp | 45 +++++-------- src/SaxParser.cpp | 163 --------------------------------------------- 2 files changed, 16 insertions(+), 192 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index f23550a..f725d71 100755 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -498,31 +498,8 @@ void MainWindow::parseGeometry(const QDomNode &geoNode) // This function is only used in online Mode void MainWindow::parseGeometry(const QString& geometryString) { - - // QDomDocument doc(""); - // data = "<travisto>\n" +data+ "\n</travisto>\n"; - - // QString errorMsg=""; - // doc.setContent(data,&errorMsg); - - // if(!errorMsg.isEmpty()){ - // Debug::Error("%s", (const char *)errorMsg.toStdString().c_str()); - // return; - // } - - // QDomNode geoNode =doc.elementsByTagName("geometry").item(0); - - //create a temporary file with the content geonode - - // QTemporaryFile file; - // file.setFileName(file.fileName()+".xml"); - // if (file.open()) { - // QTextStream stream(&file); - // stream << geoNode << endl; - // } - QFile file("_geometry_tmp_file.xml"); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { + if (file.open(QIODevice::ReadWrite | QIODevice::Text)) { QTextStream stream(&file); stream << geometryString << endl; } @@ -536,8 +513,6 @@ void MainWindow::parseGeometry(const QString& geometryString) auto&& geometry = _visualisationThread->getGeometry(); - - if(!geofileName.isEmpty()) { SystemSettings::CreateLogfile(); if (geofileName.endsWith(".xml",Qt::CaseInsensitive)) { @@ -554,16 +529,28 @@ void MainWindow::parseGeometry(const QString& geometryString) // I assume it is a trav format node, //which is the only one which can directly be inserted into a file else { - QDomDocument doc(""); - QDomNode geoNode; + QDomNode geoNode; //must not be a file name SaxParser::parseGeometryTRAV(geometryString,geometry,geoNode); } + //workaround. In some cases there are still hlines in the input files which are not parsed. + if(geofileName.endsWith(".xml",Qt::CaseInsensitive)) + { + QXmlInputSource source; + source.setData(geometryString); + QXmlSimpleReader reader; + + SyncData dummy; + double fps; + SaxParser handler(geometry,dummy,&fps); + reader.setContentHandler(&handler); + reader.parse(source); + } + //delete the file file.remove(); - } // TODO: still used? diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index 4972b90..5deef98 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -778,170 +778,7 @@ bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) return true; } -/* -bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) -{ - auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry("test")); - - double captionsColor=0;//red - if(!fileName.endsWith(".xml",Qt::CaseInsensitive)) return false; - QString wd; - SystemSettings::getWorkingDirectory(wd); - fileName=wd+"/"+fileName; - - Building* building = new Building(); - string geometrypath = fileName.toStdString(); - - // read the geometry - if(!building->LoadGeometry(geometrypath)) - return false; - if(!building->InitGeometry()) - return false; // create the polygons - - int currentFloorPolyID=0; - int currentObstPolyID=0; - - // Setup the points - VTK_CREATE(vtkPoints,floor_points); - VTK_CREATE(vtkPoints,obstacles_points); - // Add the polygon to a list of polygons - VTK_CREATE(vtkCellArray,floor_polygons); - VTK_CREATE(vtkCellArray,obstacles_polygons); - - for(auto&& itr_room: building->GetAllRooms()) - { - for(auto&& itr_subroom: itr_room.second->GetAllSubRooms()) - { - - //string caption = r->GetCaption(); - SubRoom* sub = itr_subroom.second.get(); - - vector<Point> poly = sub->GetPolygon(); - if(sub->IsClockwise()==true) { - std::reverse(poly.begin(),poly.end()); - } - - // Create the polygon - VTK_CREATE(vtkPolygon,polygon); - polygon->GetPointIds()->SetNumberOfIds(poly.size()); - - for (unsigned int s=0; s<poly.size(); s++) { - floor_points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR); - polygon->GetPointIds()->SetId(s, currentFloorPolyID++); - } - floor_polygons->InsertNextCell(polygon); - - //plot the walls only for not stairs - const vector<Wall>& walls= sub->GetAllWalls(); - for(unsigned int w=0; w<walls.size(); w++) { - Point p1 = walls[w].GetPoint1(); - Point p2 = walls[w].GetPoint2(); - double z1= sub->GetElevation(p1); - double z2= sub->GetElevation(p2); - - if(sub->GetType()=="stair") { - geometry->addStair(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR); - } else { - geometry->addWall(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR); - } - } - - //insert the subroom caption - string caption=itr_room.second->GetCaption()+" ( " + QString::number(sub->GetSubRoomID()).toStdString() + " ) "; - const Point& p=sub->GetCentroid(); - double z= sub->GetElevation(p); - double pos[3]= {p._x*FAKTOR,p._y*FAKTOR,z*FAKTOR}; - geometry->addObjectLabel(pos,pos,caption,captionsColor); - - //plot the obstacles - for(auto obst:sub->GetAllObstacles()) - { - for(auto wall: obst->GetAllWalls()) - { - Point p1 = wall.GetPoint1(); - Point p2 = wall.GetPoint2(); - double z1= sub->GetElevation(p1); - double z2= sub->GetElevation(p2); - geometry->addWall(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR); - } - //add the obstacle caption - const Point& p=obst->GetCentroid(); - double z= sub->GetElevation(p); - double pos[3]= {p._x*FAKTOR,p._y*FAKTOR,z*FAKTOR}; - geometry->addObjectLabel(pos,pos,obst->GetCaption(),captionsColor); - - //add a special texture to the obstacles - auto poly = obst->GetPolygon(); - //if(obst->IsClockwise()==true) { - // std::reverse(poly.begin(),poly.end()); - //} - - // Create the polygon - VTK_CREATE(vtkPolygon,polygon); - polygon->GetPointIds()->SetNumberOfIds(poly.size()); - - for (unsigned int s=0; s<poly.size(); s++) { - obstacles_points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR); - polygon->GetPointIds()->SetId(s, currentObstPolyID++); - } - obstacles_polygons->InsertNextCell(polygon); - } - } - } - - // Create a PolyData to represent the floor - VTK_CREATE(vtkPolyData, floorPolygonPolyData); - floorPolygonPolyData->SetPoints(floor_points); - floorPolygonPolyData->SetPolys(floor_polygons); - geometry->addFloor(floorPolygonPolyData); - - // Create a PolyData to represen the obstacles - //TODO: - VTK_CREATE(vtkPolyData, obstPolygonPolyData); - obstPolygonPolyData->SetPoints(obstacles_points); - obstPolygonPolyData->SetPolys(obstacles_polygons); - geometry->addObstacles(obstPolygonPolyData); - - - // add the crossings - const map<int, Crossing*>& crossings=building->GetAllCrossings(); - for (std::map<int, Crossing*>::const_iterator it=crossings.begin(); it!=crossings.end(); ++it) { - Crossing* cr=it->second; - Point p1 = cr->GetPoint1(); - Point p2 = cr->GetPoint2(); - double z1= cr->GetSubRoom1()->GetElevation(p1); - double z2= cr->GetSubRoom1()->GetElevation(p2); - geometry->addNavLine(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR); - - const Point& p =cr->GetCentre(); - double pos[3]= {p._x*FAKTOR,p._y*FAKTOR,z1*FAKTOR}; - geometry->addObjectLabel(pos,pos,"nav_"+QString::number(cr->GetID()).toStdString(),captionsColor); - } - - // add the exits - const map<int, Transition*>& transitions=building->GetAllTransitions(); - for (std::map<int, Transition*>::const_iterator it=transitions.begin(); it!=transitions.end(); ++it) { - Transition* tr=it->second; - Point p1 = tr->GetPoint1(); - Point p2 = tr->GetPoint2(); - double z1= tr->GetSubRoom1()->GetElevation(p1); - double z2= tr->GetSubRoom1()->GetElevation(p2); - geometry->addDoor(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR); - - const Point& p =tr->GetCentre(); - double pos[3]= {p._x*FAKTOR,p._y*FAKTOR,z1*FAKTOR}; - geometry->addObjectLabel(pos,pos,"door_"+QString::number(tr->GetID()).toStdString(),captionsColor); - } - - geoFac.AddElement(0,0,geometry); - //TODO:dirty hack for parsing the Hlines - // free memory - delete building; - return true; -} - - */ /// provided for convenience and will be removed in the next version -- GitLab