From 6beb33c9c27de34bf83198c37f872d1a8d78ebfb Mon Sep 17 00:00:00 2001 From: Ulrich Kemloh <kemlohulrich@gmail.com> Date: Thu, 17 Apr 2014 14:49:22 +0200 Subject: [PATCH] Captions and performance improvement --- TraVisTo.pro | 220 ++++---- src/Frame.cpp | 25 +- src/Frame.h | 8 +- src/SaxParser.cpp | 14 +- src/ThreadVisualisation.cpp | 38 +- src/TimerCallback.cpp | 978 ++++++++++++++++++------------------ src/TimerCallback.h | 4 +- src/extern_var.h | 6 +- 8 files changed, 673 insertions(+), 620 deletions(-) diff --git a/TraVisTo.pro b/TraVisTo.pro index 75b7ac6..08ae183 100644 --- a/TraVisTo.pro +++ b/TraVisTo.pro @@ -5,7 +5,7 @@ QT += xml network greaterThan(QT_MAJOR_VERSION, 4):QT += widgets -win32 { +win32 { INCLUDEPATH += C:/VTK/include/vtk-6.1 LIBS += -LC:/VTK/bin \ @@ -128,7 +128,7 @@ win32 { win32_5 { INCLUDEPATH += C:/VTK/include/vtk-5.10 - LIBS += -LC:/VTK/bin \ + LIBS += -LC:/VTK/bin_5 \ -lvtksys \ -lvtkzlib \ -lvtkjpeg \ @@ -278,113 +278,113 @@ unix_6 { -lvtkzlib-6.0 \ } - unix_5 { - INCLUDEPATH += /usr/include/vtk-5.8 - LIBS += -L/usr/lib/ \ - -lvtkCommon \ - -lvtkDICOMParser \ - -lvtkFiltering \ - -lvtkGenericFiltering \ - -lvtkGraphics \ - -lvtkHybrid \ - -lvtkIO \ - -lvtkImaging \ - -lvtkRendering \ - -lvtkVolumeRendering \ - -lvtkWidgets \ - -lvtkexoIIc \ - -lvtkftgl \ - -lvtksys \ - -lvtkverdict \ - -lvtkParallel \ - -lvtkmetaio - } +unix_5 { +INCLUDEPATH += /usr/include/vtk-5.8 +LIBS += -L/usr/lib/ \ + -lvtkCommon \ + -lvtkDICOMParser \ + -lvtkFiltering \ + -lvtkGenericFiltering \ + -lvtkGraphics \ + -lvtkHybrid \ + -lvtkIO \ + -lvtkImaging \ + -lvtkRendering \ + -lvtkVolumeRendering \ + -lvtkWidgets \ + -lvtkexoIIc \ + -lvtkftgl \ + -lvtksys \ + -lvtkverdict \ + -lvtkParallel \ + -lvtkmetaio + } - HEADERS += src/geometry/Building.h \ - src/geometry/Crossing.h \ - src/geometry/Goal.h \ - src/geometry/Hline.h \ - src/geometry/Line.h \ - src/geometry/NavLine.h \ - src/geometry/Obstacle.h \ - src/geometry/Point.h \ - src/geometry/Room.h \ - src/geometry/SubRoom.h \ - src/geometry/Transition.h \ - src/geometry/Wall.h \ - src/geometry/JPoint.h \ - src/tinyxml/tinystr.h \ - src/tinyxml/tinyxml.h \ - src/general/Macros.h \ - src/IO/OutputHandler.h \ - src/IO/TraVisToClient.h \ - forms/Settings.h \ - src/SaxParser.h \ - src/Debug.h \ - src/travisto.h \ - src/Frame.h \ - src/InteractorStyle.h \ - src/Message.h \ - src/Pedestrian.h \ - src/SimpleVisualisationWindow.h \ - src/SyncData.h \ - src/SystemSettings.h \ - src/ThreadDataTransfert.h \ - src/ThreadVisualisation.h \ - src/TimerCallback.h \ - src/TrajectoryPoint.h \ - src/extern_var.h \ - src/geometry/FacilityGeometry.h \ - src/geometry/LinePlotter.h \ - src/geometry/PointPlotter.h \ - src/geometry/LinePlotter2D.h \ - src/geometry/PointPlotter2D.h \ - src/network/TraVisToServer.h - - SOURCES += src/geometry/Building.cpp \ - src/geometry/Crossing.cpp \ - src/geometry/Goal.cpp \ - src/geometry/Hline.cpp \ - src/geometry/Line.cpp \ - src/geometry/NavLine.cpp \ - src/geometry/Obstacle.cpp \ - src/geometry/Point.cpp \ - src/geometry/Room.cpp \ - src/geometry/SubRoom.cpp \ - src/geometry/Transition.cpp \ - src/geometry/Wall.cpp \ - src/geometry/JPoint.cpp \ - src/tinyxml/tinystr.cpp \ - src/tinyxml/tinyxml.cpp \ - src/tinyxml/tinyxmlerror.cpp \ - src/tinyxml/tinyxmlparser.cpp \ - src/IO/OutputHandler.cpp \ - src/IO/TraVisToClient.cpp \ - forms/Settings.cpp \ - src/SaxParser.cpp \ - src/Debug.cpp \ - src/main.cpp \ - src/travisto.cpp \ - src/Frame.cpp \ - src/InteractorStyle.cpp \ - src/Pedestrian.cpp \ - src/SimpleVisualisationWindow.cpp \ - src/SyncData.cpp \ - src/SystemSettings.cpp \ - src/ThreadDataTransfert.cpp \ - src/ThreadVisualisation.cpp \ - src/TimerCallback.cpp \ - src/TrajectoryPoint.cpp \ - src/geometry/LinePlotter2D.cpp \ - src/geometry/PointPlotter2D.cpp \ - src/geometry/FacilityGeometry.cpp \ - src/geometry/LinePlotter.cpp \ - src/geometry/PointPlotter.cpp \ - src/network/TraVisToServer.cpp - FORMS += forms/settings.ui \ - forms/travisto.ui - RESOURCES += forms/icons.qrc \ - forms/icons.qrc \ - forms/icons.qrc - RC_FILE = forms/travisto.rc +HEADERS += src/geometry/Building.h \ + src/geometry/Crossing.h \ + src/geometry/Goal.h \ + src/geometry/Hline.h \ + src/geometry/Line.h \ + src/geometry/NavLine.h \ + src/geometry/Obstacle.h \ + src/geometry/Point.h \ + src/geometry/Room.h \ + src/geometry/SubRoom.h \ + src/geometry/Transition.h \ + src/geometry/Wall.h \ + src/geometry/JPoint.h \ + src/tinyxml/tinystr.h \ + src/tinyxml/tinyxml.h \ + src/general/Macros.h \ + src/IO/OutputHandler.h \ + src/IO/TraVisToClient.h \ + forms/Settings.h \ + src/SaxParser.h \ + src/Debug.h \ + src/travisto.h \ + src/Frame.h \ + src/InteractorStyle.h \ + src/Message.h \ + src/Pedestrian.h \ + src/SimpleVisualisationWindow.h \ + src/SyncData.h \ + src/SystemSettings.h \ + src/ThreadDataTransfert.h \ + src/ThreadVisualisation.h \ + src/TimerCallback.h \ + src/TrajectoryPoint.h \ + src/extern_var.h \ + src/geometry/FacilityGeometry.h \ + src/geometry/LinePlotter.h \ + src/geometry/PointPlotter.h \ + src/geometry/LinePlotter2D.h \ + src/geometry/PointPlotter2D.h \ + src/network/TraVisToServer.h + +SOURCES += src/geometry/Building.cpp \ + src/geometry/Crossing.cpp \ + src/geometry/Goal.cpp \ + src/geometry/Hline.cpp \ + src/geometry/Line.cpp \ + src/geometry/NavLine.cpp \ + src/geometry/Obstacle.cpp \ + src/geometry/Point.cpp \ + src/geometry/Room.cpp \ + src/geometry/SubRoom.cpp \ + src/geometry/Transition.cpp \ + src/geometry/Wall.cpp \ + src/geometry/JPoint.cpp \ + src/tinyxml/tinystr.cpp \ + src/tinyxml/tinyxml.cpp \ + src/tinyxml/tinyxmlerror.cpp \ + src/tinyxml/tinyxmlparser.cpp \ + src/IO/OutputHandler.cpp \ + src/IO/TraVisToClient.cpp \ + forms/Settings.cpp \ + src/SaxParser.cpp \ + src/Debug.cpp \ + src/main.cpp \ + src/travisto.cpp \ + src/Frame.cpp \ + src/InteractorStyle.cpp \ + src/Pedestrian.cpp \ + src/SimpleVisualisationWindow.cpp \ + src/SyncData.cpp \ + src/SystemSettings.cpp \ + src/ThreadDataTransfert.cpp \ + src/ThreadVisualisation.cpp \ + src/TimerCallback.cpp \ + src/TrajectoryPoint.cpp \ + src/geometry/LinePlotter2D.cpp \ + src/geometry/PointPlotter2D.cpp \ + src/geometry/FacilityGeometry.cpp \ + src/geometry/LinePlotter.cpp \ + src/geometry/PointPlotter.cpp \ + src/network/TraVisToServer.cpp +FORMS += forms/settings.ui \ + forms/travisto.ui +RESOURCES += forms/icons.qrc \ + forms/icons.qrc \ + forms/icons.qrc +RC_FILE = forms/travisto.rc diff --git a/src/Frame.cpp b/src/Frame.cpp index 3d2731d..90cdff1 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -40,6 +40,7 @@ #include <vtkFloatArray.h> #include <vtkPointData.h> #include <vtkMath.h> +#include <vtkIntArray.h> #define VTK_CREATE(type, name) \ @@ -48,6 +49,7 @@ Frame::Frame() { elementCursor=0; _polydata = vtkPolyData::New(); + _polydataLabels = vtkPolyData::New(); } Frame::~Frame() { @@ -58,6 +60,7 @@ Frame::~Frame() { framePoints.clear(); _polydata->Delete(); + _polydataLabels->Delete(); } int Frame::getSize(){ @@ -146,6 +149,7 @@ vtkPolyData* Frame::GetPolyData() { VTK_CREATE (vtkPoints, points); VTK_CREATE (vtkFloatArray, colors); VTK_CREATE (vtkFloatArray, tensors); + VTK_CREATE (vtkIntArray, labels); colors->SetName("color"); colors->SetNumberOfComponents(1); @@ -153,6 +157,9 @@ vtkPolyData* Frame::GetPolyData() { tensors->SetName("tensors"); tensors->SetNumberOfComponents(9); + labels->SetName("labels"); + labels->SetNumberOfComponents(1); + for (unsigned int i=0;i<framePoints.size();i++){ double pos[3]={0,0,0}; double rad[3]; @@ -160,6 +167,7 @@ vtkPolyData* Frame::GetPolyData() { framePoints[i]->getPos(pos); //pos[2]=90; points->InsertNextPoint(pos); + labels->InsertNextValue(framePoints[i]->getIndex()+1); double data[7]; framePoints[i]->getEllipse(data); @@ -234,12 +242,19 @@ vtkPolyData* Frame::GetPolyData() { _polydata->GetPointData()->SetActiveTensors("tensors"); -// if(framePoints.size()<0) { -// cout<<"not good"<<endl; -// exit(0); -// } + // setting the labels + _polydata->GetPointData()->AddArray(labels); + //_polydata->GetPointData()->set + + //labels + //_polydataLabels->SetPoints(points); + + return _polydata; +} - return _polydata; +vtkPolyData *Frame::GetPolyDataLabels() +{ + return _polydataLabels; } unsigned int Frame::getElementCursor(){ diff --git a/src/Frame.h b/src/Frame.h index 55101be..7392c98 100644 --- a/src/Frame.h +++ b/src/Frame.h @@ -57,12 +57,18 @@ public: vtkPolyData* GetPolyData(); + vtkPolyData* GetPolyDataLabels(); + vtkPolyData* GetSclarData(); private: std::vector <TrajectoryPoint *> framePoints; - vtkPolyData * _polydata; + /// ellipse parameters + vtkPolyData * _polydata; + + /// pedestrians labels + vtkPolyData * _polydataLabels; /// points to the actual element in the frame unsigned int elementCursor; diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index 29b6c62..c9bb2ce 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -668,14 +668,18 @@ void SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry){ //triagulate everything vtkSmartPointer<vtkTriangleFilter> filter=vtkSmartPointer<vtkTriangleFilter>::New(); - filter->SetInputData(polygonPolyData); - // Create a mapper and actor - vtkSmartPointer<vtkPolyDataMapper> mapper = - vtkSmartPointer<vtkPolyDataMapper>::New(); + // Create a mapper and actor + vtkSmartPointer<vtkPolyDataMapper> mapper = + vtkSmartPointer<vtkPolyDataMapper>::New(); + + + #if VTK_MAJOR_VERSION <= 5 - mapper->SetInput(polygonPolyData); + filter->SetInput(polygonPolyData); + mapper->SetInput(filter->GetOutput()); #else + filter->SetInputData(polygonPolyData); mapper->SetInputConnection(filter->GetOutputPort()); #endif diff --git a/src/ThreadVisualisation.cpp b/src/ThreadVisualisation.cpp index cb8e47f..e769207 100644 --- a/src/ThreadVisualisation.cpp +++ b/src/ThreadVisualisation.cpp @@ -65,6 +65,8 @@ #include <vtkSmartPointer.h> #include <vtkActor2DCollection.h> #include <vtkRegularPolygonSource.h> +#include <vtkLabeledDataMapper.h> +#include <vtkDiskSource.h> #include "geometry/FacilityGeometry.h" @@ -443,23 +445,30 @@ void ThreadVisualisation::showDoors(bool status){ void ThreadVisualisation::initGlyphs(){ - VTK_CREATE (vtkSphereSource, sphereSource); - sphereSource->SetRadius(30); - sphereSource->SetPhiResolution(20); - sphereSource->SetThetaResolution(20); - extern_glyphs_pedestrians->SetSourceConnection(sphereSource->GetOutputPort()); + //VTK_CREATE (vtkSphereSource, agentShape); + //agentShape->SetRadius(30); + //agentShape->SetPhiResolution(20); + //agentShape->SetThetaResolution(20); + + //now create the glyphs with ellipses + VTK_CREATE (vtkDiskSource, agentShape); + agentShape->SetCircumferentialResolution(20); + agentShape->SetInnerRadius(0); + agentShape->SetOuterRadius(30); + + extern_glyphs_pedestrians->SetSourceConnection(agentShape->GetOutputPort()); #if VTK_MAJOR_VERSION <= 5 - extern_glyphs_pedestrians->SetSource(sphereSource->GetOutput()); + extern_glyphs_pedestrians->SetSource(agentShape->GetOutput()); #else - extern_glyphs_pedestrians->SetInputConnection(sphereSource->GetOutputPort()); + extern_glyphs_pedestrians->SetInputConnection(agentShape->GetOutputPort()); #endif /* - VTK_CREATE (vtkCylinderSource, cylinderSource); - cylinderSource->SetHeight(160); - cylinderSource->SetRadius(30); + VTK_CREATE (vtkCylinderSource, agentShape); + agentShape->SetHeight(160); + agentShape->SetRadius(30); #if VTK_MAJOR_VERSION <= 5 @@ -500,6 +509,15 @@ void ThreadVisualisation::initGlyphs(){ VTK_CREATE(vtkActor, actor); actor->SetMapper(mapper); renderer->AddActor(actor); + + + // structure for the labels + VTK_CREATE(vtkLabeledDataMapper, labelMapper); + extern_pedestrians_labels->SetMapper(labelMapper); + labelMapper->SetFieldDataName("labels"); + labelMapper->SetLabelModeToLabelFieldData(); + renderer->AddActor2D(extern_pedestrians_labels); + extern_pedestrians_labels->SetVisibility(false); } void ThreadVisualisation::init(){ diff --git a/src/TimerCallback.cpp b/src/TimerCallback.cpp index 76a5fb4..5ebf3d6 100644 --- a/src/TimerCallback.cpp +++ b/src/TimerCallback.cpp @@ -73,9 +73,11 @@ #include <vtkCamera.h> #include <vtkTextProperty.h> #include <vtkSphereSource.h> -//#include <vtkGlyph3D.h> +#include <vtkMapper2D.h> +#include <vtkMapper.h> #include <vtkSmartPointer.h> #include <vtkPolyDataMapper.h> +#include <vtkLabeledDataMapper.h> @@ -91,256 +93,259 @@ #include "TimerCallback.h" #define VTK_CREATE(type, name) \ - vtkSmartPointer<type> name = vtkSmartPointer<type>::New() + vtkSmartPointer<type> name = vtkSmartPointer<type>::New() using namespace std; TimerCallback* TimerCallback::New() { - TimerCallback *cb = new TimerCallback; - cb->RenderTimerId = 0; - cb->windowToImageFilter=NULL; - cb->runningTime=NULL; - return cb; + TimerCallback *cb = new TimerCallback; + cb->RenderTimerId = 0; + cb->windowToImageFilter=NULL; + cb->runningTime=NULL; + return cb; } void TimerCallback::Execute(vtkObject *caller, unsigned long eventId, - void *callData){ - if (vtkCommand::TimerEvent == eventId) - { - int frameNumber=0; - int nPeds=0; - static bool isRecording =false; - int tid = * static_cast<int *>(callData); - //double renderingTime=0; + void *callData){ + if (vtkCommand::TimerEvent == eventId) + { + int frameNumber=0; + int nPeds=0; + static bool isRecording =false; + int tid = * static_cast<int *>(callData); + //double renderingTime=0; - if (tid == this->RenderTimerId) - { - //dont update anything if the system is actually paused - //if(extern_is_pause) return; + if (tid == this->RenderTimerId) + { + //dont update anything if the system is actually paused + //if(extern_is_pause) return; - vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::SafeDownCast(caller); - vtkRenderWindow *renderWindow = iren->GetRenderWindow(); - vtkRenderer *renderer =renderWindow->GetRenderers()->GetFirstRenderer(); + vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::SafeDownCast(caller); + vtkRenderWindow *renderWindow = iren->GetRenderWindow(); + vtkRenderer *renderer =renderWindow->GetRenderers()->GetFirstRenderer(); - if (iren && renderWindow && renderer) - { - // very important - setAllPedestriansInvisible(); + if (iren && renderWindow && renderer) + { + // very important + setAllPedestriansInvisible(); - //first pedestrian group - if(extern_first_dataset_loaded) { - Frame * frame=NULL; + //first pedestrian group + if(extern_first_dataset_loaded) { + Frame * frame=NULL; - // return the same frame if the system is paused - // in fact you could just return, but in this case no update will be made - // e.g showing captions/trails... + // return the same frame if the system is paused + // in fact you could just return, but in this case no update will be made + // e.g showing captions/trails... - if(extern_is_pause) - frame=extern_trajectories_firstSet.getFrame(extern_trajectories_firstSet.getFrameCursor()); - else - frame = extern_trajectories_firstSet.getNextFrame(); + if(extern_is_pause) + frame=extern_trajectories_firstSet.getFrame(extern_trajectories_firstSet.getFrameCursor()); + else + frame = extern_trajectories_firstSet.getNextFrame(); - if(frame==NULL){ + if(frame==NULL){ - }else{ + }else{ - frameNumber=extern_trajectories_firstSet.getFrameCursor(); + frameNumber=extern_trajectories_firstSet.getFrameCursor(); + vtkPolyData* pData=frame->GetPolyData(); #if VTK_MAJOR_VERSION <= 5 - extern_glyphs_pedestrians->SetInput(frame->GetPolyData()); + extern_glyphs_pedestrians->SetInput(pData); + ((vtkLabeledDataMapper*)extern_pedestrians_labels->GetMapper())->SetInput(pData); #else - extern_glyphs_pedestrians->SetInputData(frame->GetPolyData()); + extern_glyphs_pedestrians->SetInputData(pData); + extern_pedestrians_labels->GetMapper()->SetInputDataObject(pData); #endif extern_glyphs_pedestrians->Update(); - nPeds= frame->getSize(); - - } - } - - // TODO: restore this if you want to use actors instead of glyphs - if(extern_first_dataset_loaded && false) { - Frame * frame=NULL; - - // return the same frame if the system is paused - // in fact you could just return, but in this case no update will be made - // e.g showing captions/trails... - - if(extern_is_pause) - frame=extern_trajectories_firstSet.getFrame(extern_trajectories_firstSet.getFrameCursor()); - else - frame = extern_trajectories_firstSet.getNextFrame(); - - if(frame==NULL){ - - }else{ - - // just take the frame number given by this dataset - frameNumber=extern_trajectories_firstSet.getFrameCursor(); - if(extern_tracking_enable) - getTrail(1,frameNumber); - - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - - //point index start at 1. this may needed to be fixed - extern_pedestrians_firstSet[point->getIndex()]->moveTo(point); - nPeds++; - } - //CAUTION: reset the fucking counter - frame->resetCursor(); - } - } - - //second pedestrian group - if(extern_second_dataset_loaded){ - - Frame * frame=NULL; - if(extern_is_pause) - frame=extern_trajectories_secondSet.getFrame(extern_trajectories_secondSet.getFrameCursor()); - else - frame = extern_trajectories_secondSet.getNextFrame(); - - if(frame==NULL){ - - }else{ - // just take the frame number given by this dataset - frameNumber=extern_trajectories_secondSet.getFrameCursor(); - if(extern_tracking_enable) - getTrail(2,frameNumber); - - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - extern_pedestrians_secondSet[point->getIndex()]->moveTo(point); - } - //CAUTION: reset the fucking counter - frame->resetCursor(); - } - } - - //third pedestrian group - if(extern_third_dataset_loaded){ - - Frame * frame=NULL; - if(extern_is_pause) - frame=extern_trajectories_thirdSet.getFrame(extern_trajectories_thirdSet.getFrameCursor()); - else - frame = extern_trajectories_thirdSet.getNextFrame(); - - if(frame==NULL){ - - }else { - // just take the frame number given by this dataset - frameNumber=extern_trajectories_thirdSet.getFrameCursor(); - if(extern_tracking_enable) - getTrail(3,frameNumber); - - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - //point index start at 1. this may needed to be fixed - extern_pedestrians_thirdSet[point->getIndex()]->moveTo(point); - //set visible to true - } - //CAUTION: reset the fucking counter - frame->resetCursor(); - } - } - - int* winSize=renderWindow->GetSize(); - static int lastWinX=winSize[0]+1; // +1 to trigger a first change - static int lastWinY=winSize[1]; - - sprintf(runningTimeText,"Pedestrians: %d Time: %ld Sec",nPeds,frameNumber*iren->GetTimerDuration(tid)/1000); - runningTime->SetInput(runningTimeText); - runningTime->Modified(); - - if((lastWinX!=winSize[0]) || (lastWinY!=winSize[1]) || (frameNumber<10)) - { - static std::string winBaseName(renderWindow->GetWindowName()); - std::string winName=winBaseName; - std::string s; - winName.append(" [ "); - s=QString::number(winSize[0]).toStdString(); - winName.append(s); - winName.append("X"); - s=QString::number(winSize[1]).toStdString(); - winName.append(s); - winName.append(" ] "); - - int posY=winSize[1]*(1.0-30.0/536.0); - int posX=winSize[0]*(1.0-450.0/720.0); - runningTime->SetPosition(posX,posY); - renderWindow->SetWindowName(winName.c_str()); - - lastWinX=winSize[0]; - lastWinY=winSize[1]; - } - - iren->Render(); - - if(extern_force_system_update){ - updateSettings(renderWindow); - } - if(extern_take_screenshot){ - takeScreenshot(renderWindow); - } - if(SystemSettings::getRecordPNGsequence()){ - takeScreenshotSequence(renderWindow); - } - - if (frameNumber!=0) { - int desiredfps=1000.0/iren->GetTimerDuration(tid); - int effectivefps=1/(renderer->GetLastRenderTimeInSeconds()); - - effectivefps = (effectivefps>desiredfps)?desiredfps:effectivefps; - - emit signalFrameNumber(frameNumber); - emit signalRunningTime(frameNumber*iren->GetTimerDuration(tid)); - emit signalRenderingTime(effectivefps); - } + nPeds= frame->getSize(); + + } + } + + // TODO: restore this if you want to use actors instead of glyphs + if(extern_first_dataset_loaded && false) { + Frame * frame=NULL; + + // return the same frame if the system is paused + // in fact you could just return, but in this case no update will be made + // e.g showing captions/trails... + + if(extern_is_pause) + frame=extern_trajectories_firstSet.getFrame(extern_trajectories_firstSet.getFrameCursor()); + else + frame = extern_trajectories_firstSet.getNextFrame(); + + if(frame==NULL){ + + }else{ + + // just take the frame number given by this dataset + frameNumber=extern_trajectories_firstSet.getFrameCursor(); + if(extern_tracking_enable) + getTrail(1,frameNumber); + + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + + //point index start at 1. this may needed to be fixed + extern_pedestrians_firstSet[point->getIndex()]->moveTo(point); + nPeds++; + } + //CAUTION: reset the fucking counter + frame->resetCursor(); + } + } + + //second pedestrian group + if(extern_second_dataset_loaded){ + + Frame * frame=NULL; + if(extern_is_pause) + frame=extern_trajectories_secondSet.getFrame(extern_trajectories_secondSet.getFrameCursor()); + else + frame = extern_trajectories_secondSet.getNextFrame(); + + if(frame==NULL){ + + }else{ + // just take the frame number given by this dataset + frameNumber=extern_trajectories_secondSet.getFrameCursor(); + if(extern_tracking_enable) + getTrail(2,frameNumber); + + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + extern_pedestrians_secondSet[point->getIndex()]->moveTo(point); + } + //CAUTION: reset the fucking counter + frame->resetCursor(); + } + } + + //third pedestrian group + if(extern_third_dataset_loaded){ + + Frame * frame=NULL; + if(extern_is_pause) + frame=extern_trajectories_thirdSet.getFrame(extern_trajectories_thirdSet.getFrameCursor()); + else + frame = extern_trajectories_thirdSet.getNextFrame(); + + if(frame==NULL){ + + }else { + // just take the frame number given by this dataset + frameNumber=extern_trajectories_thirdSet.getFrameCursor(); + if(extern_tracking_enable) + getTrail(3,frameNumber); + + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + //point index start at 1. this may needed to be fixed + extern_pedestrians_thirdSet[point->getIndex()]->moveTo(point); + //set visible to true + } + //CAUTION: reset the fucking counter + frame->resetCursor(); + } + } + + int* winSize=renderWindow->GetSize(); + static int lastWinX=winSize[0]+1; // +1 to trigger a first change + static int lastWinY=winSize[1]; + + sprintf(runningTimeText,"Pedestrians: %d Time: %ld Sec",nPeds,frameNumber*iren->GetTimerDuration(tid)/1000); + runningTime->SetInput(runningTimeText); + runningTime->Modified(); + + if((lastWinX!=winSize[0]) || (lastWinY!=winSize[1]) || (frameNumber<10)) + { + static std::string winBaseName(renderWindow->GetWindowName()); + std::string winName=winBaseName; + std::string s; + winName.append(" [ "); + s=QString::number(winSize[0]).toStdString(); + winName.append(s); + winName.append("X"); + s=QString::number(winSize[1]).toStdString(); + winName.append(s); + winName.append(" ] "); + + int posY=winSize[1]*(1.0-30.0/536.0); + int posX=winSize[0]*(1.0-450.0/720.0); + runningTime->SetPosition(posX,posY); + renderWindow->SetWindowName(winName.c_str()); + + lastWinX=winSize[0]; + lastWinY=winSize[1]; + } + + iren->Render(); + + if(extern_force_system_update){ + updateSettings(renderWindow); + } + if(extern_take_screenshot){ + takeScreenshot(renderWindow); + } + if(SystemSettings::getRecordPNGsequence()){ + takeScreenshotSequence(renderWindow); + } + + if (frameNumber!=0) { + int desiredfps=1000.0/iren->GetTimerDuration(tid); + int effectivefps=1/(renderer->GetLastRenderTimeInSeconds()); + + effectivefps = (effectivefps>desiredfps)?desiredfps:effectivefps; + + emit signalFrameNumber(frameNumber); + emit signalRunningTime(frameNumber*iren->GetTimerDuration(tid)); + emit signalRenderingTime(effectivefps); + } #ifdef TRAVISTO_FFMPEG - if(extern_launch_recording){ - extern_launch_recording=false; //reset + if(extern_launch_recording){ + extern_launch_recording=false; //reset - windowToImageFilter=vtkWindowToImageFilter::New(); + windowToImageFilter=vtkWindowToImageFilter::New(); #ifdef WIN32 - pAVIWriter=vtkAVIWriter::New(); + pAVIWriter=vtkAVIWriter::New(); #endif #ifdef __linux__ - pAVIWriter=vtkFFMPEGWriter::New(); + pAVIWriter=vtkFFMPEGWriter::New(); #endif - pAVIWriter->SetQuality(2); - pAVIWriter->SetRate(1000.0/iren->GetTimerDuration(tid)); + pAVIWriter->SetQuality(2); + pAVIWriter->SetRate(1000.0/iren->GetTimerDuration(tid)); - //static int videoID=0; - //char filename[20]={0}; - //sprintf(filename,"travisto_video_%d.avi",videoID++); - //pAVIWriter->SetFileName(filename); + //static int videoID=0; + //char filename[20]={0}; + //sprintf(filename,"travisto_video_%d.avi",videoID++); + //pAVIWriter->SetFileName(filename); - QString videoName; - SystemSettings::getOutputDirectory(videoName); - //create directory if not exits - if(!QDir(videoName).exists()){ - QDir dir; - if(!dir.mkpath (videoName )){ - cerr<<"could not create directory: "<< videoName.toStdString(); - videoName=""; // current - } - } + QString videoName; + SystemSettings::getOutputDirectory(videoName); + //create directory if not exits + if(!QDir(videoName).exists()){ + QDir dir; + if(!dir.mkpath (videoName )){ + cerr<<"could not create directory: "<< videoName.toStdString(); + videoName=""; // current + } + } - videoName += "/tvtvid_"+QDateTime::currentDateTime().toString("yyMMdd_hh_mm_").append(SystemSettings::getFilenamePrefix()).append(".avi"); + videoName += "/tvtvid_"+QDateTime::currentDateTime().toString("yyMMdd_hh_mm_").append(SystemSettings::getFilenamePrefix()).append(".avi"); - pAVIWriter->SetFileName(videoName.toStdString().c_str()); + pAVIWriter->SetFileName(videoName.toStdString().c_str()); - if(windowToImageFilter!=NULL) + if(windowToImageFilter!=NULL) if(windowToImageFilter->GetInput()==NULL){ //should be the case by first call windowToImageFilter->SetInput(renderWindow); #if VTK_MAJOR_VERSION <= 5 @@ -349,320 +354,321 @@ void TimerCallback::Execute(vtkObject *caller, unsigned long eventId, pAVIWriter->SetInputConnection(windowToImageFilter->GetOutputPort()); #endif pAVIWriter->Start(); - } - extern_recording_enable=true; - isRecording=true; - } - - if(isRecording){ - windowToImageFilter->Modified(); - // only write when not paused - if(!extern_is_pause) pAVIWriter->Write(); - - if(extern_recording_enable==false){ //stop the recording - pAVIWriter->End(); - windowToImageFilter->Delete(); - pAVIWriter->Delete(); - isRecording=false; - } - } + } + extern_recording_enable=true; + isRecording=true; + } + + if(isRecording){ + windowToImageFilter->Modified(); + // only write when not paused + if(!extern_is_pause) pAVIWriter->Write(); + + if(extern_recording_enable==false){ //stop the recording + pAVIWriter->End(); + windowToImageFilter->Delete(); + pAVIWriter->Delete(); + isRecording=false; + } + } #endif //TRAVISTO_FFMPEG - if(extern_shutdown_visual_thread){ - emit signalFrameNumber(0); + if(extern_shutdown_visual_thread){ + emit signalFrameNumber(0); - // this will force an update of the windows - lastWinX=0; - lastWinY=0; - //exit if and only if the recording process is terminated - if(isRecording) extern_recording_enable=false; - else iren->ExitCallback(); + // this will force an update of the windows + lastWinX=0; + lastWinY=0; + //exit if and only if the recording process is terminated + if(isRecording) extern_recording_enable=false; + else iren->ExitCallback(); - } - } - } - } + } + } + } + } } void TimerCallback::updateSettings(vtkRenderWindow* renderWindow) { - static bool fullscreen=false; - - // check the caption colour mode - int captionSize, orientation; - bool automaticRotation, autoCaptionMode; - QColor captionColor; - SystemSettings::getCaptionsParameters(captionSize,captionColor,orientation,automaticRotation); - - autoCaptionMode= !(captionColor.isValid()); - - if(autoCaptionMode==false){ // tODO set the colour to auto mode - - } - - if(extern_first_dataset_loaded){ - int pedColor[3]; - SystemSettings::getPedestrianColor(0,pedColor); - for(int i=0;i<extern_trajectories_firstSet.getNumberOfAgents();i++){ - extern_pedestrians_firstSet[i]->enableCaption(SystemSettings::getShowCaption()); - if(SystemSettings::getPedestrianColorProfileFromFile()==false){ - extern_pedestrians_firstSet[i]->setColor(pedColor); - } - extern_pedestrians_firstSet[i]->setGroupVisibility(extern_first_dataset_visible); - extern_pedestrians_firstSet[i]->setCaptionSize(captionSize); - extern_pedestrians_firstSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); - extern_pedestrians_firstSet[i]->setCaptionsColor(captionColor); - extern_pedestrians_firstSet[i]->setResolution(SystemSettings::getEllipseResolution()); - } - } - - if(extern_second_dataset_loaded){ - int pedColor[3]; - SystemSettings::getPedestrianColor(1,pedColor); - for(int i=0;i<extern_trajectories_secondSet.getNumberOfAgents();i++){ - extern_pedestrians_secondSet[i]->enableCaption(SystemSettings::getShowCaption()); - if(SystemSettings::getPedestrianColorProfileFromFile()==false){ - extern_pedestrians_secondSet[i]->setColor(pedColor); - } - extern_pedestrians_secondSet[i]->setGroupVisibility(extern_second_dataset_visible); - extern_pedestrians_secondSet[i]->setCaptionSize(captionSize); - extern_pedestrians_secondSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); - extern_pedestrians_secondSet[i]->setCaptionsColor(captionColor); - extern_pedestrians_secondSet[i]->setResolution(SystemSettings::getEllipseResolution()); - - } - } - - if(extern_third_dataset_loaded){ - int pedColor[3]; - SystemSettings::getPedestrianColor(2,pedColor); - for(int i=0;i<extern_trajectories_thirdSet.getNumberOfAgents();i++){ - extern_pedestrians_thirdSet[i]->enableCaption(SystemSettings::getShowCaption()); - - if(SystemSettings::getPedestrianColorProfileFromFile()==false){ - extern_pedestrians_thirdSet[i]->setColor(pedColor); - } - extern_pedestrians_thirdSet[i]->setGroupVisibility(extern_third_dataset_visible); - extern_pedestrians_thirdSet[i]->setCaptionSize(captionSize); - extern_pedestrians_thirdSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); - extern_pedestrians_thirdSet[i]->setCaptionsColor(captionColor); - extern_pedestrians_thirdSet[i]->setResolution(SystemSettings::getEllipseResolution()); - } - } - - //enable / disable full screen - if(fullscreen!=extern_fullscreen_enable){ - renderWindow->SetFullScreen(extern_fullscreen_enable); - //renderWindow->GetRenderers()->GetFirstRenderer()->ResetCamera(); - fullscreen=extern_fullscreen_enable; - } - - // take - extern_force_system_update=false; + static bool fullscreen=false; + + // check the caption colour mode + int captionSize, orientation; + bool automaticRotation, autoCaptionMode; + QColor captionColor; + SystemSettings::getCaptionsParameters(captionSize,captionColor,orientation,automaticRotation); + + autoCaptionMode= !(captionColor.isValid()); + + if(autoCaptionMode==false){ // tODO set the colour to auto mode + + } + + if(extern_first_dataset_loaded){ + int pedColor[3]; + SystemSettings::getPedestrianColor(0,pedColor); + for(int i=0;i<extern_trajectories_firstSet.getNumberOfAgents();i++){ + extern_pedestrians_firstSet[i]->enableCaption(SystemSettings::getShowCaption()); + if(SystemSettings::getPedestrianColorProfileFromFile()==false){ + extern_pedestrians_firstSet[i]->setColor(pedColor); + } + extern_pedestrians_firstSet[i]->setGroupVisibility(extern_first_dataset_visible); + extern_pedestrians_firstSet[i]->setCaptionSize(captionSize); + extern_pedestrians_firstSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); + extern_pedestrians_firstSet[i]->setCaptionsColor(captionColor); + extern_pedestrians_firstSet[i]->setResolution(SystemSettings::getEllipseResolution()); + } + extern_pedestrians_labels->SetVisibility(SystemSettings::getShowCaption()); + } + + if(extern_second_dataset_loaded){ + int pedColor[3]; + SystemSettings::getPedestrianColor(1,pedColor); + for(int i=0;i<extern_trajectories_secondSet.getNumberOfAgents();i++){ + extern_pedestrians_secondSet[i]->enableCaption(SystemSettings::getShowCaption()); + if(SystemSettings::getPedestrianColorProfileFromFile()==false){ + extern_pedestrians_secondSet[i]->setColor(pedColor); + } + extern_pedestrians_secondSet[i]->setGroupVisibility(extern_second_dataset_visible); + extern_pedestrians_secondSet[i]->setCaptionSize(captionSize); + extern_pedestrians_secondSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); + extern_pedestrians_secondSet[i]->setCaptionsColor(captionColor); + extern_pedestrians_secondSet[i]->setResolution(SystemSettings::getEllipseResolution()); + + } + } + + if(extern_third_dataset_loaded){ + int pedColor[3]; + SystemSettings::getPedestrianColor(2,pedColor); + for(int i=0;i<extern_trajectories_thirdSet.getNumberOfAgents();i++){ + extern_pedestrians_thirdSet[i]->enableCaption(SystemSettings::getShowCaption()); + + if(SystemSettings::getPedestrianColorProfileFromFile()==false){ + extern_pedestrians_thirdSet[i]->setColor(pedColor); + } + extern_pedestrians_thirdSet[i]->setGroupVisibility(extern_third_dataset_visible); + extern_pedestrians_thirdSet[i]->setCaptionSize(captionSize); + extern_pedestrians_thirdSet[i]->setCaptionsColorModeToAuto(autoCaptionMode); + extern_pedestrians_thirdSet[i]->setCaptionsColor(captionColor); + extern_pedestrians_thirdSet[i]->setResolution(SystemSettings::getEllipseResolution()); + } + } + + //enable / disable full screen + if(fullscreen!=extern_fullscreen_enable){ + renderWindow->SetFullScreen(extern_fullscreen_enable); + //renderWindow->GetRenderers()->GetFirstRenderer()->ResetCamera(); + fullscreen=extern_fullscreen_enable; + } + + // take + extern_force_system_update=false; } void TimerCallback::setAllPedestriansInvisible() { - if(extern_first_dataset_loaded){ - for(int i=0;i<extern_trajectories_firstSet.getNumberOfAgents();i++) - extern_pedestrians_firstSet[i]->setVisibility(false); - } - - if(extern_second_dataset_loaded){ - for(int i=0;i<extern_trajectories_secondSet.getNumberOfAgents();i++) - extern_pedestrians_secondSet[i]->setVisibility(false); - } - - if(extern_third_dataset_loaded){ - for(int i=0;i<extern_trajectories_thirdSet.getNumberOfAgents();i++) - extern_pedestrians_thirdSet[i]->setVisibility(false); - } + if(extern_first_dataset_loaded){ + for(int i=0;i<extern_trajectories_firstSet.getNumberOfAgents();i++) + extern_pedestrians_firstSet[i]->setVisibility(false); + } + + if(extern_second_dataset_loaded){ + for(int i=0;i<extern_trajectories_secondSet.getNumberOfAgents();i++) + extern_pedestrians_secondSet[i]->setVisibility(false); + } + + if(extern_third_dataset_loaded){ + for(int i=0;i<extern_trajectories_thirdSet.getNumberOfAgents();i++) + extern_pedestrians_thirdSet[i]->setVisibility(false); + } } void TimerCallback::getTrail(int datasetID, int frameNumber){ - int trailCount=0; - int trailType=0; - int trailForm=0; - int tcMin=0; - int tcMax=0; - - SystemSettings::getTrailsInfo(&trailCount,&trailType,&trailForm); - - switch(trailType){ - case 0://backward - tcMin=frameNumber-trailCount; - tcMax=frameNumber; - break; - - case 1://symetric - tcMin=frameNumber-trailCount/2; - tcMax=frameNumber+trailCount/2; - - break; - - case 2://forward - tcMin=frameNumber; - tcMax=frameNumber+trailCount; - break; - - } - - switch(datasetID){ - case 1: - { - for (int i=tcMin;i<tcMax;i++){ - Frame* frame = extern_trajectories_firstSet.getFrame(i); - if(frame==NULL){ - // cerr<<"Trajectory not available in getTrail(), first data set"<<endl; - }else { - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - extern_pedestrians_firstSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); - extern_pedestrians_firstSet[point->getIndex()]->setTrailGeometry(trailForm); - } - frame->resetCursor(); - } - } - } - break; - - case 2: - { - for (int i=tcMin;i<tcMax;i++){ - Frame* frame = extern_trajectories_secondSet.getFrame(i); - if(frame==NULL){ - // cerr<<"Trajectory not available in getTrail(), second data set"<<endl; - }else { - - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - extern_pedestrians_secondSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); - extern_pedestrians_secondSet[point->getIndex()]->setTrailGeometry(trailForm); - } - frame->resetCursor(); - } - } - } - - break; - - case 3: - { - for (int i=tcMin;i<tcMax;i++){ - Frame* frame = extern_trajectories_thirdSet.getFrame(i); - if(frame==NULL){ - // cerr<<"Trajectory not available in getTrail(), third data set"<<endl; - }else { - - TrajectoryPoint* point=NULL; - while(NULL!=(point=frame->getNextElement())){ - extern_pedestrians_thirdSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); - extern_pedestrians_thirdSet[point->getIndex()]->setTrailGeometry(trailForm); - } - frame->resetCursor(); - } - } - } - - break; - - } + int trailCount=0; + int trailType=0; + int trailForm=0; + int tcMin=0; + int tcMax=0; + + SystemSettings::getTrailsInfo(&trailCount,&trailType,&trailForm); + + switch(trailType){ + case 0://backward + tcMin=frameNumber-trailCount; + tcMax=frameNumber; + break; + + case 1://symetric + tcMin=frameNumber-trailCount/2; + tcMax=frameNumber+trailCount/2; + + break; + + case 2://forward + tcMin=frameNumber; + tcMax=frameNumber+trailCount; + break; + + } + + switch(datasetID){ + case 1: + { + for (int i=tcMin;i<tcMax;i++){ + Frame* frame = extern_trajectories_firstSet.getFrame(i); + if(frame==NULL){ + // cerr<<"Trajectory not available in getTrail(), first data set"<<endl; + }else { + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + extern_pedestrians_firstSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); + extern_pedestrians_firstSet[point->getIndex()]->setTrailGeometry(trailForm); + } + frame->resetCursor(); + } + } + } + break; + + case 2: + { + for (int i=tcMin;i<tcMax;i++){ + Frame* frame = extern_trajectories_secondSet.getFrame(i); + if(frame==NULL){ + // cerr<<"Trajectory not available in getTrail(), second data set"<<endl; + }else { + + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + extern_pedestrians_secondSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); + extern_pedestrians_secondSet[point->getIndex()]->setTrailGeometry(trailForm); + } + frame->resetCursor(); + } + } + } + + break; + + case 3: + { + for (int i=tcMin;i<tcMax;i++){ + Frame* frame = extern_trajectories_thirdSet.getFrame(i); + if(frame==NULL){ + // cerr<<"Trajectory not available in getTrail(), third data set"<<endl; + }else { + + TrajectoryPoint* point=NULL; + while(NULL!=(point=frame->getNextElement())){ + extern_pedestrians_thirdSet[point->getIndex()]->plotTrail(point->getX(),point->getY(),point->getZ()); + extern_pedestrians_thirdSet[point->getIndex()]->setTrailGeometry(trailForm); + } + frame->resetCursor(); + } + } + } + + break; + + } } void TimerCallback::takeScreenshot(vtkRenderWindow *renderWindow){ - static int imageID=0; - vtkWindowToImageFilter * winToImFilter = vtkWindowToImageFilter::New(); - winToImFilter->SetInput( renderWindow ); - //winToImFilter->SetMagnification(4); - //renderWindow->Delete(); - //vtkPostScriptWriter * image = vtkPostScriptWriter::New(); - vtkPNGWriter * image = vtkPNGWriter::New(); + static int imageID=0; + vtkWindowToImageFilter * winToImFilter = vtkWindowToImageFilter::New(); + winToImFilter->SetInput( renderWindow ); + //winToImFilter->SetMagnification(4); + //renderWindow->Delete(); + //vtkPostScriptWriter * image = vtkPostScriptWriter::New(); + vtkPNGWriter * image = vtkPNGWriter::New(); image->SetInputConnection(winToImFilter->GetOutputPort()); - winToImFilter->Delete(); - - QString screenshots; - SystemSettings::getOutputDirectory(screenshots); - //create directory if not exits - if(!QDir(screenshots).exists()){ - QDir dir; - if(!dir.mkpath (screenshots )){ - //Debug::Error("could not create directory: %s",screenshots.toStdString().c_str()); - //try with the current directory - screenshots=""; - } - } - - - char filename[256]={0}; - // sprintf(filename,"travisto_video_%d.png",imageID++); - std::string date= QString(QDateTime::currentDateTime().toString("yyMMdd_hh")).toStdString(); - - sprintf(filename,"travisto_snap_%sh_%d.png",date.c_str(),imageID++); - - //append the prefix - screenshots+=SystemSettings::getFilenamePrefix(); - screenshots+=QString(filename); - image->SetFileName(screenshots.toStdString().c_str()); - winToImFilter->Modified(); - - image->Write (); - image->Delete(); - extern_take_screenshot=false; + winToImFilter->Delete(); + + QString screenshots; + SystemSettings::getOutputDirectory(screenshots); + //create directory if not exits + if(!QDir(screenshots).exists()){ + QDir dir; + if(!dir.mkpath (screenshots )){ + //Debug::Error("could not create directory: %s",screenshots.toStdString().c_str()); + //try with the current directory + screenshots=""; + } + } + + + char filename[256]={0}; + // sprintf(filename,"travisto_video_%d.png",imageID++); + std::string date= QString(QDateTime::currentDateTime().toString("yyMMdd_hh")).toStdString(); + + sprintf(filename,"travisto_snap_%sh_%d.png",date.c_str(),imageID++); + + //append the prefix + screenshots+=SystemSettings::getFilenamePrefix(); + screenshots+=QString(filename); + image->SetFileName(screenshots.toStdString().c_str()); + winToImFilter->Modified(); + + image->Write (); + image->Delete(); + extern_take_screenshot=false; } /// take png screenshot sequence void TimerCallback::takeScreenshotSequence(vtkRenderWindow* renderWindow){ - static int imageID=0; - vtkWindowToImageFilter * winToImFilter = vtkWindowToImageFilter::New(); - winToImFilter->SetInput( renderWindow ); - //renderWindow->Delete(); - vtkPNGWriter * image = vtkPNGWriter::New(); - //vtkPostScriptWriter * image = vtkPostScriptWriter::New(); + static int imageID=0; + vtkWindowToImageFilter * winToImFilter = vtkWindowToImageFilter::New(); + winToImFilter->SetInput( renderWindow ); + //renderWindow->Delete(); + vtkPNGWriter * image = vtkPNGWriter::New(); + //vtkPostScriptWriter * image = vtkPostScriptWriter::New(); image->SetInputConnection( winToImFilter->GetOutputPort()); - winToImFilter->Delete(); - - QString screenshots; - SystemSettings::getOutputDirectory(screenshots); - - screenshots.append("./png_seq_"+QDateTime::currentDateTime().toString("yyMMddhh")+"_"+SystemSettings::getFilenamePrefix()); - screenshots.truncate(screenshots.size()-1); - - //create directory if not exits - if(!QDir(screenshots).exists()){ - QDir dir; - if(!dir.mkpath (screenshots )){ - cerr<<"could not create directory: "<< screenshots.toStdString(); - //try with the current directory - screenshots="./png_seq_"+QDateTime::currentDateTime().toString("yyMMdd")+"_"+SystemSettings::getFilenamePrefix(); - screenshots.truncate(screenshots.size()-1); - } - } - - - char filename[30]={0}; - sprintf(filename,"/tmp_%07d.png",imageID++); - screenshots.append(filename); - image->SetFileName(screenshots.toStdString().c_str()); - winToImFilter->Modified(); - - image->Write (); - image->Delete(); + winToImFilter->Delete(); + + QString screenshots; + SystemSettings::getOutputDirectory(screenshots); + + screenshots.append("./png_seq_"+QDateTime::currentDateTime().toString("yyMMddhh")+"_"+SystemSettings::getFilenamePrefix()); + screenshots.truncate(screenshots.size()-1); + + //create directory if not exits + if(!QDir(screenshots).exists()){ + QDir dir; + if(!dir.mkpath (screenshots )){ + cerr<<"could not create directory: "<< screenshots.toStdString(); + //try with the current directory + screenshots="./png_seq_"+QDateTime::currentDateTime().toString("yyMMdd")+"_"+SystemSettings::getFilenamePrefix(); + screenshots.truncate(screenshots.size()-1); + } + } + + + char filename[30]={0}; + sprintf(filename,"/tmp_%07d.png",imageID++); + screenshots.append(filename); + image->SetFileName(screenshots.toStdString().c_str()); + winToImFilter->Modified(); + + image->Write (); + image->Delete(); } void TimerCallback::SetRenderTimerId(int tid) { - this->RenderTimerId = tid; + this->RenderTimerId = tid; } void TimerCallback::setTextActor(vtkTextActor* ra){ - runningTime=ra; + runningTime=ra; } diff --git a/src/TimerCallback.h b/src/TimerCallback.h index ecb8134..d2c3bfa 100644 --- a/src/TimerCallback.h +++ b/src/TimerCallback.h @@ -64,6 +64,7 @@ class vtkWindowToImageFilter; class Frame; class vtkPNGWriter; class vtkTextActor; +class vtkActor2D; //extern variables @@ -80,9 +81,10 @@ extern Pedestrian** extern_pedestrians_firstSet; extern Pedestrian** extern_pedestrians_secondSet; extern Pedestrian** extern_pedestrians_thirdSet; -//extern vtkSmartPointer<vtkGlyph3D> extern_glyphs_pedestrians; +extern vtkSmartPointer<vtkActor2D> extern_pedestrians_labels; extern vtkSmartPointer<vtkTensorGlyph> extern_glyphs_pedestrians; + extern SyncData extern_trajectories_firstSet; extern SyncData extern_trajectories_secondSet; extern SyncData extern_trajectories_thirdSet; diff --git a/src/extern_var.h b/src/extern_var.h index 7039792..67e5769 100644 --- a/src/extern_var.h +++ b/src/extern_var.h @@ -33,7 +33,7 @@ #include "SyncData.h" #include "Pedestrian.h" -//#include <vtkGlyph3D.h> +#include <vtkActor2D.h> #include <vtkTensorGlyph.h> #include <vtkSmartPointer.h> #include <vtkPolyDataMapper.h> @@ -84,8 +84,10 @@ Pedestrian** extern_pedestrians_thirdSet=NULL; //VTK_CREATE (vtkGlyph3D, extern_glyphs_pedestrians); VTK_CREATE (vtkTensorGlyph, extern_glyphs_pedestrians); -// and here the corresponding dataset +VTK_CREATE (vtkActor2D, extern_pedestrians_labels); + +// and here the corresponding dataset ///The first dataset SyncData extern_trajectories_firstSet; ///The second dataset -- GitLab