diff OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp @ 1789:462d7a0e064e

added line measures to sdl single frame viewer sample
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 17 May 2021 11:55:21 +0200
parents 9ac2a65d4172
children 9b650ab68d4c
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp	Sat May 15 12:17:17 2021 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp	Mon May 17 11:55:21 2021 +0200
@@ -118,30 +118,33 @@
   LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p)
   {
     std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-    ViewportController& controller = lock->GetController();
-    const Scene2D& scene = controller.GetScene();
+    if (lock.get() != NULL)
+    {
+      ViewportController& controller = lock->GetController();
+      const Scene2D& scene = controller.GetScene();
 
-    const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom();
-    const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = 
-      pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * 
-      pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD;
+      const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom();
+      const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = 
+        pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * 
+        pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD;
 
-    const double sqDistanceFromStart = 
-      ScenePoint2D::SquaredDistancePtPt(p, start_);
+      const double sqDistanceFromStart = 
+        ScenePoint2D::SquaredDistancePtPt(p, start_);
     
-    if (sqDistanceFromStart <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
-      return LineHighlightArea_Start;
+      if (sqDistanceFromStart <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
+        return LineHighlightArea_Start;
     
-    const double sqDistanceFromEnd = ScenePoint2D::SquaredDistancePtPt(p, end_);
+      const double sqDistanceFromEnd = ScenePoint2D::SquaredDistancePtPt(p, end_);
 
-    if (sqDistanceFromEnd <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
-      return LineHighlightArea_End;
+      if (sqDistanceFromEnd <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
+        return LineHighlightArea_End;
 
-    const double sqDistanceFromPtSegment = 
-      ScenePoint2D::SquaredDistancePtSegment(start_, end_, p);
+      const double sqDistanceFromPtSegment = 
+        ScenePoint2D::SquaredDistancePtSegment(start_, end_, p);
     
-    if (sqDistanceFromPtSegment <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
-      return LineHighlightArea_Segment;
+      if (sqDistanceFromPtSegment <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD)
+        return LineHighlightArea_Segment;
+    }
 
     return LineHighlightArea_None;
   }
@@ -154,18 +157,25 @@
   boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e)
   {
     std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-    ViewportController& controller = lock->GetController();
-    const Scene2D& scene = controller.GetScene();
+    if (lock.get() != NULL)
+    {
+      ViewportController& controller = lock->GetController();
+      const Scene2D& scene = controller.GetScene();
 
-    ScenePoint2D scenePos = e.GetMainPosition().Apply(
-      scene.GetCanvasToSceneTransform());
+      ScenePoint2D scenePos = e.GetMainPosition().Apply(
+        scene.GetCanvasToSceneTransform());
 
-    if (!HitTest(scenePos))
-      return boost::shared_ptr<IFlexiblePointerTracker>();
+      if (!HitTest(scenePos))
+        return boost::shared_ptr<IFlexiblePointerTracker>();
 
-    boost::shared_ptr<EditLineMeasureTracker> editLineMeasureTracker(
-      new EditLineMeasureTracker(shared_from_this(), viewport_, e));
-    return editLineMeasureTracker;
+      boost::shared_ptr<EditLineMeasureTracker> editLineMeasureTracker(
+        new EditLineMeasureTracker(shared_from_this(), viewport_, e));
+      return editLineMeasureTracker;
+    }
+    else
+    {
+      return NULL;
+    }
   }
 
   boost::shared_ptr<MeasureToolMemento> LineMeasureTool::GetMemento() const