vtk camera position widget on viewer

This commit is contained in:
AndreaRigoni
2026-03-08 16:51:39 +00:00
parent 1374821344
commit 00275ac56d
6 changed files with 49 additions and 16 deletions

View File

@@ -40,7 +40,6 @@ BOOST_AUTO_TEST_CASE(vtkDetectorChamberTest) {
d2.SetPosition(uLib::Vector3f(0, 0, 20)); d2.SetPosition(uLib::Vector3f(0, 0, 20));
uLib::Vtk::vtkDetectorChamber vtkDetectorChamber(&d1); uLib::Vtk::vtkDetectorChamber vtkDetectorChamber(&d1);
uLib::Vtk::vtkDetectorChamber vtkDetectorChamber2(&d2); uLib::Vtk::vtkDetectorChamber vtkDetectorChamber2(&d2);
if (!vtkDetectorChamber.GetProp()) { if (!vtkDetectorChamber.GetProp()) {

View File

@@ -23,8 +23,6 @@
//////////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////////*/
#include "Vtk/uLibVtkViewer.h" #include "Vtk/uLibVtkViewer.h"
#include "Math/ContainerBox.h" #include "Math/ContainerBox.h"
@@ -37,17 +35,16 @@ using namespace uLib;
int main() { int main() {
BEGIN_TESTING(vtk ContainerBox Test); BEGIN_TESTING(vtk ContainerBox Test);
Vtk::Viewer v_viewer;
ContainerBox box; ContainerBox box;
box.SetSize(Vector3f(2,3,4)); box.SetSize(Vector3f(2, 3, 4));
box.SetPosition(Vector3f(1,2,3)); box.SetPosition(Vector3f(1, 2, 3));
Vtk::vtkContainerBox v_box(&box);
Vtk::vtkContainerBox v_box(box);
if (std::getenv("CTEST_PROJECT_NAME") == nullptr) {
Vtk::Viewer v_viewer;
v_viewer.AddPuppet(v_box); v_viewer.AddPuppet(v_box);
v_viewer.Start(); v_viewer.Start();
}
END_TESTING; END_TESTING;
} }

View File

@@ -33,6 +33,7 @@
#include <vtkAxesActor.h> #include <vtkAxesActor.h>
#include <vtkCamera.h> #include <vtkCamera.h>
#include <vtkCameraOrientationWidget.h>
#include <vtkInteractorStyleTrackballCamera.h> #include <vtkInteractorStyleTrackballCamera.h>
#include <vtkObjectFactory.h> #include <vtkObjectFactory.h>
#include <vtkTextProperty.h> #include <vtkTextProperty.h>
@@ -61,11 +62,14 @@ namespace Vtk {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
///// VTK VIEWER ////////////////////////////////////////////////////////////// ///// VTK VIEWER //////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Viewer::Viewer() Viewer::Viewer()
: m_RenderWindow(vtkRenderWindow::New()), m_Renderer(vtkRenderer::New()), : m_RenderWindow(vtkRenderWindow::New()), m_Renderer(vtkRenderer::New()),
m_Annotation(vtkCornerAnnotation::New()), m_Annotation(vtkCornerAnnotation::New()),
m_Marker(vtkOrientationMarkerWidget::New()) { m_Marker(vtkOrientationMarkerWidget::New()), m_CameraWidget(nullptr) {
#if VTK_MAJOR_VERSION >= 9 || \
(VTK_MAJOR_VERSION == 8 && VTK_MINOR_VERSION >= 90)
m_CameraWidget = vtkCameraOrientationWidget::New();
#endif
InstallPipe(); InstallPipe();
} }
@@ -74,6 +78,8 @@ Viewer::~Viewer() {
m_Annotation->Delete(); m_Annotation->Delete();
m_Marker->Delete(); m_Marker->Delete();
if (m_CameraWidget)
m_CameraWidget->Delete();
m_Renderer->Delete(); m_Renderer->Delete();
m_RenderWindow->Delete(); m_RenderWindow->Delete();
} }
@@ -105,6 +111,13 @@ void Viewer::InstallPipe() {
m_Marker->SetEnabled(true); m_Marker->SetEnabled(true);
m_Marker->InteractiveOff(); m_Marker->InteractiveOff();
// camera orientation widget //
if (m_CameraWidget) {
m_CameraWidget->SetParentRenderer(m_Renderer);
m_CameraWidget->SetInteractor(renderWindowInteractor);
m_CameraWidget->On();
}
// Must be rendered here in Vtk-6.0 or seg-fault // // Must be rendered here in Vtk-6.0 or seg-fault //
m_RenderWindow->Render(); m_RenderWindow->Render();
} }
@@ -135,6 +148,17 @@ void Viewer::RemovePuppet(Puppet &prop) {
m_Renderer->Render(); m_Renderer->Render();
} }
vtkSmartPointer<vtkCameraOrientationWidget>
Viewer::MakeCameraOrientationWidget(vtkRenderWindowInteractor *interactor,
vtkRenderer *renderer) {
vtkSmartPointer<vtkCameraOrientationWidget> widget =
vtkSmartPointer<vtkCameraOrientationWidget>::New();
widget->SetParentRenderer(renderer);
widget->SetInteractor(interactor);
widget->On();
return widget;
}
void Viewer::Start() { m_RenderWindow->GetInteractor()->Start(); } void Viewer::Start() { m_RenderWindow->GetInteractor()->Start(); }
vtkCornerAnnotation *Viewer::GetAnnotation() { return m_Annotation; } vtkCornerAnnotation *Viewer::GetAnnotation() { return m_Annotation; }
@@ -145,6 +169,8 @@ vtkRenderWindowInteractor *Viewer::GetInteractor() {
return m_RenderWindow->GetInteractor(); return m_RenderWindow->GetInteractor();
} }
vtkCameraOrientationWidget *Viewer::GetCameraWidget() { return m_CameraWidget; }
void Viewer::Reset() { void Viewer::Reset() {
this->ZoomAuto(); this->ZoomAuto();
m_Renderer->Render(); m_Renderer->Render();

View File

@@ -33,12 +33,14 @@
#include <vtkOrientationMarkerWidget.h> #include <vtkOrientationMarkerWidget.h>
#include <vtkRenderWindow.h> #include <vtkRenderWindow.h>
#include <vtkRenderer.h> #include <vtkRenderer.h>
#include <vtkSmartPointer.h>
class vtkProp; class vtkProp;
class vtk3DWidget; class vtk3DWidget;
class vtkCornerAnnotation; class vtkCornerAnnotation;
class vtkRenderWindowInteractor; class vtkRenderWindowInteractor;
class vtkRenderer; class vtkRenderer;
class vtkCameraOrientationWidget;
namespace uLib { namespace uLib {
namespace Vtk { namespace Vtk {
@@ -62,6 +64,10 @@ public:
void AddWidget(vtk3DWidget *widget); void AddWidget(vtk3DWidget *widget);
static vtkSmartPointer<vtkCameraOrientationWidget>
MakeCameraOrientationWidget(vtkRenderWindowInteractor *interactor,
vtkRenderer *renderer);
void Reset(); void Reset();
void ZoomAuto(); void ZoomAuto();
@@ -73,6 +79,8 @@ public:
vtkRenderWindowInteractor *GetInteractor(); vtkRenderWindowInteractor *GetInteractor();
vtkCameraOrientationWidget *GetCameraWidget();
void addProp(vtkProp *prop); void addProp(vtkProp *prop);
void RemoveProp(vtkProp *prop); void RemoveProp(vtkProp *prop);
@@ -85,6 +93,7 @@ private:
vtkRenderWindow *m_RenderWindow; vtkRenderWindow *m_RenderWindow;
vtkCornerAnnotation *m_Annotation; vtkCornerAnnotation *m_Annotation;
vtkOrientationMarkerWidget *m_Marker; vtkOrientationMarkerWidget *m_Marker;
vtkCameraOrientationWidget *m_CameraWidget;
}; };
template <> class Tie<Viewer> { template <> class Tie<Viewer> {

View File

@@ -47,7 +47,8 @@ protected:
vtkActor *m_Cube; vtkActor *m_Cube;
vtkActor *m_Axes; vtkActor *m_Axes;
vtkActor *m_Pivot; vtkActor *m_Pivot;
vtkContainerBox::Content *m_Content;
Content *m_Content;
}; };
} // namespace Vtk } // namespace Vtk

View File

@@ -24,6 +24,7 @@
//////////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////////*/
#include "vtkHandlerWidget.h" #include "vtkHandlerWidget.h"
#include <iostream>
#include <vtkArcSource.h> #include <vtkArcSource.h>
#include <vtkArrowSource.h> #include <vtkArrowSource.h>
#include <vtkCallbackCommand.h> #include <vtkCallbackCommand.h>