Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/CreateAngleMeasureTracker.cpp @ 1203:f3bb9a6dd949 broker
locking abstraction in IViewport
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 29 Nov 2019 21:22:21 +0100 |
parents | e146743f6cdc |
children | 86a8266b8888 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/CreateAngleMeasureTracker.cpp Fri Nov 29 11:03:41 2019 +0100 +++ b/Framework/Scene2DViewport/CreateAngleMeasureTracker.cpp Fri Nov 29 21:22:21 2019 +0100 @@ -31,10 +31,18 @@ : CreateMeasureTracker(controllerW) , state_(CreatingSide1) { - command_.reset( - new CreateAngleMeasureCommand( - controllerW, - e.GetMainPosition().Apply(GetScene().GetCanvasToSceneTransform()))); + ScenePoint2D point = e.GetMainPosition(); + + { + boost::shared_ptr<ViewportController> controller = controllerW.lock(); + if (controller) + { + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + point = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform()); + } + } + + command_.reset(new CreateAngleMeasureCommand(controllerW, point)); } CreateAngleMeasureTracker::~CreateAngleMeasureTracker() @@ -50,24 +58,29 @@ "PointerMove: active_ == false"); } - ScenePoint2D scenePos = event.GetMainPosition().Apply( - GetScene().GetCanvasToSceneTransform()); - - switch (state_) + boost::shared_ptr<ViewportController> controller = controllerW_.lock(); + if (controller) { - case CreatingSide1: - GetCommand()->SetCenter(scenePos); - break; - case CreatingSide2: - GetCommand()->SetSide2End(scenePos); - break; - default: - throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, - "Wrong state in CreateAngleMeasureTracker::" - "PointerMove: state_ invalid"); + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + ScenePoint2D scenePos = event.GetMainPosition().Apply( + lock->GetScene().GetCanvasToSceneTransform()); + + switch (state_) + { + case CreatingSide1: + GetCommand()->SetCenter(scenePos); + break; + case CreatingSide2: + GetCommand()->SetSide2End(scenePos); + break; + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, + "Wrong state in CreateAngleMeasureTracker::" + "PointerMove: state_ invalid"); + } + //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << + // "scenePos.GetY() = " << scenePos.GetY(); } - //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << - // "scenePos.GetY() = " << scenePos.GetY(); } void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e)