fix segfault

This commit is contained in:
AndreaRigoni
2026-03-17 15:47:27 +00:00
parent e6e0bccffb
commit bc437a3913
2 changed files with 19 additions and 29 deletions

View File

@@ -1,36 +1,29 @@
#include "vtkViewport.h" #include "vtkViewport.h"
#include <vtkAxes.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 <vtkPlaneSource.h>
#include <vtkRenderWindow.h> #include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h> #include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkNew.h> #include <vtkNew.h>
#include <vtkTextProperty.h> #include <vtkTextProperty.h>
#include <vtkPolyDataMapper.h> #include <vtkPolyDataMapper.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h> #include <vtkProperty.h>
#include <vtkCallbackCommand.h> #include <vtkCallbackCommand.h>
#include <vtkMath.h> #include <vtkMath.h>
#include <vtkActor.h>
#include <cmath> #include <cmath>
namespace uLib { namespace uLib {
namespace Vtk { namespace Vtk {
Viewport::Viewport() Viewport::Viewport()
: m_Renderer(vtkRenderer::New()) : m_Renderer(vtkSmartPointer<vtkRenderer>::New())
, m_Annotation(vtkCornerAnnotation::New()) , m_Annotation(vtkSmartPointer<vtkCornerAnnotation>::New())
, m_Marker(vtkOrientationMarkerWidget::New()) , m_Marker(vtkSmartPointer<vtkOrientationMarkerWidget>::New())
, m_CameraWidget(nullptr) , m_CameraWidget(nullptr)
, m_Colors(vtkNamedColors::New()) , m_Colors(vtkSmartPointer<vtkNamedColors>::New())
{ {
} }
@@ -38,14 +31,7 @@ Viewport::~Viewport()
{ {
if (m_Renderer) { if (m_Renderer) {
m_Renderer->RemoveAllViewProps(); m_Renderer->RemoveAllViewProps();
m_Renderer->Clear();
} }
if (m_Annotation) m_Annotation->Delete();
if (m_Marker) m_Marker->Delete();
if (m_CameraWidget) m_CameraWidget->Delete();
if (m_Renderer) m_Renderer->Delete();
if (m_Colors) m_Colors->Delete();
} }
void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren) void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
@@ -112,7 +98,7 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
// Camera-orientation widget (VTK >= 9) // Camera-orientation widget (VTK >= 9)
#if VTK_MAJOR_VERSION >= 9 #if VTK_MAJOR_VERSION >= 9
m_CameraWidget = vtkCameraOrientationWidget::New(); m_CameraWidget = vtkSmartPointer<vtkCameraOrientationWidget>::New();
m_CameraWidget->SetParentRenderer(m_Renderer); m_CameraWidget->SetParentRenderer(m_Renderer);
m_CameraWidget->SetInteractor(iren); m_CameraWidget->SetInteractor(iren);
m_CameraWidget->On(); m_CameraWidget->On();

View File

@@ -7,16 +7,20 @@
#include <vtkRenderer.h> #include <vtkRenderer.h>
#include <vtkSmartPointer.h> #include <vtkSmartPointer.h>
#include <vtkVersion.h> #include <vtkVersion.h>
#include <vtkRenderer.h>
#include <vtkCornerAnnotation.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkCameraOrientationWidget.h>
#include <vtkNamedColors.h>
#include <vtkAxes.h>
#include <vtkAxesActor.h>
#include <vtkPlaneSource.h>
#include <vtkActor.h>
class vtkAxes;
class vtkProp; class vtkProp;
class vtk3DWidget; class vtk3DWidget;
class vtkRenderWindow; class vtkRenderWindow;
class vtkRenderWindowInteractor; class vtkRenderWindowInteractor;
class vtkCameraOrientationWidget;
class vtkPlaneSource;
class vtkActor;
class vtkNamedColors;
class vtkCamera; class vtkCamera;
namespace uLib { namespace uLib {
@@ -57,17 +61,17 @@ protected:
void UpdateGrid(); void UpdateGrid();
vtkRenderer* m_Renderer; vtkSmartPointer<vtkRenderer> m_Renderer;
vtkCornerAnnotation* m_Annotation; vtkSmartPointer<vtkCornerAnnotation> m_Annotation;
vtkOrientationMarkerWidget* m_Marker; vtkSmartPointer<vtkOrientationMarkerWidget> m_Marker;
vtkCameraOrientationWidget* m_CameraWidget; vtkSmartPointer<vtkCameraOrientationWidget> m_CameraWidget;
vtkSmartPointer<vtkPlaneSource> m_GridSource; vtkSmartPointer<vtkPlaneSource> m_GridSource;
vtkSmartPointer<vtkActor> m_GridActor; vtkSmartPointer<vtkActor> m_GridActor;
vtkSmartPointer<vtkAxes> m_OriginAxes; vtkSmartPointer<vtkAxes> m_OriginAxes;
vtkSmartPointer<vtkActor> m_OriginAxesActor; vtkSmartPointer<vtkActor> m_OriginAxesActor;
vtkNamedColors* m_Colors; vtkSmartPointer<vtkNamedColors> m_Colors;
}; };
} // namespace Vtk } // namespace Vtk