diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index 9650d2e6f82cd6f19278b2fe60d837b9a291ea74..29b6c62207a3b63d85389a5f79cb5ba5483593b9 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -56,18 +56,19 @@ #include <vtkRenderWindowInteractor.h> #include <vtkAssembly.h> #include <vtkProperty.h> +#include <vtkTriangleFilter.h> using namespace std; /** * constructor - * - * @param geo - * @param data - * @param par 0=fps, 1=agents - * @param roomCaption - * @return + * + * @param geo + * @param data + * @param par 0=fps, 1=agents + * @param roomCaption + * @return */ SaxParser::SaxParser(FacilityGeometry* geo, SyncData* data, double* fps){ geometry=geo; @@ -635,13 +636,15 @@ void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ for (int i = 0; i < building->GetNumberOfRooms(); i++) { Room* r = building->GetRoom(i); - string caption = r->GetCaption(); + //string caption = r->GetCaption(); for (int k = 0; k < r->GetNumberOfSubRooms(); k++) { SubRoom* sub = r->GetSubRoom(k); - const vector<Point>& poly = sub->GetPolygon(); - //if(sub->GetType()!="stair") continue; - //if( ! ( (r->GetID()==1) && (sub->GetSubRoomID()==0))) continue; + vector<Point> poly = sub->GetPolygon(); + + if(sub->IsClockwise()==true){ + std::reverse(poly.begin(),poly.end()); + } // Create the polygon vtkSmartPointer<vtkPolygon> polygon = @@ -651,8 +654,6 @@ void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ for (unsigned int s=0;s<poly.size();s++){ points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR); polygon->GetPointIds()->SetId(s, currentID++); - //polygon->GetPointIds()->InsertNextId(currentID++); - //cout<<poly[s].toString()<<" : "<<sub->GetElevation(poly[s])<<endl; } polygons->InsertNextCell(polygon); @@ -665,13 +666,17 @@ void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ polygonPolyData->SetPoints(points); polygonPolyData->SetPolys(polygons); + //triagulate everything + vtkSmartPointer<vtkTriangleFilter> filter=vtkSmartPointer<vtkTriangleFilter>::New(); + filter->SetInputData(polygonPolyData); + // Create a mapper and actor vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); #if VTK_MAJOR_VERSION <= 5 mapper->SetInput(polygonPolyData); #else - mapper->SetInputData(polygonPolyData); + mapper->SetInputConnection(filter->GetOutputPort()); #endif vtkSmartPointer<vtkActor> actor = @@ -686,73 +691,6 @@ void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ // free memory delete building; } -//void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ -// -// if(!fileName.endsWith(".xml",Qt::CaseInsensitive)) return ; -// -// Building* building = new Building(); -// string geometrypath = fileName.toStdString(); -// -// // read the geometry -// building->LoadBuildingFromFile(geometrypath); -// building->InitGeometry(); // create the polygons -// -// for (int i = 0; i < building->GetNumberOfRooms(); i++) { -// Room* r = building->GetRoom(i); -// string caption = r->GetCaption(); -// -// for (int k = 0; k < r->GetNumberOfSubRooms(); k++) { -// SubRoom* sub = r->GetSubRoom(k); -// const vector<Point>& poly = sub->GetPolygon(); -// //if(sub->GetType()!="stair") continue; -// if( ! ( (r->GetID()==1) && (sub->GetSubRoomID()==0))) continue; -// // Setup the points -// vtkSmartPointer<vtkPoints> points = -// vtkSmartPointer<vtkPoints>::New(); -// // Create the polygon -// vtkSmartPointer<vtkPolygon> polygon = -// vtkSmartPointer<vtkPolygon>::New(); -// polygon->GetPointIds()->SetNumberOfIds(poly.size()); -// -// for (unsigned int s=0;s<poly.size();s++){ -// points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR); -// polygon->GetPointIds()->SetId(s, s); -// } -// -// // Add the polygon to a list of polygons -// vtkSmartPointer<vtkCellArray> polygons = -// vtkSmartPointer<vtkCellArray>::New(); -// polygons->InsertNextCell(polygon); -// -// // Create a PolyData -// vtkSmartPointer<vtkPolyData> polygonPolyData = -// vtkSmartPointer<vtkPolyData>::New(); -// polygonPolyData->SetPoints(points); -// polygonPolyData->SetPolys(polygons); -// -// // Create a mapper and actor -// vtkSmartPointer<vtkPolyDataMapper> mapper = -// vtkSmartPointer<vtkPolyDataMapper>::New(); -//#if VTK_MAJOR_VERSION <= 5 -// mapper->SetInput(polygonPolyData); -//#else -// mapper->SetInputData(polygonPolyData); -//#endif -// -// vtkSmartPointer<vtkActor> actor = -// vtkSmartPointer<vtkActor>::New(); -// actor->SetMapper(mapper); -// actor->GetProperty()->SetColor(0,0,1); -// actor->GetProperty()->SetOpacity(0.5); -// actor->GetProperty()->SetLineWidth(5); -// -// geometry->getActor()->AddPart(actor); -// } -// } -// -// // free memory -// delete building; -//} /// provided for convenience and will be removed in the next version