Mercurial > hg > orthanc-stone
comparison OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp @ 1606:874e178f34e9
- ViewportController now has weak ptr to Viewport
- Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage
- LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too
- Fixed float/double warning in GrayscaleWindowingSceneTracker
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 28 Oct 2020 20:14:34 +0100 |
parents | 8563ea5d8ae4 |
children | 52b8b96cb55f |
comparison
equal
deleted
inserted
replaced
1605:b3c439d96d3e | 1606:874e178f34e9 |
---|---|
41 namespace OrthancStone | 41 namespace OrthancStone |
42 { | 42 { |
43 // the params in the LayerHolder ctor specify the number of polyline and text | 43 // the params in the LayerHolder ctor specify the number of polyline and text |
44 // layers | 44 // layers |
45 AngleMeasureTool::AngleMeasureTool( | 45 AngleMeasureTool::AngleMeasureTool( |
46 boost::shared_ptr<IViewport> viewport) | 46 boost::weak_ptr<IViewport> viewport) |
47 : MeasureTool(viewport) | 47 : MeasureTool(viewport) |
48 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 | 48 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 |
49 , layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,5))) | 49 , layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,5))) |
50 #else | 50 #else |
51 , layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,1))) | 51 , layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,1))) |
52 #endif | 52 #endif |
53 , angleHighlightArea_(AngleHighlightArea_None) | 53 , angleHighlightArea_(AngleHighlightArea_None) |
54 { | 54 { |
55 } | 55 } |
56 | 56 |
57 boost::shared_ptr<AngleMeasureTool> AngleMeasureTool::Create(boost::shared_ptr<IViewport> viewport) | 57 boost::shared_ptr<AngleMeasureTool> AngleMeasureTool::Create(boost::weak_ptr<IViewport> viewport) |
58 { | 58 { |
59 boost::shared_ptr<AngleMeasureTool> obj(new AngleMeasureTool(viewport)); | 59 boost::shared_ptr<AngleMeasureTool> obj(new AngleMeasureTool(viewport)); |
60 obj->MeasureTool::PostConstructor(); | 60 obj->MeasureTool::PostConstructor(); |
61 obj->RefreshScene(); | 61 obj->RefreshScene(); |
62 return obj; | 62 return obj; |
140 SetAngleHighlightArea(angleHighlightArea); | 140 SetAngleHighlightArea(angleHighlightArea); |
141 } | 141 } |
142 | 142 |
143 AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(ScenePoint2D p) const | 143 AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(ScenePoint2D p) const |
144 { | 144 { |
145 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 145 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
146 const ViewportController& controller = lock->GetController(); | 146 const ViewportController& controller = lock->GetController(); |
147 const Scene2D& scene = controller.GetScene(); | 147 const Scene2D& scene = controller.GetScene(); |
148 | 148 |
149 const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom(); | 149 const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom(); |
150 | 150 |
200 } | 200 } |
201 | 201 |
202 | 202 |
203 boost::shared_ptr<IFlexiblePointerTracker> AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) | 203 boost::shared_ptr<IFlexiblePointerTracker> AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) |
204 { | 204 { |
205 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 205 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
206 ViewportController& controller = lock->GetController(); | 206 ViewportController& controller = lock->GetController(); |
207 const Scene2D& scene = controller.GetScene(); | 207 const Scene2D& scene = controller.GetScene(); |
208 | 208 |
209 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 209 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
210 scene.GetCanvasToSceneTransform()); | 210 scene.GetCanvasToSceneTransform()); |
214 | 214 |
215 /** | 215 /** |
216 new EditLineMeasureTracker( | 216 new EditLineMeasureTracker( |
217 boost::shared_ptr<LineMeasureTool> measureTool; | 217 boost::shared_ptr<LineMeasureTool> measureTool; |
218 MessageBroker & broker, | 218 MessageBroker & broker, |
219 boost::shared_ptr<IViewport> viewport, | 219 boost::weak_ptr<IViewport> viewport, |
220 const PointerEvent & e); | 220 const PointerEvent & e); |
221 */ | 221 */ |
222 | 222 |
223 boost::shared_ptr<EditAngleMeasureTracker> editAngleMeasureTracker( | 223 boost::shared_ptr<EditAngleMeasureTracker> editAngleMeasureTracker( |
224 new EditAngleMeasureTracker(shared_from_this(), viewport_, e)); | 224 new EditAngleMeasureTracker(shared_from_this(), viewport_, e)); |
233 | 233 |
234 void AngleMeasureTool::RefreshScene() | 234 void AngleMeasureTool::RefreshScene() |
235 { | 235 { |
236 if (IsSceneAlive()) | 236 if (IsSceneAlive()) |
237 { | 237 { |
238 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 238 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
239 ViewportController& controller = lock->GetController(); | 239 ViewportController& controller = lock->GetController(); |
240 Scene2D& scene = controller.GetScene(); | 240 Scene2D& scene = controller.GetScene(); |
241 | 241 |
242 if (IsEnabled()) | 242 if (IsEnabled()) |
243 { | 243 { |