diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp index e7043edb25077adc1cd7a9907e30cc9f6a3e8f14..5b67dc0b24d3acd959506033f6e98ce5aea8d497 100644 --- a/src/SaxParser.cpp +++ b/src/SaxParser.cpp @@ -567,7 +567,6 @@ bool SaxParser::endElement(const QString & /* namespaceURI */, while(!_currentFrame.empty()) { frame->addElement(_currentFrame.back()); _currentFrame.pop_back(); - //cout<<"not adding"<<endl; } //compute the polydata, might increase the runtime diff --git a/src/SyncData.cpp b/src/SyncData.cpp index 1e6e477731964419e71861d6286e7eae14e26cab..3b6085a5b5bdcea18e6838dc1de71d35b5f2f1e1 100644 --- a/src/SyncData.cpp +++ b/src/SyncData.cpp @@ -66,7 +66,8 @@ SyncData::~SyncData() for(auto itr = _frames.begin(); itr != _frames.end(); itr++) { - delete itr->second; + //FIXME + //delete itr->second; } _frames.clear(); } @@ -141,7 +142,7 @@ Frame* SyncData::getNextFrame() { // this may be the case if the file only contains geometry, thus no trajectories available - if(_frames.empty()) return NULL; + if(_frames.empty()) return nullptr; // Navigation in the negative direction is also possible //review @@ -152,26 +153,39 @@ Frame* SyncData::getNextFrame() //FIXME: do I really need two variables to handle this? int cursor =_frameCursor+_frameCursorOffset; - if (cursor<0) { + if (cursor<0) + { //frameCursor=0; emit signal_controlSequences("STACK_REACHS_BEGINNING"); _mutex.unlock(); return NULL; - } else if ((unsigned)cursor>=_frames.size()) { + } + else if ( _frames.count(cursor)==0) + { + + //return the last frame, if I am at the end + // otherwise retrun the first frame + Frame* res=nullptr; + if(_frameCursor>_frames.rbegin()->first) + { + //_frameCursor-=extern_update_step; + res= _frames.rbegin()->second; + _frameCursor=res->GetID(); + } + else + { + //res=_frames.begin()->second; + //_frameCursor=res->GetID(); + } + _mutex.unlock(); //if(extern_offline_mode) emit signal_controlSequences("CONTROL_STACK_EMPTY"); - //frameCursor=frames.size()-1; - _mutex.unlock(); - // FIXME: check me, return the last frame, if in o - //return frames.at(frames.size()-1); - _frameCursor-=extern_update_step; - //return _frames.back(); - return NULL; + return res; } - Frame* res =_frames.at(cursor); + Frame* res =_frames[cursor]; _mutex.unlock(); return res; } @@ -183,31 +197,31 @@ Frame* SyncData::getNextFrame() * 2. using the function getFrame(int frameNumber). one may first get * the current framecursor position using getFrameCursor() */ -Frame* SyncData::getPreviousFrame() -{ - _mutex.lock(); - _frameCursor--; - //FIXME: do I really need two variables to handle this? - int cursor =_frameCursor+_frameCursorOffset; - - if(cursor<0) { - //emit signal_controlSequences("STACK_REACHS_BEGINNING"); - //frameCursor=0; - _mutex.unlock(); - return NULL; - } else if((unsigned)cursor>=_frames.size() ) { - //emit signal_controlSequences("CONTROL_STACK_EMPTY"); - _mutex.unlock(); - //frameCursor=frames.size()-1; - return NULL; - } +//Frame* SyncData::getPreviousFrame() +//{ +// _mutex.lock(); +// _frameCursor--; +// //FIXME: do I really need two variables to handle this? +// int cursor =_frameCursor+_frameCursorOffset; + +// if(cursor<0) { +// //emit signal_controlSequences("STACK_REACHS_BEGINNING"); +// //frameCursor=0; +// _mutex.unlock(); +// return NULL; +// } else if((unsigned)cursor>=_frames.size() ) { +// //emit signal_controlSequences("CONTROL_STACK_EMPTY"); +// _mutex.unlock(); +// //frameCursor=frames.size()-1; +// return NULL; +// } - Frame* res =_frames.at(cursor); +// Frame* res =_frames.at(cursor); - _mutex.unlock(); +// _mutex.unlock(); - return res; -} +// return res; +//} void SyncData::clearFrames() { @@ -219,10 +233,10 @@ void SyncData::clearFrames() _pedHeight.clear(); _pedColor.clear(); -// while (!_frames.empty()) { -// delete _frames.back(); -// _frames.pop_back(); -// } + // while (!_frames.empty()) { + // delete _frames.back(); + // _frames.pop_back(); + // } _frames.clear(); _mutex.unlock(); } @@ -244,7 +258,6 @@ void SyncData::resetFrameCursor() int SyncData::getFrameCursor() { - return _frameCursor; } diff --git a/src/TimerCallback.cpp b/src/TimerCallback.cpp index 5a695509210d99dd6b2e32fce48285b5467d14de..3ed2cf62af55a15466cd0c565c5842379cb8d0da 100644 --- a/src/TimerCallback.cpp +++ b/src/TimerCallback.cpp @@ -136,14 +136,21 @@ void TimerCallback::Execute(vtkObject *caller, unsigned long eventId, // e.g showing captions/trails... if(extern_is_pause) + { frame=extern_trajectories_firstSet.getFrame(extern_trajectories_firstSet.getFrameCursor()); + } else + { frame = extern_trajectories_firstSet.getNextFrame(); + } + + frameNumber=extern_trajectories_firstSet.getFrameCursor(); - if(frame==NULL) { + if(frame==NULL) + { } else { - frameNumber=extern_trajectories_firstSet.getFrameCursor(); + nPeds= frame->getSize(); if(SystemSettings::get2D()==true) {