Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/MeasureTools.cpp @ 700:059e1fd05fd6 refactor-viewport-controller
Introduced the ViewportController that sits between the application and the
Scene2D to handle the trackers and measuring tools. This is a work in progress.
The Scene2D is no longer an observable. Message sending is managed by the
ViewportController.
Move some refs to shared and weak to prevent lifetime issues.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Sun, 19 May 2019 16:26:17 +0200 |
parents | 8b6adfb62a2f |
children | 28b9e3a54200 |
comparison
equal
deleted
inserted
replaced
699:5c551f078c18 | 700:059e1fd05fd6 |
---|---|
20 | 20 |
21 #include "MeasureTools.h" | 21 #include "MeasureTools.h" |
22 | 22 |
23 #include <Core/Logging.h> | 23 #include <Core/Logging.h> |
24 #include <Core/Enumerations.h> | 24 #include <Core/Enumerations.h> |
25 #include <Core> | 25 #include <Core/OrthancException.h> |
26 | 26 |
27 #include <boost/math/constants/constants.hpp> | 27 #include <boost/math/constants/constants.hpp> |
28 | 28 |
29 using namespace Orthanc; | 29 using namespace Orthanc; |
30 | 30 |
51 bool MeasureTool::IsEnabled() const | 51 bool MeasureTool::IsEnabled() const |
52 { | 52 { |
53 return enabled_; | 53 return enabled_; |
54 } | 54 } |
55 | 55 |
56 | |
57 ViewportControllerPtr MeasureTool::GetController() | |
58 { | |
59 ViewportControllerPtr controller = controllerW_.lock(); | |
60 if (!controller) | |
61 throw OrthancException(ErrorCode_InternalError, | |
62 "Using dead ViewportController object!"); | |
63 return controller; | |
64 } | |
65 | |
56 OrthancStone::Scene2DPtr MeasureTool::GetScene() | 66 OrthancStone::Scene2DPtr MeasureTool::GetScene() |
57 { | 67 { |
58 Scene2DPtr scene = scene_.lock(); | 68 return GetController()->GetScene(); |
59 if (!scene) | |
60 throw OrthancException(ErrorCode_InternalError, "Using dead object!"); | |
61 return scene; | |
62 } | 69 } |
63 | 70 |
64 MeasureTool::MeasureTool(MessageBroker& broker, Scene2DWPtr sceneW) | 71 MeasureTool::MeasureTool(MessageBroker& broker, |
72 ViewportControllerWPtr controllerW) | |
65 : IObserver(broker) | 73 : IObserver(broker) |
66 , scene_(sceneW) | 74 , controllerW_(controllerW) |
67 , enabled_(true) | 75 , enabled_(true) |
68 { | 76 { |
69 GetScene()->RegisterObserverCallback( | 77 GetController()->RegisterObserverCallback( |
70 new Callable<MeasureTool, Scene2D::SceneTransformChanged> | 78 new Callable<MeasureTool, ViewportController::SceneTransformChanged> |
71 (*this, &MeasureTool::OnSceneTransformChanged)); | 79 (*this, &MeasureTool::OnSceneTransformChanged)); |
72 } | 80 } |
73 | 81 |
74 void MeasureTool::OnSceneTransformChanged( | 82 void MeasureTool::OnSceneTransformChanged( |
75 const Scene2D::SceneTransformChanged& message) | 83 const ViewportController::SceneTransformChanged& message) |
76 { | 84 { |
77 RefreshScene(); | 85 RefreshScene(); |
78 } | 86 } |
79 | 87 |
80 | 88 |