changeset 2375:2788f73cb1a4 refactoring

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Oct 2026 20:44:33 +0200
parents 07e20eaa0e90
children 9aae69fb63e1
files OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h OrthancStone/Sources/Scene2DViewport/MeasureTool.h OrthancStone/Sources/Scene2DViewport/ViewportController.cpp
diffstat 6 files changed, 54 insertions(+), 51 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp	Thu Oct 08 20:44:33 2026 +0200
@@ -67,7 +67,7 @@
         throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
       }
 
-      modifiedZone_ = tool_->AngleHitTest(originalClickPosition_);
+      modifiedZone_ = tool_->AngleHitTest(scene, originalClickPosition_);
       originalMemento_.reset(dynamic_cast<AngleMeasureTool::Memento*>(tool->CreateMemento()));
 
       boost::shared_ptr<IViewport> sharedViewport = viewport.lock();
@@ -267,18 +267,16 @@
     return ss.str();
   }
 
-  void AngleMeasureTool::Highlight(ScenePoint2D p)
+  void AngleMeasureTool::Highlight(const Scene2D& scene,
+                                   ScenePoint2D p)
   {
-    AngleHighlightArea angleHighlightArea = AngleHitTest(p);
+    AngleHighlightArea angleHighlightArea = AngleHitTest(scene, p);
     SetAngleHighlightArea(angleHighlightArea);
   }
 
-  AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(ScenePoint2D p) const
+  AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(const Scene2D& scene,
+                                                                      ScenePoint2D p) const
   {
-    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-    const ViewportController& controller = lock->GetController();
-    const Scene2D& scene = controller.GetScene();
-    
     const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom();
 
     const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = 
@@ -327,9 +325,10 @@
     return AngleHighlightArea_None;
   }
 
-  bool AngleMeasureTool::HitTest(ScenePoint2D p)
+  bool AngleMeasureTool::HitTest(const Scene2D& scene,
+                                 ScenePoint2D p)
   {
-    return AngleHitTest(p) != AngleHighlightArea_None;
+    return AngleHitTest(scene, p) != AngleHighlightArea_None;
   }
 
 
@@ -342,7 +341,7 @@
     const Scene2D& scene = controller.GetScene();
     ScenePoint2D scenePos = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
 
-    if (!HitTest(scenePos))
+    if (!HitTest(scene, scenePos))
     {
       return NULL;
     }
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h	Thu Oct 08 20:44:33 2026 +0200
@@ -80,8 +80,10 @@
     void SetCenter(ScenePoint2D start);
     void SetSide2End(ScenePoint2D start);
 
-    virtual bool HitTest(ScenePoint2D p) ORTHANC_OVERRIDE;
-    virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE;
+    virtual bool HitTest(const Scene2D& scene,
+                         ScenePoint2D p) ORTHANC_OVERRIDE;
+    virtual void Highlight(const Scene2D& scene,
+                           ScenePoint2D p) ORTHANC_OVERRIDE;
     virtual void ResetHighlightState() ORTHANC_OVERRIDE;
     virtual IFlexiblePointerTracker* CreateEditionTracker(bool isCreation,
                                                           const PointerEvent& e) ORTHANC_OVERRIDE;
@@ -100,7 +102,8 @@
     };
 
 
-    AngleHighlightArea AngleHitTest(ScenePoint2D p) const;
+    AngleHighlightArea AngleHitTest(const Scene2D& scene,
+                                    ScenePoint2D p) const;
 
   private:
     class Tracker;
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp	Thu Oct 08 20:44:33 2026 +0200
@@ -61,7 +61,7 @@
         throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
       }
 
-      modifiedZone_ = tool_->LineHitTest(originalClickPosition_);
+      modifiedZone_ = tool_->LineHitTest(scene, originalClickPosition_);
       originalMemento_.reset(dynamic_cast<LineMeasureTool::Memento*>(tool->CreateMemento()));
 
       boost::shared_ptr<IViewport> sharedViewport = viewport.lock();
@@ -236,49 +236,45 @@
     SetLineHighlightArea(LineHighlightArea_None);
   }
  
