diff --git a/include/core/frame/frame_base.h b/include/core/frame/frame_base.h index 44e1cfbd2981f6d7afe67311c249b9fc67897638..0fdb349c15db78a40fbe2b658c739c776a9b2c3d 100644 --- a/include/core/frame/frame_base.h +++ b/include/core/frame/frame_base.h @@ -80,6 +80,7 @@ class FrameBase : public NodeBase, public std::enable_shared_from_this<FrameBase bool isKeyOrAux() const; // set type + void setNonEstimated(); void setKey(); void setAux(); diff --git a/src/frame/frame_base.cpp b/src/frame/frame_base.cpp index 49c5ae4f2d9474d34be5b83378f5b2517507cd62..c8ac508f52c3f70504d3c3fe2137573e426a5fe0 100644 --- a/src/frame/frame_base.cpp +++ b/src/frame/frame_base.cpp @@ -155,6 +155,20 @@ void FrameBase::removeStateBlocks() } } +void FrameBase::setNonEstimated() +{ + // unregister if previously estimated + if (isKeyOrAux()) + removeStateBlocks(); + + type_ = NON_ESTIMATED; + if (getTrajectory()) + { + getTrajectory()->sortFrame(shared_from_this()); + getTrajectory()->updateLastFrames(); + } +} + void FrameBase::setKey() { // register if previously not estimated @@ -163,8 +177,11 @@ void FrameBase::setKey() // WOLF_DEBUG("Set Key", this->id()); type_ = KEY; - getTrajectory()->sortFrame(shared_from_this()); - getTrajectory()->updateLastFrames(); + if (getTrajectory()) + { + getTrajectory()->sortFrame(shared_from_this()); + getTrajectory()->updateLastFrames(); + } } void FrameBase::setAux() @@ -174,8 +191,11 @@ void FrameBase::setAux() // WOLF_DEBUG("Set Auxiliary", this->id()); type_ = AUXILIARY; - getTrajectory()->sortFrame(shared_from_this()); - getTrajectory()->updateLastFrames(); + if (getTrajectory()) + { + getTrajectory()->sortFrame(shared_from_this()); + getTrajectory()->updateLastFrames(); + } } void FrameBase::fix()