Mercurial > hg > orthanc-stone
changeset 2358:047bf02a8864 refactoring
fix compatibility of MeasureTool
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Thu, 08 Oct 2026 10:22:05 +0200 |
| parents | 7d2877f8e978 |
| children | cb7b6eb39ebb |
| files | Applications/Samples/Common/SimpleViewerCore.cpp Applications/Samples/Common/SimpleViewerCore.h 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 | 8 files changed, 117 insertions(+), 68 deletions(-) [+] |
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp Wed Oct 07 09:23:35 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.cpp Thu Oct 08 10:22:05 2026 +0200 @@ -149,6 +149,21 @@ std::unique_ptr<IViewport::ILock> viewportLock(viewport->Lock()); viewportLock->GetController().SetUndoStack(boost::make_shared<UndoStack>()); } + +#if TEST_LINE_MEASURE_TOOL == 1 + lineMeasureTool_ = OrthancStone::LineMeasureTool::Create(viewport); + lineMeasureTool_->Enable(); + lineMeasureTool_->Set(OrthancStone::ScenePoint2D(200, 100), + OrthancStone::ScenePoint2D(100, 200)); +#endif + +#if TEST_ANGLE_MEASURE_TOOL == 1 + angleMeasureTool_ = OrthancStone::AngleMeasureTool::Create(viewport); + angleMeasureTool_->Enable(); + angleMeasureTool_->SetCenter(OrthancStone::ScenePoint2D(300, 300)); + angleMeasureTool_->SetSide1End(OrthancStone::ScenePoint2D(200, 400)); + angleMeasureTool_->SetSide2End(OrthancStone::ScenePoint2D(400, 400)); +#endif } @@ -198,17 +213,32 @@ DefaultViewportInteractor default_; boost::shared_ptr<AnnotationsSceneLayer> annotations_; +#if TEST_LINE_MEASURE_TOOL == 1 + boost::shared_ptr<LineMeasureTool> lineMeasureTool_; // TODO Refactoring - Remove +#endif + +#if TEST_ANGLE_MEASURE_TOOL == 1 + boost::shared_ptr<AngleMeasureTool> angleMeasureTool_; // TODO Refactoring - Remove +#endif + public: - Interactor(const boost::shared_ptr<SimpleViewerCore>& core, - const boost::shared_ptr<AnnotationsSceneLayer>& annotations) : - annotations_(annotations) + Interactor(const boost::shared_ptr<SimpleViewerCore>& core) { - if (!core || - !annotations) + if (!core) { throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); } + annotations_ = core->annotations_; + +#if TEST_LINE_MEASURE_TOOL == 1 + lineMeasureTool_ = core->lineMeasureTool_; +#endif + +#if TEST_ANGLE_MEASURE_TOOL == 1 + angleMeasureTool_ = core->angleMeasureTool_; +#endif + default_.SetWindowingLayer(0); default_.SetObserverFactory(new Factory(core)); } @@ -218,6 +248,14 @@ unsigned int viewportWidth, unsigned int viewportHeight) ORTHANC_OVERRIDE { +#if TEST_LINE_MEASURE_TOOL == 1 + return lineMeasureTool_->CreateEditionTracker(event); +#endif + +#if TEST_ANGLE_MEASURE_TOOL == 1 + return angleMeasureTool_->CreateEditionTracker(event); +#endif + annotations_->ClearHover(); if (event.GetMouseButton() == MouseButton_Left) @@ -251,7 +289,7 @@ } else { - return new Interactor(shared_from_this(), annotations_); + return new Interactor(shared_from_this()); } } @@ -261,68 +299,68 @@ { switch (key) { - case 's': - { - std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - viewportLock->GetCompositor().FitContent(viewportLock->GetController().GetScene()); - viewportLock->Invalidate(); - break; - } + case 's': + { + std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); + viewportLock->GetCompositor().FitContent(viewportLock->GetController().GetScene()); + viewportLock->Invalidate(); + break; + } - case 'u': - { - std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - if (viewportLock->GetController().CanUndo()) + case 'u': { - viewportLock->GetController().Undo(); + std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); + if (viewportLock->GetController().CanUndo()) + { + viewportLock->GetController().Undo(); + } + break; } - break; - } - case 'U': - { - std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - if (viewportLock->GetController().CanRedo()) + case 'U': { - viewportLock->GetController().Redo(); + std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); + if (viewportLock->GetController().CanRedo()) + { + viewportLock->GetController().Redo(); + } + break; } - break; - } - case 'c': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Circle); - break; + case 'c': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Circle); + break; - case 'm': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Edit); - break; + case 'm': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Edit); + break; - case 'd': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Remove); - break; + case 'd': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Remove); + break; - case 'l': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Length); - break; + case 'l': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Length); + break; - case 'a': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Angle); - break; + case 'a': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_Angle); + break; - case 'p': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_PixelProbe); - break; + case 'p': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_PixelProbe); + break; - case 'e': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_EllipseProbe); - break; + case 'e': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_EllipseProbe); + break; - case 'r': - annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_RectangleProbe); - break; + case 'r': + annotations_->SetActiveTool(AnnotationsSceneLayer::Tool_RectangleProbe); + break; - default: - break; + default: + break; } }
--- a/Applications/Samples/Common/SimpleViewerCore.h Wed Oct 07 09:23:35 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.h Thu Oct 08 10:22:05 2026 +0200 @@ -22,12 +22,19 @@ #pragma once +// TODO Refactoring - Remove +#define TEST_LINE_MEASURE_TOOL 1 +#define TEST_ANGLE_MEASURE_TOOL 1 + #include "../../../OrthancStone/Sources/Loaders/DicomResourcesLoader.h" #include "../../../OrthancStone/Sources/Loaders/SeriesFramesLoader.h" #include "../../../OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.h" #include "../../../OrthancStone/Sources/Scene2DViewport/ViewportController.h" #include "ISingleViewportApplicationCore.h" +#include "../../../OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h" // TODO Refactoring - Remove +#include "../../../OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h" // TODO Refactoring - Remove + namespace OrthancStone { @@ -49,6 +56,14 @@ boost::shared_ptr<DicomResourcesLoader> dicomLoader_; boost::shared_ptr<SeriesFramesLoader> framesLoader_; +#if TEST_LINE_MEASURE_TOOL == 1 + boost::shared_ptr<LineMeasureTool> lineMeasureTool_; // TODO Refactoring - Remove +#endif + +#if TEST_ANGLE_MEASURE_TOOL == 1 + boost::shared_ptr<AngleMeasureTool> angleMeasureTool_; // TODO Refactoring - Remove +#endif + public: virtual void Handle(const New::IObservable& observable, const FrameDecodedMessage& message) ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Thu Oct 08 10:22:05 2026 +0200 @@ -198,7 +198,7 @@ } - boost::shared_ptr<IFlexiblePointerTracker> AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) + IFlexiblePointerTracker* AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) { std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); ViewportController& controller = lock->GetController(); @@ -209,7 +209,7 @@ if (!HitTest(scenePos)) { - return boost::shared_ptr<IFlexiblePointerTracker>(); // NULL + return NULL; } else { @@ -221,9 +221,7 @@ const PointerEvent & e); */ - boost::shared_ptr<EditAngleMeasureTracker> editAngleMeasureTracker( - new EditAngleMeasureTracker(shared_from_this(), viewport_, e)); - return editAngleMeasureTracker; + return new EditAngleMeasureTracker(shared_from_this(), viewport_, e); } }
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Thu Oct 08 10:22:05 2026 +0200 @@ -53,7 +53,7 @@ virtual bool HitTest(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void ResetHighlightState() ORTHANC_OVERRIDE; - virtual boost::shared_ptr<IFlexiblePointerTracker> CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; + virtual IFlexiblePointerTracker* CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; virtual MeasureToolMemento* CreateMemento() const ORTHANC_OVERRIDE; virtual void SetMemento(const MeasureToolMemento& memento) ORTHANC_OVERRIDE; virtual std::string GetDescription() ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Thu Oct 08 10:22:05 2026 +0200 @@ -155,7 +155,7 @@ return LineHitTest(p) != LineHighlightArea_None; } - boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e) + IFlexiblePointerTracker* LineMeasureTool::CreateEditionTracker(const PointerEvent& e) { std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); if (lock.get() != NULL) @@ -168,18 +168,16 @@ if (!HitTest(scenePos)) { - return boost::shared_ptr<IFlexiblePointerTracker>(); // NULL + return NULL; } else { - boost::shared_ptr<EditLineMeasureTracker> editLineMeasureTracker( - new EditLineMeasureTracker(shared_from_this(), viewport_, e)); - return editLineMeasureTracker; + return new EditLineMeasureTracker(shared_from_this(), viewport_, e); } } else { - return boost::shared_ptr<IFlexiblePointerTracker>(); // NULL + return NULL; } }
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Thu Oct 08 10:22:05 2026 +0200 @@ -52,7 +52,7 @@ virtual bool HitTest(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void ResetHighlightState() ORTHANC_OVERRIDE; - virtual boost::shared_ptr<IFlexiblePointerTracker> CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; + virtual IFlexiblePointerTracker* CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; virtual MeasureToolMemento* CreateMemento() const ORTHANC_OVERRIDE; virtual void SetMemento(const MeasureToolMemento& memento) ORTHANC_OVERRIDE; virtual std::string GetDescription() ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Thu Oct 08 10:22:05 2026 +0200 @@ -139,7 +139,7 @@ or an empty pointer if no hit test (although this should have been checked first) */ - virtual boost::shared_ptr<IFlexiblePointerTracker> CreateEditionTracker(const PointerEvent& e) = 0; + virtual IFlexiblePointerTracker* CreateEditionTracker(const PointerEvent& e) = 0; /** Will change the measuring tool to provide visual feedback on the GUI
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Wed Oct 07 09:23:35 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Thu Oct 08 10:22:05 2026 +0200 @@ -227,7 +227,7 @@ { if (measureTools_[i]->HitTest(event.GetMainPosition())) { - activeTracker_ = measureTools_[i]->CreateEditionTracker(event); + activeTracker_.reset(measureTools_[i]->CreateEditionTracker(event)); InvalidateViewport(); return; }
