comparison Framework/Scene2DViewport/CreateAngleMeasureTracker.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 ab81ee8fce1f
comparison
equal deleted inserted replaced
1304:b7fa67bf87fa 1305:a5326ce4f24b
24 #include <Core/OrthancException.h> 24 #include <Core/OrthancException.h>
25 25
26 namespace OrthancStone 26 namespace OrthancStone
27 { 27 {
28 CreateAngleMeasureTracker::CreateAngleMeasureTracker( 28 CreateAngleMeasureTracker::CreateAngleMeasureTracker(
29 boost::weak_ptr<ViewportController> controllerW, 29 IViewport& viewport,
30 const PointerEvent& e) 30 const PointerEvent& e)
31 : CreateMeasureTracker(controllerW) 31 : CreateMeasureTracker(viewport)
32 , state_(CreatingSide1) 32 , state_(CreatingSide1)
33 { 33 {
34 ScenePoint2D point = e.GetMainPosition(); 34 ScenePoint2D point = e.GetMainPosition();
35 35 {
36 { 36 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
37 boost::shared_ptr<ViewportController> controller = controllerW.lock(); 37 Scene2D& scene = lock->GetController().GetScene();
38 if (controller) 38 point = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
39 {
40 point = e.GetMainPosition().Apply(controller->GetScene().GetCanvasToSceneTransform());
41 }
42 } 39 }
43 40 command_.reset(new CreateAngleMeasureCommand(viewport, point));
44 command_.reset(new CreateAngleMeasureCommand(controllerW, point));
45 } 41 }
46 42
47 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() 43 CreateAngleMeasureTracker::~CreateAngleMeasureTracker()
48 { 44 {
49 } 45 }
55 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, 51 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
56 "Internal error: wrong state in CreateAngleMeasureTracker::" 52 "Internal error: wrong state in CreateAngleMeasureTracker::"
57 "PointerMove: active_ == false"); 53 "PointerMove: active_ == false");
58 } 54 }
59 55
60 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); 56
61 if (controller)
62 { 57 {
58 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
59 ViewportController& controller = lock->GetController();
60
63 ScenePoint2D scenePos = event.GetMainPosition().Apply( 61 ScenePoint2D scenePos = event.GetMainPosition().Apply(
64 controller->GetScene().GetCanvasToSceneTransform()); 62 controller.GetScene().GetCanvasToSceneTransform());
65 63
66 switch (state_) 64 switch (state_)
67 { 65 {
68 case CreatingSide1: 66 case CreatingSide1:
69 GetCommand()->SetCenter(scenePos); 67 GetCommand()->SetCenter(scenePos);
76 "Wrong state in CreateAngleMeasureTracker::" 74 "Wrong state in CreateAngleMeasureTracker::"
77 "PointerMove: state_ invalid"); 75 "PointerMove: state_ invalid");
78 } 76 }
79 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << 77 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " <<
80 // "scenePos.GetY() = " << scenePos.GetY(); 78 // "scenePos.GetY() = " << scenePos.GetY();
79 lock->Invalidate();
81 } 80 }
82 } 81 }
83 82
84 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) 83 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e)
85 { 84 {