diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index ed21be23c70b5dc51a4d957f2e121dd0dbe2114b..3251ae8c48a582eecf6c58ee9b8742ed11cec2fa 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -539,7 +539,7 @@ border-color: rgb(255, 255, 255);</string> <x>0</x> <y>0</y> <width>450</width> - <height>22</height> + <height>25</height> </rect> </property> <widget class="QMenu" name="menuFile"> @@ -631,6 +631,7 @@ border-color: rgb(255, 255, 255);</string> <addaction name="actionShow_Door_Caption"/> <addaction name="actionShow_Obstacles"/> <addaction name="actionShow_Navigation_Lines"/> + <addaction name="actionShow_Gradient_Field"/> <addaction name="actionShow_Geometry_Captions"/> <addaction name="actionFirst_Group"/> <addaction name="separator"/> @@ -1337,6 +1338,17 @@ border-color: rgb(255, 255, 255);</string> <string>Obstacles Color</string> </property> </action> + <action name="actionShow_Gradient_Field"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + <property name="text"> + <string>Show Gradient Field</string> + </property> + </action> </widget> <resources> <include location="icons.qrc"/> @@ -2222,6 +2234,22 @@ border-color: rgb(255, 255, 255);</string> </hint> </hints> </connection> + <connection> + <sender>actionShow_Gradient_Field</sender> + <signal>triggered()</signal> + <receiver>mainwindow</receiver> + <slot>slotShowHideGradientField()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>224</x> + <y>199</y> + </hint> + </hints> + </connection> </connections> <slots> <slot>slotHelpAbout()</slot> @@ -2288,5 +2316,6 @@ border-color: rgb(255, 255, 255);</string> <slot>slotShowGeometryStructure()</slot> <slot>slotChangeObstacleColor()</slot> <slot>slotShowHideObstacles()</slot> + <slot>slotShowHideGradientField()</slot> </slots> </ui> diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a417cce1e8cf3a1b8521aa9fadd11220ade06e92..822aa4f7031d0d281bf6a22b77190d678f4fb6ed 100755 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -687,6 +687,14 @@ bool MainWindow::addPedestrianGroup(int groupID,QString fileName) //return false; } + //check if it is vtrk file containinf gradient + if(fileName.endsWith(".vtk",Qt::CaseInsensitive)) + { + if (false==SaxParser::ParseGradientFieldVTK(fileName,geometry)) + return false; + + } + QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { Debug::Error("could not open the File: ",fileName.toStdString().c_str()); @@ -729,8 +737,15 @@ bool MainWindow::addPedestrianGroup(int groupID,QString fileName) reader.parse(source); file.close(); } + //parsing the vtk file +// else if(fileName.endsWith(".vtk",Qt::CaseInsensitive)) +// { +// if (false==SaxParser::ParseGradientFieldVTK(fileName,geometry)) +// return false; + +// } // try to parse the txt file - else + else if(fileName.endsWith(".txt",Qt::CaseInsensitive)) { if(false==SaxParser::ParseTxtFormat(fileName, dataset,&frameRate)) return false; @@ -947,35 +962,6 @@ void MainWindow::slotControlSequence(const char * sex) extern_recording_enable = false; ui.BtRecord->setToolTip("Start Recording"); labelRecording->setText(" rec: off "); - - //Debug::Messages("stack empty" << endl; - // Debug::Messages("stoping the playback and recording if any" << endl; - // //extern_recording_enable = false; - // extern_shutdown_visual_thread=true; - // waitForVisioThread(); - // - // //isPlaying = true; //very important - // //isPaused = true; - // //extern_is_pause = true; - // - // - // extern_screen_contrast=1; - // extern_is_pause = false; - // isPlaying=false; - // isPaused=false; - - //pause the system - // QIcon icon1; - // icon1.addPixmap(QPixmap(QString::fromUtf8( - // ":/new/iconsS/icons/Play1Hot.png")), QIcon::Normal, QIcon::Off); - // ui.BtStart->setIcon(icon1); - // labelCurrentAction->setText("paused"); - // extern_is_pause = true; - // isPlaying = true; //very important, cuz the visio was running - // isPaused = true; - // extern_update_step=1; - - } else if (str.compare("CONTROL_RESET") == 0) { Debug::Messages("resetting all"); isPlaying = false; @@ -1703,7 +1689,13 @@ void MainWindow::loadAllSettings() slotShowOnScreenInfos(); qDebug()<<"show OnScreensInfos: "<<checked; } - + if (settings.contains("view/showGradientField")) + { + bool checked = settings.value("view/showGradientField").toBool(); + ui.actionShow_Gradient_Field->setChecked(checked); + slotShowHideGradientField(); + qDebug()<<"show GradientField: "<<checked; + } //options if (settings.contains("options/rememberSettings")) { @@ -1774,7 +1766,8 @@ void MainWindow::saveAllSettings() settings.setValue("view/showGeoCaptions", ui.actionShow_Geometry_Captions->isChecked()); settings.setValue("view/showNavLines", ui.actionShow_Navigation_Lines->isChecked()); settings.setValue("view/showOnScreensInfos", ui.actionShow_Onscreen_Infos->isChecked()); - settings.setValue("view/showObstacles", ui.actionShow_Obstacles->isChecked()); + settings.setValue("view/showObstacles", ui.actionShow_Obstacles->isChecked()); + settings.setValue("view/showGradientField", ui.actionShow_Gradient_Field->isChecked()); //options: the color settings are saved in the methods where they are used. settings.setValue("options/listeningPort", SystemSettings::getListeningPort()); @@ -1876,6 +1869,13 @@ void MainWindow::slotShowHideObstacles() _visualisationThread->showObstacle(value); SystemSettings::setShowObstacles(value); } +void MainWindow::slotShowHideGradientField() +{ + bool value=ui.actionShow_Gradient_Field->isChecked(); + _visualisationThread->showGradientField(value); + SystemSettings::setShowGradientField(value); +} + void MainWindow::slotShowGeometryStructure() { //QListView list; @@ -1904,9 +1904,9 @@ void MainWindow::slotOnGeometryItemChanged( QStandardItem *item) { for(int i=0;i<item->rowCount();i++) { - QStandardItem *child= item->child(i); - child->setCheckState(item->checkState()); - slotOnGeometryItemChanged(child); + QStandardItem *child= item->child(i); + child->setCheckState(item->checkState()); + slotOnGeometryItemChanged(child); } } diff --git a/src/MainWindow.h b/src/MainWindow.h index 21240f6707dfe1d32a2fb2f8412c4a73c74b212d..adaff46836991cd4862d46720a9621e204f39d06 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -174,6 +174,8 @@ public Q_SLOTS: void slotShowHideGeometryCaptions(); /// show hide the obstacles void slotShowHideObstacles(); + /// show/hide the gradient field + void slotShowHideGradientField(); /// show pedestrians only without trail void slotShowPedestrianOnly(); diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index 3d5f9baaec5e6a492363534c49fdc79abbb7c13a..6e10cb49b1ee875322d4b783a1e31f6b8cbd60bc 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -65,6 +65,14 @@ #include <vtkAssembly.h> #include <vtkProperty.h> #include <vtkTriangleFilter.h> +#include <vtkGenericDataObjectReader.h> +#include <vtkPolyDataReader.h> +#include <vtkStructuredGridReader.h> +#include <vtkStructuredPointsReader.h> +#include <vtkImageDataGeometryFilter.h> + + + #define VTK_CREATE(type, name) \ vtkSmartPointer<type> name = vtkSmartPointer<type>::New() @@ -259,6 +267,13 @@ bool SaxParser::startElement(const QString & /* namespaceURI */, //_geometry = std::shared_ptr<FacilityGeometry>(new FacilityGeometry("No name")); //_geoFactory.AddElement(0,0,_geometry); + }else if (qName == "gradient_field"){ + for(int i=0; i<at.length(); i++) { + if(at.localName(i)=="filename") { + ParseGradientFieldVTK(at.value(i),_geoFactory); + } + } + } else if (qName == "wall") { _parsingWalls=true; @@ -582,6 +597,7 @@ bool SaxParser::endElement(const QString & /* namespaceURI */, } else if (qName == "shape") { _dataset.setInitialHeights(_initialPedestriansHeights); _dataset.setInitialColors(_initialPedestriansColors); + } else if (qName == "gradient_field") { } _currentText.clear(); return true; @@ -635,8 +651,6 @@ bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) if(!building->InitGeometry()) return false; // create the polygons - - for(auto&& itr_room: building->GetAllRooms()) { for(auto&& itr_subroom: itr_room.second->GetAllSubRooms()) @@ -780,8 +794,6 @@ bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac) return true; } - - /// provided for convenience and will be removed in the next version void SaxParser::parseGeometryTRAV(QString content, GeometryFactory& geoFac,QDomNode geo) @@ -1205,7 +1217,7 @@ void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac) geoFac.AddElement(0,0,geo); } -bool SaxParser::ParseTxtFormat(QString fileName, SyncData* dataset, double * fps) +bool SaxParser::ParseTxtFormat(const QString &fileName, SyncData* dataset, double * fps) { //fileName="data/trajectories/1000_1_0_0_1_1.txt"; //fileName="data/trajectories/50_3_0_1_1_2.txt"; @@ -1360,6 +1372,31 @@ bool SaxParser::ParseTxtFormat(QString fileName, SyncData* dataset, double * fps return true; } +bool SaxParser::ParseGradientFieldVTK(const QString &fileName, GeometryFactory& geoFac) +{ + // Read the file + VTK_CREATE(vtkStructuredPointsReader, reader); + reader->SetFileName(fileName.toStdString().c_str()); + reader->Update(); + + VTK_CREATE(vtkImageDataGeometryFilter,geometryFilter ); + geometryFilter->SetInputConnection(reader->GetOutputPort()); + geometryFilter->Update(); + + VTK_CREATE(vtkPolyDataMapper,mapper); + mapper->SetInputConnection(geometryFilter->GetOutputPort()); + + VTK_CREATE(vtkActor, actor); + actor->SetMapper(mapper); + + shared_ptr<FacilityGeometry> gradient_field= shared_ptr<FacilityGeometry>(new FacilityGeometry("Gradient Field")); + gradient_field->addGradientField(actor); + + geoFac.AddElement(-1,-1,gradient_field); + geoFac.AddElement(-2,-2,gradient_field); + return true; +} + void SaxParser::InitHeader(int major, int minor, int patch) { if ( (minor==6) || (minor==5 && patch==1) ) { diff --git a/src/SaxParser.h b/src/SaxParser.h index cc74cf7acea6e3f1389a449afc7236f2a891bb25..43dcd95fea412d38fae8c40805550f3c5a447241 100644 --- a/src/SaxParser.h +++ b/src/SaxParser.h @@ -79,7 +79,10 @@ public: static QString extractGeometryFilename(QString& filename); /// parse the txt file format - static bool ParseTxtFormat(QString fileName, SyncData* dataset, double * fps); + static bool ParseTxtFormat(const QString& fileName, SyncData* dataset, double * fps); + + /// parse a vtk file + static bool ParseGradientFieldVTK(const QString& fileName, GeometryFactory& geoFac); private: //clear the mo diff --git a/src/SystemSettings.cpp b/src/SystemSettings.cpp index c5c508cbe228460274ed08793c0b5024b9c1cb27..29d678882861b56458955ed0118267f7eed07d42 100644 --- a/src/SystemSettings.cpp +++ b/src/SystemSettings.cpp @@ -54,6 +54,8 @@ bool SystemSettings::showExits=true; bool SystemSettings::showNavLines=true; bool SystemSettings::showTrajectories=false; bool SystemSettings::showObstacle=true; +bool SystemSettings::showGradienField=true; + unsigned short SystemSettings::port=8989; //double SystemSettings::bgColor[]= {1.0,1.0,1.0}; @@ -199,7 +201,14 @@ void SystemSettings::setShowObstacles(bool status) { showObstacle=status; } - +void SystemSettings::setShowGradientField(bool status) +{ + showGradienField=status; +} +bool SystemSettings::getShowGradientField() +{ + return showGradienField; +} bool SystemSettings::getShowObstacles() { return showObstacle; diff --git a/src/SystemSettings.h b/src/SystemSettings.h index d295c19fd81898bdad020221c72a0754023919b2..90f2e4b9fbbd14e4b3f4c9a93762743b5eb3ec7c 100644 --- a/src/SystemSettings.h +++ b/src/SystemSettings.h @@ -87,6 +87,11 @@ public: void static setShowObstacles(bool status); bool static getShowObstacles(); + //set/get the gradient field visibility + void static setShowGradientField(bool status); + bool static getShowGradientField(); + + // set/get the navigation lines visibility void static setShowNavLines(bool status); bool static getShowNavLines(); @@ -207,6 +212,7 @@ private: static bool showGeometryCaptions; static bool showFloor; static bool showObstacle; + static bool showGradienField; static bool showWalls; static bool showExits; static bool showNavLines; diff --git a/src/ThreadVisualisation.cpp b/src/ThreadVisualisation.cpp index 305681ae41af29cfc8da7c1c9f9d22387ecadc2e..fd618a5e7450c7b86ed248afdaa890047bbdf448 100644 --- a/src/ThreadVisualisation.cpp +++ b/src/ThreadVisualisation.cpp @@ -354,7 +354,8 @@ void ThreadVisualisation::run() setFloorColor(SystemSettings::getFloorColor()); setExitsColor(SystemSettings::getExitsColor()); setNavLinesColor(SystemSettings::getNavLinesColor()); - + //FIXME: + showGradientField(SystemSettings::getShowGradientField()); _renderWinInteractor->Start(); @@ -432,11 +433,15 @@ void ThreadVisualisation::showFloor(bool status) { _geometry.ShowFloor(status); } + void ThreadVisualisation::showObstacle(bool status) { _geometry.ShowObstacles(status); } - +void ThreadVisualisation::showGradientField(bool status) +{ + _geometry.ShowGradientField(status); +} void ThreadVisualisation::initGlyphs2D() { if(extern_glyphs_pedestrians) extern_glyphs_pedestrians->Delete(); diff --git a/src/ThreadVisualisation.h b/src/ThreadVisualisation.h index f47c146fa8e6aa13d14fc577c0ed18c6780b1214..efe0288bc6358a317129bd1aa27883c80b35a820 100644 --- a/src/ThreadVisualisation.h +++ b/src/ThreadVisualisation.h @@ -146,6 +146,8 @@ public: /// show/ hide the obstacles void showObstacle(bool status); + /// show/hide the gradeint field + void showGradientField(bool status); /// show / hide stairs ///not implemented diff --git a/src/geometry/FacilityGeometry.cpp b/src/geometry/FacilityGeometry.cpp index ed9966aa2627bce25cadc0cfd7db9809f55de615..79b592380702698634f8e495c4231a78c386a38e 100644 --- a/src/geometry/FacilityGeometry.cpp +++ b/src/geometry/FacilityGeometry.cpp @@ -81,6 +81,7 @@ FacilityGeometry::FacilityGeometry(const string &description) floorActor = vtkActor::New(); obstaclesActor = vtkActor::New(); + gradientFieldActor = vtkActor::New(); captions=vtkActor2DCollection::New(); linesPlotter2D = new LinePlotter2D(); @@ -151,23 +152,23 @@ void FacilityGeometry::CreateActors() assembly3D->AddPart(assemblyCaptions); } - void FacilityGeometry::setVisibility(bool status) - { - if(SystemSettings::get2D()) - { - assembly2D->SetVisibility(status); - } - else - { - assembly3D->SetVisibility(status); - } - _visibility=status; - } - - bool FacilityGeometry::getVisibility() const - { - return _visibility; - } +void FacilityGeometry::setVisibility(bool status) +{ + if(SystemSettings::get2D()) + { + assembly2D->SetVisibility(status); + } + else + { + 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 @@ -246,7 +247,6 @@ void FacilityGeometry::addNewElement(double center[3], double length, double ori void FacilityGeometry::addWall(double x1, double y1, double z1, double x2, double y2, double z2,double thickness,double height,double color) { - // all walls will have this parameters until changed wallColor=color; @@ -518,7 +518,6 @@ void FacilityGeometry::addNavLine(JPoint* p1, JPoint* p2, string caption) } } - void FacilityGeometry::addFloor(vtkPolyData* polygonPolyData ) { //triagulate everything @@ -542,6 +541,13 @@ void FacilityGeometry::addFloor(vtkPolyData* polygonPolyData ) assembly3D->AddPart(floorActor); } +void FacilityGeometry::addGradientField(vtkActor* gradientField) +{ + gradientFieldActor=gradientField; + assembly2D->AddPart(gradientFieldActor); + assembly3D->AddPart(gradientFieldActor); +} + void FacilityGeometry::addObstacles(vtkPolyData* polygonPolyData ) { //triagulate everything @@ -816,6 +822,10 @@ void FacilityGeometry::showFloor(bool status) { floorActor->SetVisibility(status); } +void FacilityGeometry::showGradientField(bool status) +{ + gradientFieldActor->SetVisibility(status); +} void FacilityGeometry::showObstacles(bool status) { diff --git a/src/geometry/FacilityGeometry.h b/src/geometry/FacilityGeometry.h index 2aee2b57193fd2fb54c5bc3f6d82acda6a67fb5d..ec8eb65c3f849df73a680715748fded58911ede0 100644 --- a/src/geometry/FacilityGeometry.h +++ b/src/geometry/FacilityGeometry.h @@ -110,6 +110,9 @@ public: ///draw obstacles void addObstacles(vtkPolyData* polygonPolyData); + ///add the gradient field + void addGradientField(vtkActor* gradientField); + const std::string & GetDescription() const ; /// draw other kinds of objects @@ -135,6 +138,7 @@ public: void showFloor(bool status); void showObstacles(bool status); void showGeometryLabels(int status); + void showGradientField(bool status); void setVisibility(bool status); bool getVisibility() const; @@ -175,6 +179,7 @@ private: vtkActor* floorActor; vtkActor* obstaclesActor; + vtkActor* gradientFieldActor; // other parts vtkAssembly* assemblyCaptions; diff --git a/src/geometry/GeometryFactory.cpp b/src/geometry/GeometryFactory.cpp index ce41a6bc37228c17a2fbd35eb573afc88bcd5d47..4e489107d1ddebb67809ac1e5a91d253122f5d7a 100644 --- a/src/geometry/GeometryFactory.cpp +++ b/src/geometry/GeometryFactory.cpp @@ -41,7 +41,7 @@ void GeometryFactory::Set3D(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->set3D(status); + subroom.second->set3D(status); } } } @@ -61,7 +61,7 @@ void GeometryFactory::ChangeWallsColor(double* color) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->changeWallsColor(color); + subroom.second->changeWallsColor(color); } } } @@ -73,7 +73,7 @@ void GeometryFactory::ChangeExitsColor(double* color) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->changeExitsColor(color); + subroom.second->changeExitsColor(color); } } } @@ -85,7 +85,7 @@ void GeometryFactory::ChangeNavLinesColor(double* color) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->changeNavLinesColor(color); + subroom.second->changeNavLinesColor(color); } } } @@ -109,7 +109,7 @@ void GeometryFactory::ChangeObstaclesColor(double* color) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->changeObstaclesColor(color); + subroom.second->changeObstaclesColor(color); } } } @@ -121,7 +121,7 @@ void GeometryFactory::ShowDoors(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showDoors(status); + subroom.second->showDoors(status); } } } @@ -133,7 +133,7 @@ void GeometryFactory::ShowStairs(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showStairs(status); + subroom.second->showStairs(status); } } } @@ -145,7 +145,7 @@ void GeometryFactory::ShowWalls(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showWalls(status); + subroom.second->showWalls(status); } } } @@ -157,7 +157,7 @@ void GeometryFactory::ShowNavLines(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showNavLines(status); + subroom.second->showNavLines(status); } } } @@ -169,7 +169,7 @@ void GeometryFactory::ShowFloor(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showFloor(status); + subroom.second->showFloor(status); } } } @@ -180,7 +180,20 @@ void GeometryFactory::ShowObstacles(bool status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showObstacles(status); + subroom.second->showObstacles(status); + } + } +} + + +void GeometryFactory::ShowGradientField(bool status) +{ + for (auto&& room: _geometryFactory) + { + for(auto&& subroom:room.second) + { + if(_geometryFactory[room.first][subroom.first]->getVisibility()) + subroom.second->showGradientField(status); } } } @@ -192,7 +205,7 @@ void GeometryFactory::ShowGeometryLabels(int status) for(auto&& subroom:room.second) { if(_geometryFactory[room.first][subroom.first]->getVisibility()) - subroom.second->showGeometryLabels(status); + subroom.second->showGeometryLabels(status); } } } diff --git a/src/geometry/GeometryFactory.h b/src/geometry/GeometryFactory.h index 112cf4f562d65d57f6cda5e77e0d7bda33b49ad4..54930ab14faa9b6e857f84a01883f2fd9f2c2624 100644 --- a/src/geometry/GeometryFactory.h +++ b/src/geometry/GeometryFactory.h @@ -31,6 +31,7 @@ public: void ShowNavLines(bool status); void ShowFloor(bool status); void ShowObstacles(bool status); + void ShowGradientField(bool status); void ShowGeometryLabels(int status); bool RefreshView(); void Clear(); diff --git a/src/geometry/LinePlotter2D.cpp b/src/geometry/LinePlotter2D.cpp index a02f39dc4bf8ff02d811cea00e69941c162d6a52..e64fa92e3a5443a9f996f555bfba81d574c471eb 100644 --- a/src/geometry/LinePlotter2D.cpp +++ b/src/geometry/LinePlotter2D.cpp @@ -63,7 +63,8 @@ LinePlotter2D::LinePlotter2D() door_lines = vtkCellArray::New(); door_lineScalars = vtkFloatArray::New(); door_curPointID=0; - door_width=3.5; +// door_width=3.5; + door_width=2; wall_mapper= vtkPolyDataMapper::New(); wall_actor= vtkActor::New(); @@ -71,7 +72,8 @@ LinePlotter2D::LinePlotter2D() wall_lines = vtkCellArray::New(); wall_lineScalars = vtkFloatArray::New(); wall_curPointID=0; - wall_width=4; +// wall_width=4; + wall_width=2; navline_curPointID =0; navline_width=2;