changeset 2366:0e47eebd492c refactoring

reorganization
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Oct 2026 17:25:01 +0200
parents 77f819365bb2
children 1cd6717413bb
files Applications/Samples/Common/SimpleViewerCore.cpp OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp OrthancStone/Sources/Scene2DViewport/ViewportController.cpp OrthancStone/Sources/Scene2DViewport/ViewportController.h
diffstat 4 files changed, 54 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp	Thu Oct 08 17:01:30 2026 +0200
+++ b/Applications/Samples/Common/SimpleViewerCore.cpp	Thu Oct 08 17:25:01 2026 +0200
@@ -264,7 +264,16 @@
 
       if (!tools.empty())
       {
-        return tools[0]->CreateEditionTracker(false, event);
+        if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove)
+        {
+          std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
+          viewportLock->GetController().PushCommand(boost::make_shared<DeleteMeasureCommand>(tools[0], core_->viewport_));
+          return NULL;
+        }
+        else
+        {
+          return tools[0]->CreateEditionTracker(false, event);
+        }
       }
       else
       {
@@ -276,19 +285,15 @@
 
           case AnnotationsSceneLayer::Tool_Length:
           {
-            boost::shared_ptr<LineMeasureTool> tool = OrthancStone::LineMeasureTool::Create(core_->viewport_);
-            tool->Enable();
-            tool->Set(p, p);
-
-            {
-              std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
-              viewportLock->GetController().AddMeasureTool(boost::dynamic_pointer_cast<MeasureTool>(tool));
-            }
-
-            return tool->CreateEditionTracker(true, event);
+            std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
+            return viewportLock->GetController().CreateLineMeasure(event);
           }
 
           case AnnotationsSceneLayer::Tool_Angle:
+          {
+            std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
+            return viewportLock->GetController().CreateAngleMeasure(event);
+          }
 
           default:
             LOG(ERROR) << "This tool is not supported if not using the annotations layer";
--- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp	Thu Oct 08 17:01:30 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp	Thu Oct 08 17:25:01 2026 +0200
@@ -81,8 +81,8 @@
                                              boost::weak_ptr<IViewport> viewport) :
     MeasureCommand(viewport),
     measureTool_(measureTool),
-    mementoModified_(measureTool->CreateMemento()),
-    mementoOriginal_(measureTool->CreateMemento())
+    mementoModified_(measureTool->CreateMemento()),  // TODO Refactoring - Why this?
+    mementoOriginal_(measureTool->CreateMemento())  // TODO Refactoring - Why this?
   {
     if (!measureTool)
     {
@@ -92,7 +92,7 @@
     {
       std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
       measureTool_->Disable();
-      lock->GetController().RemoveMeasureTool(measureTool_);
+      lock->GetController().RemoveMeasureTool(measureTool_);  // TODO Refactoring - Should probably be moved into ViewportController
     }
   }
 
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Thu Oct 08 17:01:30 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Thu Oct 08 17:25:01 2026 +0200
@@ -145,6 +145,7 @@
     measureTools_.push_back(measureTool);
   }
 
+
   void ViewportController::RemoveMeasureTool(
     boost::shared_ptr<MeasureTool> measureTool)
   {
@@ -158,6 +159,36 @@
   }
 
 
+  IFlexiblePointerTracker* ViewportController::CreateLineMeasure(const PointerEvent& event)
+  {
+    const ScenePoint2D p = event.GetMainPosition().Apply(scene_->GetCanvasToSceneTransform());
+
+    boost::shared_ptr<LineMeasureTool> tool = LineMeasureTool::Create(viewport_);
+    tool->Enable();
+    tool->Set(p, p);
+
+    AddMeasureTool(boost::dynamic_pointer_cast<MeasureTool>(tool));
+
+    return tool->CreateEditionTracker(true, event);
+  }
+
+
+  IFlexiblePointerTracker* ViewportController::CreateAngleMeasure(const PointerEvent& event)
+  {
+    const ScenePoint2D p = event.GetMainPosition().Apply(scene_->GetCanvasToSceneTransform());
+
+    boost::shared_ptr<AngleMeasureTool> tool = AngleMeasureTool::Create(viewport_);
+    tool->Enable();
+    tool->SetCenter(p);
+    tool->SetSide1End(p);
+    tool->SetSide2End(p);
+
+    AddMeasureTool(boost::dynamic_pointer_cast<MeasureTool>(tool));
+
+    return tool->CreateEditionTracker(true, event);
+  }
+
+
   double ViewportController::GetHandleSideLengthS() const
   {
     return HANDLE_SIDE_LENGTH_CANVAS_COORD * scene_->GetCanvasToSceneTransform().ComputeZoom();
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.h	Thu Oct 08 17:01:30 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.h	Thu Oct 08 17:25:01 2026 +0200
@@ -126,6 +126,10 @@
     /** Removes a measure tool or throws if it cannot be found */
     void RemoveMeasureTool(boost::shared_ptr<MeasureTool> measureTool);
 
+    IFlexiblePointerTracker* CreateLineMeasure(const PointerEvent& event);
+
+    IFlexiblePointerTracker* CreateAngleMeasure(const PointerEvent& event);
+
     /**
        TODO Refactoring - Remove this?