changeset 2376:9aae69fb63e1 refactoring

added pan-zoom to the sample simple viewer
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Oct 2026 20:52:17 +0200
parents 2788f73cb1a4
children 94d62ecd8d50
files Applications/Samples/Common/SimpleViewerCore.cpp
diffstat 1 files changed, 36 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp	Thu Oct 08 20:44:33 2026 +0200
+++ b/Applications/Samples/Common/SimpleViewerCore.cpp	Thu Oct 08 20:52:17 2026 +0200
@@ -249,55 +249,53 @@
                                                    unsigned int viewportHeight) ORTHANC_OVERRIDE
     {
 #if TEST_MEASURE_TOOLS == 1
-      const ScenePoint2D p = event.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
-
-      std::vector< boost::shared_ptr<MeasureTool> > tools;
+      if (event.GetMouseButton() == MouseButton_Middle ||
+          event.GetMouseButton() == MouseButton_Right)
+      {
+        return default_.CreateTracker(scene, event, viewportWidth, viewportHeight);
+      }
+      else
+      {
+        const ScenePoint2D p = event.GetMainPosition().Apply(scene.GetCanvasToSceneTransform());
 
-      {
         std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
-        tools = viewportLock->GetController().HitTestMeasureTools(p);
-      }
 
-      if (!tools.empty())
-      {
-        if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove)
+        std::vector< boost::shared_ptr<MeasureTool> > tools;
+        tools = viewportLock->GetController().HitTestMeasureTools(p);
+
+        if (!tools.empty())
         {
-          std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
-
-          boost::shared_ptr<MeasureCommand> command(new DeleteMeasureCommand(viewportLock->GetController(), tools[0]));
-          viewportLock->GetController().PushCommand(command);
-          return NULL;
+          if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove)
+          {
+            boost::shared_ptr<MeasureCommand> command(new DeleteMeasureCommand(viewportLock->GetController(), tools[0]));
+            viewportLock->GetController().PushCommand(command);
+            return NULL;
+          }
+          else
+          {
+            return tools[0]->CreateEditionTracker(false, event);
+          }
         }
         else
         {
-          return tools[0]->CreateEditionTracker(false, event);
-        }
-      }
-      else
-      {
-        switch (core_->annotations_->GetActiveTool())
-        {
-          case AnnotationsSceneLayer::Tool_Remove:
-            LOG(WARNING) << "Nothing to delete there";
-            break;
+          switch (core_->annotations_->GetActiveTool())
+          {
+            case AnnotationsSceneLayer::Tool_Remove:
+              LOG(WARNING) << "Nothing to delete there";
+              break;
 
-          case AnnotationsSceneLayer::Tool_Length:
-          {
-            std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock());
-            return viewportLock->GetController().CreateLineMeasure(event);
+            case AnnotationsSceneLayer::Tool_Length:
+              return viewportLock->GetController().CreateLineMeasure(event);
+
+            case AnnotationsSceneLayer::Tool_Angle:
+              return viewportLock->GetController().CreateAngleMeasure(event);
+
+            default:
+              LOG(ERROR) << "This tool is not supported if not using the annotations layer";
           }
 
-          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";
+          return NULL;
         }
-
-        return NULL;
       }
 #endif