changeset 2343:e4d4e5d274fc refactoring

removed ViewportController::canvasToSceneFactor_
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Oct 2026 14:48:10 +0200
parents 1ee4886b0f2d
children dbba1b96b35a
files Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp OrthancStone/Sources/Scene2D/Scene2D.cpp OrthancStone/Sources/Scene2D/Scene2D.h OrthancStone/Sources/Scene2DViewport/ViewportController.cpp OrthancStone/Sources/Scene2DViewport/ViewportController.h
diffstat 5 files changed, 25 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Tue Oct 06 14:25:00 2026 +0200
+++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Tue Oct 06 14:48:10 2026 +0200
@@ -3948,7 +3948,7 @@
           const OrthancStone::ScenePoint2D p = event.GetMainPosition();
           double x = p.GetX();
           double y = p.GetY();
-          viewportLock->GetController().GetCanvasToSceneTransform().Apply(x, y);
+          viewportLock->GetController().GetScene().GetCanvasToSceneTransform().Apply(x, y);
           
           OrthancStone::Vector click = plane.MapSliceToWorldCoordinates(x, y);
           if (viewer_.observer_.get() != NULL)
--- a/OrthancStone/Sources/Scene2D/Scene2D.cpp	Tue Oct 06 14:25:00 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/Scene2D.cpp	Tue Oct 06 14:48:10 2026 +0200
@@ -81,19 +81,15 @@
   };
   
   
-  Scene2D::Scene2D(const Scene2D& other) 
-    : sceneToCanvas_(other.sceneToCanvas_)
-    , canvasToScene_(other.canvasToScene_)
-    , layerCounter_(0)
+  Scene2D::Scene2D() :
+    layerCounter_(0),
+    canvasToSceneFactor_(canvasToScene_.ComputeZoom()),
+    transformRevision_(0)
   {
-    for (Content::const_iterator it = other.content_.begin();
-         it != other.content_.end(); ++it)
-    {
-      content_[it->first] = new Item(it->second->GetLayer().Clone(), layerCounter_++);
-    }
+    assert(LinearAlgebra::IsNear(1, canvasToSceneFactor_));
   }
 
-    
+
   Scene2D::~Scene2D()
   {
     for (Content::iterator it = content_.begin(); 
@@ -226,6 +222,7 @@
 
     sceneToCanvas_ = transform;
     canvasToScene_ = inverse;
+    transformRevision_ ++;
   }
 
   void Scene2D::GetBoundingBox(Extent2D& target) const
--- a/OrthancStone/Sources/Scene2D/Scene2D.h	Tue Oct 06 14:25:00 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/Scene2D.h	Tue Oct 06 14:48:10 2026 +0200
@@ -57,25 +57,18 @@
     AffineTransform2D  sceneToCanvas_;
     AffineTransform2D  canvasToScene_;
     uint64_t           layerCounter_;
+    double             canvasToSceneFactor_;  // This value is cached from "canvasToScene_.ComputeZoom()"
+    uint64_t           transformRevision_;
 
-    Scene2D(const Scene2D& other);
-    
     void FitContent(const AffineTransform2D& forcedTransform,
                     unsigned int canvasWidth,
                     unsigned int canvasHeight);
 
   public:
-    Scene2D() : layerCounter_(0)
-    {
-    }
+    Scene2D();
     
     ~Scene2D();
 
-    Scene2D* Clone() const
-    {
-      return new Scene2D(*this);
-    }
-
     ISceneLayer& SetLayer(int depth,
                           ISceneLayer* layer);  // Takes ownership
 
@@ -139,5 +132,15 @@
 
     void PreserveExtent(int depth,
                         const Extent2D& previousExtent);
+
+    double GetCanvasToSceneFactor() const
+    {
+      return canvasToSceneFactor_;
+    }
+
+    uint64_t GetTransformRevision() const
+    {
+      return transformRevision_;
+    }
   };
 }
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Tue Oct 06 14:25:00 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Tue Oct 06 14:48:10 2026 +0200
@@ -30,10 +30,9 @@
 
 namespace OrthancStone
 {
-  ViewportController::ViewportController(boost::weak_ptr<IViewport> viewport)
-    : scene_(new Scene2D)
-    , viewport_(viewport)
-    , canvasToSceneFactor_(1)
+  ViewportController::ViewportController(boost::weak_ptr<IViewport> viewport) :
+    scene_(new Scene2D),
+    viewport_(viewport)
   {
     // undoStack_ is not default-initialized, which basically means empty.
     // The controller must be able to cope with this.
@@ -135,7 +134,6 @@
   {
     scene_->SetSceneToCanvasTransform(transform);
 
-    canvasToSceneFactor_ = scene_->GetCanvasToSceneTransform().ComputeZoom();
     BroadcastMessage(SceneTransformChanged(*this));
   }
 
@@ -148,7 +146,7 @@
                                       unsigned int viewportHeight)
   {
     scene_->FitContent(viewportWidth, viewportHeight);
-    canvasToSceneFactor_ = scene_->GetCanvasToSceneTransform().ComputeZoom();
+
     BroadcastMessage(SceneTransformChanged(*this));
   }
 
@@ -174,31 +172,6 @@
       measureTools_.end());
   }
 
-  double ViewportController::GetCanvasToSceneFactor() const
-  {
-    return canvasToSceneFactor_;
-  }
-
-  double ViewportController::GetHandleSideLengthS() const
-  {
-    return HANDLE_SIDE_LENGTH_CANVAS_COORD * GetCanvasToSceneFactor();
-  }
-
-  double ViewportController::GetAngleToolArcRadiusS() const
-  {
-    return ARC_RADIUS_CANVAS_COORD * GetCanvasToSceneFactor();
-  }
-
-  double ViewportController::GetHitTestMaximumDistanceS() const
-  {
-    return HIT_TEST_MAX_DISTANCE_CANVAS_COORD * GetCanvasToSceneFactor();
-  }
-
-  double ViewportController::GetAngleTopTextLabelDistanceS() const
-  {
-    return TEXT_CENTER_DISTANCE_CANVAS_COORD * GetCanvasToSceneFactor();
-  }
-
 
   void ViewportController::HandleMousePress(IViewportInteractor&  interactor,
                                             const PointerEvent&   event,
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.h	Tue Oct 06 14:25:00 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.h	Tue Oct 06 14:48:10 2026 +0200
@@ -254,8 +254,6 @@
     }
 
   private:
-    double GetCanvasToSceneFactor() const;
-
     // The scene can be used by the higher-level objects (including the
     // measuring tools), possibly in their destructor, and so it must be 
     // deleted last (and, thus, constructed first)
@@ -266,9 +264,5 @@
     boost::weak_ptr<UndoStack>                    undoStackW_;  // Global stack, possibly shared by all viewports
     std::vector<boost::shared_ptr<MeasureTool> >  measureTools_;
     boost::shared_ptr<IFlexiblePointerTracker>    activeTracker_;  // TODO - Couldn't this be a "std::unique_ptr"?
-
-
-    // this is cached
-    double  canvasToSceneFactor_;    
   };
 }