Mercurial > hg > orthanc-stone
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_; }; }
