Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
1200:54cbffabdc45 | 1203:f3bb9a6dd949 |
---|---|
29 boost::weak_ptr<ViewportController> controllerW, | 29 boost::weak_ptr<ViewportController> controllerW, |
30 const PointerEvent& e) | 30 const PointerEvent& e) |
31 : CreateMeasureTracker(controllerW) | 31 : CreateMeasureTracker(controllerW) |
32 , state_(CreatingSide1) | 32 , state_(CreatingSide1) |
33 { | 33 { |
34 command_.reset( | 34 ScenePoint2D point = e.GetMainPosition(); |
35 new CreateAngleMeasureCommand( | 35 |
36 controllerW, | 36 { |
37 e.GetMainPosition().Apply(GetScene().GetCanvasToSceneTransform()))); | 37 boost::shared_ptr<ViewportController> controller = controllerW.lock(); |
38 if (controller) | |
39 { | |
40 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); | |
41 point = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform()); | |
42 } | |
43 } | |
44 | |
45 command_.reset(new CreateAngleMeasureCommand(controllerW, point)); | |
38 } | 46 } |
39 | 47 |
40 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() | 48 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() |
41 { | 49 { |
42 } | 50 } |
48 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, | 56 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, |
49 "Internal error: wrong state in CreateAngleMeasureTracker::" | 57 "Internal error: wrong state in CreateAngleMeasureTracker::" |
50 "PointerMove: active_ == false"); | 58 "PointerMove: active_ == false"); |
51 } | 59 } |
52 | 60 |
53 ScenePoint2D scenePos = event.GetMainPosition().Apply( | 61 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); |
54 GetScene().GetCanvasToSceneTransform()); | 62 if (controller) |
63 { | |
64 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); | |
65 ScenePoint2D scenePos = event.GetMainPosition().Apply( | |
66 lock->GetScene().GetCanvasToSceneTransform()); | |
55 | 67 |
56 switch (state_) | 68 switch (state_) |
57 { | 69 { |
58 case CreatingSide1: | 70 case CreatingSide1: |
59 GetCommand()->SetCenter(scenePos); | 71 GetCommand()->SetCenter(scenePos); |
60 break; | 72 break; |
61 case CreatingSide2: | 73 case CreatingSide2: |
62 GetCommand()->SetSide2End(scenePos); | 74 GetCommand()->SetSide2End(scenePos); |
63 break; | 75 break; |
64 default: | 76 default: |
65 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, | 77 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, |
66 "Wrong state in CreateAngleMeasureTracker::" | 78 "Wrong state in CreateAngleMeasureTracker::" |
67 "PointerMove: state_ invalid"); | 79 "PointerMove: state_ invalid"); |
80 } | |
81 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << | |
82 // "scenePos.GetY() = " << scenePos.GetY(); | |
68 } | 83 } |
69 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << | |
70 // "scenePos.GetY() = " << scenePos.GetY(); | |
71 } | 84 } |
72 | 85 |
73 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) | 86 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) |
74 { | 87 { |
75 // TODO: the current app does not prevent multiple PointerDown AND | 88 // TODO: the current app does not prevent multiple PointerDown AND |