comparison 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
comparison
equal deleted inserted replaced
1304:b7fa67bf87fa 1305:a5326ce4f24b
24 #include <Core/Enumerations.h> 24 #include <Core/Enumerations.h>
25 #include <Core/OrthancException.h> 25 #include <Core/OrthancException.h>
26 26
27 #include <boost/math/constants/constants.hpp> 27 #include <boost/math/constants/constants.hpp>
28 28
29 #include "../Viewport/IViewport.h"
30
29 namespace OrthancStone 31 namespace OrthancStone
30 { 32 {
31 void MeasureTool::Enable() 33 void MeasureTool::Enable()
32 { 34 {
33 enabled_ = true; 35 enabled_ = true;
43 bool MeasureTool::IsEnabled() const 45 bool MeasureTool::IsEnabled() const
44 { 46 {
45 return enabled_; 47 return enabled_;
46 } 48 }
47 49
48
49 boost::shared_ptr<const ViewportController> MeasureTool::GetController() const
50 {
51 boost::shared_ptr<const ViewportController> controller = controllerW_.lock();
52 if (!controller)
53 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
54 "Using dead ViewportController object!");
55 return controller;
56 }
57
58 boost::shared_ptr<ViewportController> MeasureTool::GetController()
59 {
60 #if 1
61 return boost::const_pointer_cast<ViewportController>
62 (const_cast<const MeasureTool*>(this)->GetController());
63 //return boost::const_<boost::shared_ptr<ViewportController>>
64 // (const_cast<const MeasureTool*>(this)->GetController());
65 #else
66 boost::shared_ptr<ViewportController> controller = controllerW_.lock();
67 if (!controller)
68 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
69 "Using dead ViewportController object!");
70 return controller;
71 #endif
72 }
73
74 MeasureTool::MeasureTool( 50 MeasureTool::MeasureTool(
75 boost::weak_ptr<ViewportController> controllerW) 51 IViewport& viewport)
76 : controllerW_(controllerW) 52 : viewport_(viewport)
77 , enabled_(true) 53 , enabled_(true)
78 { 54 {
55 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
56 ViewportController& controller = lock->GetController();
57
79 // TODO => Move this out of constructor 58 // TODO => Move this out of constructor
80 Register<ViewportController::SceneTransformChanged>(*GetController(), &MeasureTool::OnSceneTransformChanged); 59 Register<ViewportController::SceneTransformChanged>(
60 controller,
61 &MeasureTool::OnSceneTransformChanged);
81 } 62 }
82
83 63
84 bool MeasureTool::IsSceneAlive() const 64 bool MeasureTool::IsSceneAlive() const
85 { 65 {
86 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); 66 // since the lifetimes of the viewport, viewportcontroller (and the
87 return (controller.get() != NULL); 67 // measuring tools inside it) are linked, the scene is always alive as
68 // long as "this" is alive
69 return true;
88 } 70 }
89 71
90 void MeasureTool::OnSceneTransformChanged( 72 void MeasureTool::OnSceneTransformChanged(
91 const ViewportController::SceneTransformChanged& message) 73 const ViewportController::SceneTransformChanged& message)
92 { 74 {