From 176a82f108a3a51f7a39ecda8bc5db5f195228fb Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Wed, 18 Mar 2026 23:35:51 +0000 Subject: [PATCH] add zoom to selected --- .../testing/vtkDetectorChamberTest.cpp | 6 +-- src/Vtk/Math/vtkStructuredGrid.cpp | 3 -- src/Vtk/vtkContainerBox.cpp | 3 -- src/Vtk/vtkHandlerWidget.cpp | 3 -- src/Vtk/vtkViewport.cpp | 42 +++++++++++++++++++ src/Vtk/vtkViewport.h | 1 + 6 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/Vtk/HEP/Detectors/testing/vtkDetectorChamberTest.cpp b/src/Vtk/HEP/Detectors/testing/vtkDetectorChamberTest.cpp index 5cde918..4f1092b 100644 --- a/src/Vtk/HEP/Detectors/testing/vtkDetectorChamberTest.cpp +++ b/src/Vtk/HEP/Detectors/testing/vtkDetectorChamberTest.cpp @@ -38,13 +38,13 @@ BOOST_AUTO_TEST_CASE(vtkDetectorChamberTest) { DetectorChamber d1, d2; // d1.SetSize(Vector3f(1, 1, 1)); // d1.SetPosition(Vector3f(0, 0, 0)); - d1.Scale(Vector3f(5_m, 10_m, 2_m)); + d1.Scale(Vector3f(1000, 2000, 200)); d1.Translate(Vector3f(0, 0, 0)); // d2.SetSize(Vector3f(1, 1, 1)); // d2.SetPosition(Vector3f(0, 0, 0)); - d2.Scale(Vector3f(5_m, 10_m, 2_m)); - d2.Translate(Vector3f(0, 0, 10_m)); + d2.Scale(Vector3f(1000, 2000, 200)); + d2.Translate(Vector3f(0, 0, 10)); Vtk::vtkDetectorChamber v_d1(&d1); diff --git a/src/Vtk/Math/vtkStructuredGrid.cpp b/src/Vtk/Math/vtkStructuredGrid.cpp index 634d8e7..885a46d 100644 --- a/src/Vtk/Math/vtkStructuredGrid.cpp +++ b/src/Vtk/Math/vtkStructuredGrid.cpp @@ -84,9 +84,6 @@ void vtkStructuredGrid::Update() { } m_Content->Updated(); // Notify others (like raytracer) - - // Debug output - std::cout << "vtkStructuredGrid::Update matrix:\n" << transform << std::endl; } void vtkStructuredGrid::InstallPipe() { diff --git a/src/Vtk/vtkContainerBox.cpp b/src/Vtk/vtkContainerBox.cpp index db11a98..0ba9d9a 100644 --- a/src/Vtk/vtkContainerBox.cpp +++ b/src/Vtk/vtkContainerBox.cpp @@ -115,9 +115,6 @@ void vtkContainerBox::Update() { } m_Content->Updated(); // Notify change - - // Debug output - std::cout << "vtkContainerBox::Update matrix:\n" << transform << std::endl; } diff --git a/src/Vtk/vtkHandlerWidget.cpp b/src/Vtk/vtkHandlerWidget.cpp index 80fa824..50b628a 100644 --- a/src/Vtk/vtkHandlerWidget.cpp +++ b/src/Vtk/vtkHandlerWidget.cpp @@ -438,9 +438,6 @@ void vtkHandlerWidget::OnMouseMove() { this->Prop3D->Modified(); this->UpdateGizmoPosition(); - // HIGH VISIBILITY LOG - std::printf("--- WIDGET Interaction: %d, Mag: %f, Pos: %f %f %f\n", Interaction, mag, gpos[0], gpos[1], gpos[2]); - this->InvokeEvent(::vtkCommand::InteractionEvent, nullptr); this->Interactor->Render(); } diff --git a/src/Vtk/vtkViewport.cpp b/src/Vtk/vtkViewport.cpp index 10e2fea..5e6ab2e 100644 --- a/src/Vtk/vtkViewport.cpp +++ b/src/Vtk/vtkViewport.cpp @@ -215,6 +215,9 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren) self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER_LOCAL); std::cout << "Widget Frame: CENTER_LOCAL" << std::endl; } + else if (key == "s") { + self->ZoomSelected(); + } iren->Render(); }); @@ -235,6 +238,45 @@ void Viewport::ZoomAuto() } } +void Viewport::ZoomSelected() +{ + if (!m_Renderer) return; + + Puppet* selected = nullptr; + for (auto* p : m_Puppets) { + if (p->IsSelected()) { + selected = p; + break; + } + } + if (!selected) return; + + vtkProp* prop = selected->GetProp(); + if (!prop) return; + + double* b = prop->GetBounds(); + if (!b) return; + + double bounds[6]; + std::copy(b, b + 6, bounds); + + if (bounds[0] > bounds[1]) return; // Invalid bounds + + // Expand bounds by 1.5 from center + double center[3] = {(bounds[0] + bounds[1]) / 2.0, (bounds[2] + bounds[3]) / 2.0, (bounds[4] + bounds[5]) / 2.0}; + double h_ext[3] = {(bounds[1] - bounds[0]) / 2.0, (bounds[3] - bounds[2]) / 2.0, (bounds[5] - bounds[4]) / 2.0}; + + double newBounds[6]; + for (int i=0; i<3; ++i) { + newBounds[2*i] = center[i] - 1.5 * h_ext[i]; + newBounds[2*i+1] = center[i] + 1.5 * h_ext[i]; + } + + m_Renderer->ResetCamera(newBounds); + m_Renderer->ResetCameraClippingRange(); + this->Render(); +} + void Viewport::AddPuppet(Puppet& prop) { m_Puppets.push_back(&prop); diff --git a/src/Vtk/vtkViewport.h b/src/Vtk/vtkViewport.h index 4f2e11a..36d1c18 100644 --- a/src/Vtk/vtkViewport.h +++ b/src/Vtk/vtkViewport.h @@ -43,6 +43,7 @@ public: virtual void Render() = 0; void Reset(); void ZoomAuto(); + void ZoomSelected(); // Puppet / prop management void AddPuppet(Puppet &prop);