diff --git a/application/F3DStarter.cxx b/application/F3DStarter.cxx index c7df616467..d750171d91 100644 --- a/application/F3DStarter.cxx +++ b/application/F3DStarter.cxx @@ -145,7 +145,7 @@ int F3DStarter::Start(int argc, char** argv) const auto camState = cam.saveState(); this->LoadFile(index, true); cam.restoreState(camState); - cam.deleteState(camState); + delete camState; } else { diff --git a/library/private/camera_impl.h b/library/private/camera_impl.h index 473227ff82..05fbddfa58 100644 --- a/library/private/camera_impl.h +++ b/library/private/camera_impl.h @@ -12,12 +12,21 @@ #include "camera.h" +#include + #include class vtkRenderer; class vtkCamera; namespace f3d::detail { +class cameraState_impl : public cameraState +{ +public: + vtkNew Camera; + cameraState_impl(vtkCamera* vtkCamera) { this->Camera->DeepCopy(vtkCamera); } +}; + class camera_impl : public camera { public: @@ -59,9 +68,8 @@ class camera_impl : public camera camera& resetToDefault() override; camera& resetToBounds() override; - CameraStateKey saveState() override; - bool restoreState(const CameraStateKey&) override; - bool deleteState(const CameraStateKey&) override; + cameraState* saveState() override; + void restoreState(const cameraState*) override; ///@} /** diff --git a/library/public/camera.h b/library/public/camera.h index f2ea3c5edc..7a1b58c758 100644 --- a/library/public/camera.h +++ b/library/public/camera.h @@ -9,7 +9,11 @@ namespace f3d { -typedef uint CameraStateKey; +class F3D_EXPORT cameraState +{ +public: + virtual ~cameraState() = default; +}; /** * @class camera @@ -70,9 +74,8 @@ class F3D_EXPORT camera */ virtual camera& resetToBounds() = 0; - virtual CameraStateKey saveState() = 0; - virtual bool restoreState(const CameraStateKey&) = 0; - virtual bool deleteState(const CameraStateKey&) = 0; + virtual cameraState* saveState() = 0; + virtual void restoreState(const cameraState*) = 0; protected: //! @cond diff --git a/library/src/camera_impl.cxx b/library/src/camera_impl.cxx index 3980188a44..87ebdd1888 100644 --- a/library/src/camera_impl.cxx +++ b/library/src/camera_impl.cxx @@ -13,8 +13,6 @@ class camera_impl::internals public: vtkRenderer* VTKRenderer = nullptr; vtkNew DefaultVTKCamera; - std::map > SavedStates; - CameraStateKey NextCameraStateKey = 0; }; //---------------------------------------------------------------------------- @@ -223,34 +221,15 @@ vtkCamera* camera_impl::GetVTKCamera() return this->Internals->VTKRenderer->GetActiveCamera(); } -//---------------------------------------------------------------------------- -CameraStateKey camera_impl::saveState() -{ - vtkNew cam; - cam->DeepCopy(this->GetVTKCamera()); - - const CameraStateKey key = this->Internals->NextCameraStateKey++; - this->Internals->SavedStates[key] = cam; - return key; -} - -//---------------------------------------------------------------------------- -bool camera_impl::restoreState(const CameraStateKey& key) +cameraState* camera_impl::saveState() { - if (this->Internals->SavedStates.count(key)) - { - this->GetVTKCamera()->DeepCopy(this->Internals->SavedStates[key]); - return true; - } - else - { - return false; - } + return new cameraState_impl(this->GetVTKCamera()); } //---------------------------------------------------------------------------- -bool camera_impl::deleteState(const CameraStateKey& key) +void camera_impl::restoreState(const cameraState* cameraState) { - return this->Internals->SavedStates.erase(key) > 0; + const cameraState_impl* state_impl = dynamic_cast(cameraState); + this->GetVTKCamera()->DeepCopy(state_impl->Camera); } };