Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/EditAngleMeasureTracker.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 | e713f1a99861 |
children | 86a8266b8888 |
comparison
equal
deleted
inserted
replaced
1200:54cbffabdc45 | 1203:f3bb9a6dd949 |
---|---|
29 boost::shared_ptr<MeasureTool> measureTool, | 29 boost::shared_ptr<MeasureTool> measureTool, |
30 boost::weak_ptr<ViewportController> controllerW, | 30 boost::weak_ptr<ViewportController> controllerW, |
31 const PointerEvent& e) | 31 const PointerEvent& e) |
32 : EditMeasureTracker(controllerW, e) | 32 : EditMeasureTracker(controllerW, e) |
33 { | 33 { |
34 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 34 ScenePoint2D scenePos = e.GetMainPosition(); |
35 GetScene().GetCanvasToSceneTransform()); | 35 |
36 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); | |
37 if (controller) | |
38 { | |
39 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); | |
40 scenePos = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform()); | |
41 } | |
36 | 42 |
37 modifiedZone_ = dynamic_cast<AngleMeasureTool&>(*measureTool).AngleHitTest(scenePos); | 43 modifiedZone_ = dynamic_cast<AngleMeasureTool&>(*measureTool).AngleHitTest(scenePos); |
38 | 44 |
39 command_.reset(new EditAngleMeasureCommand(measureTool, controllerW)); | 45 command_.reset(new EditAngleMeasureCommand(measureTool, controllerW)); |
40 } | 46 } |
44 | 50 |
45 } | 51 } |
46 | 52 |
47 void EditAngleMeasureTracker::PointerMove(const PointerEvent& e) | 53 void EditAngleMeasureTracker::PointerMove(const PointerEvent& e) |
48 { | 54 { |
49 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 55 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); |
50 GetScene().GetCanvasToSceneTransform()); | 56 if (controller) |
57 { | |
58 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); | |
59 ScenePoint2D scenePos = e.GetMainPosition().Apply( | |
60 lock->GetScene().GetCanvasToSceneTransform()); | |
51 | 61 |
52 ScenePoint2D delta = scenePos - GetOriginalClickPosition(); | 62 ScenePoint2D delta = scenePos - GetOriginalClickPosition(); |
53 | 63 |
54 boost::shared_ptr<AngleMeasureToolMemento> memento = | 64 boost::shared_ptr<AngleMeasureToolMemento> memento = |
55 boost::dynamic_pointer_cast<AngleMeasureToolMemento>(command_->mementoOriginal_); | 65 boost::dynamic_pointer_cast<AngleMeasureToolMemento>(command_->mementoOriginal_); |
56 | 66 |
57 ORTHANC_ASSERT(memento.get() != NULL); | 67 ORTHANC_ASSERT(memento.get() != NULL); |
58 | 68 |
59 switch (modifiedZone_) | 69 switch (modifiedZone_) |
60 { | 70 { |
61 case AngleMeasureTool::AngleHighlightArea_Center: | 71 case AngleMeasureTool::AngleHighlightArea_Center: |
62 { | 72 { |
63 ScenePoint2D newCenter = memento->center_ + delta; | 73 ScenePoint2D newCenter = memento->center_ + delta; |
64 GetCommand()->SetCenter(newCenter); | 74 GetCommand()->SetCenter(newCenter); |
65 } | 75 } |
66 break; | 76 break; |
67 case AngleMeasureTool::AngleHighlightArea_Side1: | 77 case AngleMeasureTool::AngleHighlightArea_Side1: |
68 case AngleMeasureTool::AngleHighlightArea_Side2: | 78 case AngleMeasureTool::AngleHighlightArea_Side2: |
69 { | 79 { |
70 ScenePoint2D newCenter = memento->center_ + delta; | 80 ScenePoint2D newCenter = memento->center_ + delta; |
71 ScenePoint2D newSide1End = memento->side1End_ + delta; | 81 ScenePoint2D newSide1End = memento->side1End_ + delta; |
72 ScenePoint2D newSide2End = memento->side2End_ + delta; | 82 ScenePoint2D newSide2End = memento->side2End_ + delta; |
73 GetCommand()->SetCenter(newCenter); | 83 GetCommand()->SetCenter(newCenter); |
74 GetCommand()->SetSide1End(newSide1End); | 84 GetCommand()->SetSide1End(newSide1End); |
75 GetCommand()->SetSide2End(newSide2End); | 85 GetCommand()->SetSide2End(newSide2End); |
76 } | 86 } |
77 break; | 87 break; |
78 case AngleMeasureTool::AngleHighlightArea_Side1End: | 88 case AngleMeasureTool::AngleHighlightArea_Side1End: |
79 { | 89 { |
80 ScenePoint2D newSide1End = memento->side1End_ + delta; | 90 ScenePoint2D newSide1End = memento->side1End_ + delta; |
81 GetCommand()->SetSide1End(newSide1End); | 91 GetCommand()->SetSide1End(newSide1End); |
82 } | 92 } |
83 break; | 93 break; |
84 case AngleMeasureTool::AngleHighlightArea_Side2End: | 94 case AngleMeasureTool::AngleHighlightArea_Side2End: |
85 { | 95 { |
86 ScenePoint2D newSide2End = memento->side2End_ + delta; | 96 ScenePoint2D newSide2End = memento->side2End_ + delta; |
87 GetCommand()->SetSide2End(newSide2End); | 97 GetCommand()->SetSide2End(newSide2End); |
88 } | 98 } |
89 break; | 99 break; |
90 default: | 100 default: |
91 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; | 101 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; |
92 break; | 102 break; |
103 } | |
93 } | 104 } |
94 } | 105 } |
95 | 106 |
96 void EditAngleMeasureTracker::PointerUp(const PointerEvent& e) | 107 void EditAngleMeasureTracker::PointerUp(const PointerEvent& e) |
97 { | 108 { |