Mercurial > hg > orthanc-stone
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();
