split viewport for Qt and VtkViewer

This commit is contained in:
AndreaRigoni
2026-03-17 15:29:07 +00:00
parent 4569407d18
commit e6e0bccffb
7 changed files with 345 additions and 233 deletions

View File

@@ -37,6 +37,7 @@
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkObjectFactory.h>
#include <vtkTextProperty.h>
#include <vtkRenderWindow.h>
#include "uLibVtkViewer.h"
@@ -56,8 +57,6 @@ public:
};
vtkStandardNewMacro(vtkInteractorStyleNoSpin);
namespace uLib {
namespace Vtk {
@@ -65,24 +64,12 @@ namespace Vtk {
///// VTK VIEWER //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Viewer::Viewer()
: m_RenderWindow(vtkRenderWindow::New()), m_Renderer(vtkRenderer::New()),
m_Annotation(vtkCornerAnnotation::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
: Viewport(), m_RenderWindow(vtkRenderWindow::New()) {
InstallPipe();
}
Viewer::~Viewer() {
UninstallPipe();
m_Annotation->Delete();
m_Marker->Delete();
if (m_CameraWidget)
m_CameraWidget->Delete();
m_Renderer->Delete();
m_RenderWindow->Delete();
}
@@ -93,34 +80,14 @@ void Viewer::InstallPipe() {
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(m_RenderWindow);
// Use a custom style with no spin/inertia
// Common setup
Viewport::SetupPipeline(renderWindowInteractor);
// BUT we want to override the style with our custom NoSpin version
vtkSmartPointer<vtkInteractorStyleNoSpin> style =
vtkSmartPointer<vtkInteractorStyleNoSpin>::New();
renderWindowInteractor->SetInteractorStyle(style);
// annotation //
m_Annotation->GetTextProperty()->SetColor(1, 1, 1);
m_Annotation->GetTextProperty()->SetFontFamilyToArial();
m_Annotation->GetTextProperty()->SetOpacity(0.5);
m_Annotation->SetMaximumFontSize(10);
m_Annotation->SetText(0, "uLib VTK Viewer - OpenCMT all right reserved.");
m_Renderer->AddViewProp(m_Annotation);
// orientation marker //
vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();
m_Marker->SetInteractor(renderWindowInteractor);
m_Marker->SetOrientationMarker(axes);
m_Marker->SetViewport(0.0, 0.0, 0.2, 0.2);
m_Marker->SetEnabled(true);
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 //
m_RenderWindow->Render();
}
@@ -130,25 +97,9 @@ void Viewer::UninstallPipe() {
m_Renderer->Clear();
}
void Viewer::addProp(vtkProp *prop) {
m_Renderer->AddActor(prop);
m_Renderer->Render();
}
void Viewer::RemoveProp(vtkProp *prop) {
m_Renderer->RemoveViewProp(prop);
m_Renderer->Render();
}
void Viewer::AddPuppet(Puppet &prop) {
prop.ConnectRenderer(m_Renderer);
prop.ConnectInteractor(this->GetInteractor());
m_Renderer->Render();
}
void Viewer::RemovePuppet(Puppet &prop) {
prop.DisconnectRenderer(m_Renderer);
m_Renderer->Render();
void Viewer::Render() {
if (m_RenderWindow)
m_RenderWindow->Render();
}
vtkSmartPointer<vtkCameraOrientationWidget>
@@ -164,27 +115,11 @@ Viewer::MakeCameraOrientationWidget(vtkRenderWindowInteractor *interactor,
void Viewer::Start() { m_RenderWindow->GetInteractor()->Start(); }
vtkCornerAnnotation *Viewer::GetAnnotation() { return m_Annotation; }
vtkRenderer *Viewer::GetRenderer() { return m_Renderer; }
vtkRenderWindow *Viewer::GetRenderWindow() { return m_RenderWindow; }
vtkRenderWindowInteractor *Viewer::GetInteractor() {
return m_RenderWindow->GetInteractor();
}
vtkCameraOrientationWidget *Viewer::GetCameraWidget() { return m_CameraWidget; }
void Viewer::Reset() {
this->ZoomAuto();
m_Renderer->Render();
}
void Viewer::ZoomAuto() {
m_Renderer->ResetCameraClippingRange();
m_Renderer->ResetCamera();
}
} // namespace Vtk
} // namespace uLib