Mercurial > hg > orthanc-stone
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 { |