From 8ff9cb403eea09389a2e411be6bbca74926ed559 Mon Sep 17 00:00:00 2001 From: Oskar Carlbaum Date: Wed, 20 Sep 2017 18:02:01 +0200 Subject: [PATCH] Load OSFLS states into RAM and keep track of trigger times --- .../renderablefieldlinessequence.cpp | 29 ++++++++++++++++++- .../rendering/renderablefieldlinessequence.h | 4 +++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/modules/fieldlinessequence/rendering/renderablefieldlinessequence.cpp b/modules/fieldlinessequence/rendering/renderablefieldlinessequence.cpp index 9dc65fecab..0c250825ad 100644 --- a/modules/fieldlinessequence/rendering/renderablefieldlinessequence.cpp +++ b/modules/fieldlinessequence/rendering/renderablefieldlinessequence.cpp @@ -67,11 +67,25 @@ void RenderableFieldlinesSequence::initialize() { LERROR("JSON NOT YET IMPLEMENTED!"); break; case OSFLS: - LERROR("OSFLS NOT YET IMPLEMENTED!"); + if (_isLoadingStatesAtRuntime) { + LERROR("OSFLS LOAD AT RUNTIME NOT YET IMPLEMENTED!"); + } else { + for (string filePath : _sourceFiles) { + FieldlinesState newState; + bool loadedSuccessfully = newState.loadStateFromOsfls(filePath); + if (loadedSuccessfully) { + _states.push_back(newState); + _startTimes.push_back(newState.triggerTime()); + _nStates++; + } + } + } break; default: break; } + + computeSequenceEndTime(); } void RenderableFieldlinesSequence::deinitialize() { @@ -171,4 +185,17 @@ bool RenderableFieldlinesSequence::extractInfoFromDictionary( } } +// Calculate expected end time. +void RenderableFieldlinesSequence::computeSequenceEndTime() { + if (_nStates > 1) { + const double LAST_TRIGGER_TIME = _startTimes[_nStates - 1]; + const double SEQUENCE_DURATION = LAST_TRIGGER_TIME - _startTimes[0]; + const double AVERAGE_STATE_DURATION = SEQUENCE_DURATION / (static_cast(_nStates) - 1.0); + _sequenceEndTime = LAST_TRIGGER_TIME + AVERAGE_STATE_DURATION; + } else { + // If there's just one state it should never disappear! + _sequenceEndTime = DBL_MAX; + } +} + } // namespace openspace diff --git a/modules/fieldlinessequence/rendering/renderablefieldlinessequence.h b/modules/fieldlinessequence/rendering/renderablefieldlinessequence.h index 8cc0328d00..8e3ebdddaf 100644 --- a/modules/fieldlinessequence/rendering/renderablefieldlinessequence.h +++ b/modules/fieldlinessequence/rendering/renderablefieldlinessequence.h @@ -52,11 +52,15 @@ private: }; bool _isLoadingStatesAtRuntime = false; // False => loading osfls at runtime + size_t _nStates = 0; + double _sequenceEndTime; SourceFileType _sourceFileType; + std::vector _startTimes; std::vector _states; std::vector _sourceFiles; // Stored in RAM if files are loaded at runtime, else emptied after initialization + void computeSequenceEndTime(); bool extractInfoFromDictionary(const ghoul::Dictionary& dictionary); };