-  void LineMeasureTool::Highlight(ScenePoint2D p)
+  void LineMeasureTool::Highlight(const Scene2D& scene,
+                                  ScenePoint2D p)
   {
-    LineHighlightArea lineHighlightArea = LineHitTest(p);
+    LineHighlightArea lineHighlightArea = LineHitTest(scene, p);
     SetLineHighlightArea(lineHighlightArea);
   }
 
-  LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p)
+  LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(const Scene2D& scene,
+                                                                  ScenePoint2D p)
   {
-    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-    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;
   }
 
-  bool LineMeasureTool::HitTest(ScenePoint2D p)
+  bool LineMeasureTool::HitTest(const Scene2D& scene,
+                                ScenePoint2D p)
   {
-    return LineHitTest(p) != LineHighlightArea_None;
+    return LineHitTest(scene, p) != LineHighlightArea_None;
   }
 
   IFlexiblePointerTracker* LineMeasureTool::CreateEditionTracker(bool isCreation,
@@ -290,7 +286,7 @@
     const Scene2D& scene = controller.GetScene();
     ScenePoint2D scenePos = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
 
-    if (!HitTest(scenePos))
+    if (!HitTest(scene, scenePos))
     {
       return NULL;
     }
@@ -319,7 +315,6 @@
     {
       if (IsEnabled())
       {
-        
         std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
         ViewportController& controller = lock->GetController();
         Scene2D& scene = controller.GetScene();
@@ -379,6 +374,7 @@
             }
           }
         }
+
         {
           // Set the text layer propreties
           double deltaX = end_.GetX() - start_.GetX();
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h	Thu Oct 08 20:44:33 2026 +0200
@@ -76,8 +76,10 @@
     void Set(ScenePoint2D start, ScenePoint2D end);
 
 
-    virtual bool HitTest(ScenePoint2D p) ORTHANC_OVERRIDE;
-    virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE;
+    virtual bool HitTest(const Scene2D& scene,
+                         ScenePoint2D p) ORTHANC_OVERRIDE;
+    virtual void Highlight(const Scene2D& scene,
+                           ScenePoint2D p) ORTHANC_OVERRIDE;
     virtual void ResetHighlightState() ORTHANC_OVERRIDE;
     virtual IFlexiblePointerTracker* CreateEditionTracker(bool isCreation,
                                                           const PointerEvent& e) ORTHANC_OVERRIDE;
@@ -94,7 +96,8 @@
     };
 
 
-    LineHighlightArea LineHitTest(ScenePoint2D p);
+    LineHighlightArea LineHitTest(const Scene2D& scene,
+                                  ScenePoint2D p);
 
   private:
     class Tracker;
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.h	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.h	Thu Oct 08 20:44:33 2026 +0200
@@ -124,7 +124,8 @@
        true, then a click at that position will return a tracker to edit the 
        measuring tool
     */
-    virtual bool HitTest(ScenePoint2D p) = 0;
+    virtual bool HitTest(const Scene2D& scene,
+                         ScenePoint2D p) = 0;
 
     /**
        This method must return a memento the captures the tool state (not including
@@ -150,7 +151,8 @@
        Will change the measuring tool to provide visual feedback on the GUI 
        element that is in the pointer hit zone
     */
-    virtual void Highlight(ScenePoint2D p) = 0;
+    virtual void Highlight(const Scene2D& scene,
+                           ScenePoint2D p) = 0;
 
     /**
        This function must reset the visual highlighted hot zone feedback
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Thu Oct 08 20:35:08 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Thu Oct 08 20:44:33 2026 +0200
@@ -107,7 +107,7 @@
     
     for (size_t i = 0; i < measureTools_.size(); ++i)
     {
-      if (measureTools_[i]->HitTest(p))
+      if (measureTools_[i]->HitTest(*scene_, p))
         ret.push_back(measureTools_[i]);
     }
     return ret;
@@ -224,7 +224,7 @@
       // Check whether there is already a measure tool at that position
       for (size_t i = 0; i < measureTools_.size(); ++i)
       {
-        if (measureTools_[i]->HitTest(event.GetMainPosition()))
+        if (measureTools_[i]->HitTest(*scene_, event.GetMainPosition()))
         {
           activeTracker_.reset(measureTools_[i]->CreateEditionTracker(false, event));
           InvalidateViewport();