Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/MeasureTool.cpp @ 1305:a5326ce4f24b broker
Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 04 Mar 2020 09:45:38 +0100 |
parents | 7ec8fea061b9 |
children | 9b126de2cde2 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/MeasureTool.cpp Wed Mar 04 09:44:34 2020 +0100 +++ b/Framework/Scene2DViewport/MeasureTool.cpp Wed Mar 04 09:45:38 2020 +0100 @@ -26,6 +26,8 @@ #include <boost/math/constants/constants.hpp> +#include "../Viewport/IViewport.h" + namespace OrthancStone { void MeasureTool::Enable() @@ -45,46 +47,26 @@ return enabled_; } - - boost::shared_ptr<const ViewportController> MeasureTool::GetController() const - { - boost::shared_ptr<const ViewportController> controller = controllerW_.lock(); - if (!controller) - throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, - "Using dead ViewportController object!"); - return controller; - } - - boost::shared_ptr<ViewportController> MeasureTool::GetController() - { -#if 1 - return boost::const_pointer_cast<ViewportController> - (const_cast<const MeasureTool*>(this)->GetController()); - //return boost::const_<boost::shared_ptr<ViewportController>> - // (const_cast<const MeasureTool*>(this)->GetController()); -#else - boost::shared_ptr<ViewportController> controller = controllerW_.lock(); - if (!controller) - throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, - "Using dead ViewportController object!"); - return controller; -#endif - } - MeasureTool::MeasureTool( - boost::weak_ptr<ViewportController> controllerW) - : controllerW_(controllerW) + IViewport& viewport) + : viewport_(viewport) , enabled_(true) { + std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); + ViewportController& controller = lock->GetController(); + // TODO => Move this out of constructor - Register<ViewportController::SceneTransformChanged>(*GetController(), &MeasureTool::OnSceneTransformChanged); + Register<ViewportController::SceneTransformChanged>( + controller, + &MeasureTool::OnSceneTransformChanged); } - bool MeasureTool::IsSceneAlive() const { - boost::shared_ptr<ViewportController> controller = controllerW_.lock(); - return (controller.get() != NULL); + // since the lifetimes of the viewport, viewportcontroller (and the + // measuring tools inside it) are linked, the scene is always alive as + // long as "this" is alive + return true; } void MeasureTool::OnSceneTransformChanged(