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 {