From 6b43046fb6b5258cd0584a8d6ccc9ae5154fd8eb Mon Sep 17 00:00:00 2001 From: Paolo Andreetto Date: Wed, 7 Aug 2019 10:08:13 +0000 Subject: [PATCH] Removed Pimpl in Vtk --- src/Vtk/uLibVtkViewer.cpp | 161 +++++++++++++++--------------------- src/Vtk/uLibVtkViewer.h | 20 ++++- src/Vtk/vtkContainerBox.cpp | 76 ++++++----------- src/Vtk/vtkContainerBox.h | 6 +- src/Vtk/vtkTriangleMesh.cpp | 71 ++++++---------- src/Vtk/vtkTriangleMesh.h | 8 +- src/Vtk/vtkVoxImage.cpp | 5 -- 7 files changed, 143 insertions(+), 204 deletions(-) diff --git a/src/Vtk/uLibVtkViewer.cpp b/src/Vtk/uLibVtkViewer.cpp index 0f50e5d..a6c3701 100644 --- a/src/Vtk/uLibVtkViewer.cpp +++ b/src/Vtk/uLibVtkViewer.cpp @@ -31,15 +31,11 @@ #endif #include -#include -#include #include #include -#include #include #include -#include #include #include "uLibVtkViewer.h" @@ -47,141 +43,114 @@ namespace uLib { namespace Vtk { -template <> -class Tie { -public: - void DoAction() { - std::cout << " VIEWER TIE !!! \n"; - } -}; - - -//// PIMPL ///////////////////////////////////////////////////////////////////// - -class ViewerPimpl { -public: - ViewerPimpl() : - m_RenderWindow(vtkRenderWindow::New()), - m_Renderer(vtkRenderer::New()), - m_Annotation(vtkCornerAnnotation::New()), - m_Marker(vtkOrientationMarkerWidget::New()) - { - this->InstallPipe(); - } - - ~ViewerPimpl() { - this->UninstallPipe(); - - m_Annotation->Delete(); - m_Marker->Delete(); - m_Renderer->Delete(); - m_RenderWindow->Delete(); - } - - // members // - vtkRenderer *m_Renderer; - vtkRenderWindow *m_RenderWindow; - vtkCornerAnnotation *m_Annotation; - vtkOrientationMarkerWidget *m_Marker; - -private: - void InstallPipe() - { - m_RenderWindow->AddRenderer(m_Renderer); - vtkSmartPointer renderWindowInteractor = - vtkSmartPointer::New(); - renderWindowInteractor->SetRenderWindow(m_RenderWindow); - - // 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 axes = - vtkSmartPointer::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(); - - // Must be rendered here in Vtk-6.0 or seg-fault // - m_RenderWindow->Render(); - } - - void UninstallPipe() { - m_Renderer->RemoveAllViewProps(); - m_Renderer->Clear(); - } - -}; - - - //////////////////////////////////////////////////////////////////////////////// ///// VTK VIEWER ////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -Viewer::Viewer() : d(new ViewerPimpl) {} +Viewer::Viewer() : + m_RenderWindow(vtkRenderWindow::New()), + m_Renderer(vtkRenderer::New()), + m_Annotation(vtkCornerAnnotation::New()), + m_Marker(vtkOrientationMarkerWidget::New()) +{ + InstallPipe(); +} -Viewer::~Viewer() { delete d; } +Viewer::~Viewer() +{ + UninstallPipe(); + m_Annotation->Delete(); + m_Marker->Delete(); + m_Renderer->Delete(); + m_RenderWindow->Delete(); +} + +void Viewer::InstallPipe() +{ + m_RenderWindow->AddRenderer(m_Renderer); + vtkSmartPointer renderWindowInteractor = + vtkSmartPointer::New(); + renderWindowInteractor->SetRenderWindow(m_RenderWindow); + + // 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 axes = + vtkSmartPointer::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(); + + // Must be rendered here in Vtk-6.0 or seg-fault // + m_RenderWindow->Render(); +} + +void Viewer::UninstallPipe() +{ + m_Renderer->RemoveAllViewProps(); + m_Renderer->Clear(); +} void Viewer::addProp(vtkProp *prop) { - d->m_Renderer->AddActor(prop); - d->m_Renderer->Render(); + m_Renderer->AddActor(prop); + m_Renderer->Render(); } void Viewer::RemoveProp(vtkProp *prop) { - d->m_Renderer->RemoveViewProp(prop); - d->m_Renderer->Render(); + m_Renderer->RemoveViewProp(prop); + m_Renderer->Render(); } void Viewer::AddPuppet(Puppet &prop) { - prop.ConnectRenderer(d->m_Renderer); - d->m_Renderer->Render(); + prop.ConnectRenderer(m_Renderer); + m_Renderer->Render(); } void Viewer::RemovePuppet(Puppet &prop) { - prop.DisconnectRenderer(d->m_Renderer); - d->m_Renderer->Render(); + prop.DisconnectRenderer(m_Renderer); + m_Renderer->Render(); } void Viewer::Start() { - d->m_RenderWindow->GetInteractor()->Start(); + m_RenderWindow->GetInteractor()->Start(); } vtkCornerAnnotation *Viewer::GetAnnotation() { - return d->m_Annotation; + return m_Annotation; } vtkRenderer *Viewer::GetRenderer() { - return d->m_Renderer; + return m_Renderer; } vtkRenderWindowInteractor *Viewer::GetInteractor() { - return d->m_RenderWindow->GetInteractor(); + return m_RenderWindow->GetInteractor(); } void Viewer::Reset() { - d->m_Renderer->ResetCameraClippingRange(); - d->m_Renderer->ResetCamera(); - d->m_Renderer->Render(); + m_Renderer->ResetCameraClippingRange(); + m_Renderer->ResetCamera(); + m_Renderer->Render(); } diff --git a/src/Vtk/uLibVtkViewer.h b/src/Vtk/uLibVtkViewer.h index 99f796b..ee1e0d8 100644 --- a/src/Vtk/uLibVtkViewer.h +++ b/src/Vtk/uLibVtkViewer.h @@ -31,6 +31,10 @@ #include #include "uLibVtkInterface.h" +#include +#include +#include +#include class vtkProp; class vtk3DWidget; @@ -79,10 +83,22 @@ public: void RemoveProp(vtkProp *prop); private: - class ViewerPimpl *d; + void InstallPipe(); + void UninstallPipe(); + + vtkRenderer *m_Renderer; + vtkRenderWindow *m_RenderWindow; + vtkCornerAnnotation *m_Annotation; + vtkOrientationMarkerWidget *m_Marker; }; -template <> class Tie; +template <> +class Tie { +public: + void DoAction() { + std::cout << " VIEWER TIE !!! \n"; + } +}; } // vtk diff --git a/src/Vtk/vtkContainerBox.cpp b/src/Vtk/vtkContainerBox.cpp index 43eb430..e57bb48 100644 --- a/src/Vtk/vtkContainerBox.cpp +++ b/src/Vtk/vtkContainerBox.cpp @@ -46,46 +46,20 @@ namespace uLib { namespace Vtk { -// PIMPL -------------------------------------------------------------------- // - -class vtkContainerBoxPimpl { -public: - vtkContainerBoxPimpl() : - m_Cube(vtkActor::New()), - m_Axes(vtkActor::New()), - m_Pivot(vtkActor::New()), - m_Content(NULL) - {} - - ~vtkContainerBoxPimpl() - { - m_Cube->Delete(); - m_Axes->Delete(); - m_Pivot->Delete(); - } - - // MEMBERS // - vtkActor *m_Cube; - vtkActor *m_Axes; - vtkActor *m_Pivot; - vtkContainerBox::Content *m_Content; -}; - -// -------------------------------------------------------------------------- // - - - - vtkContainerBox::vtkContainerBox(vtkContainerBox::Content &content) : - d( new vtkContainerBoxPimpl) + m_Cube(vtkActor::New()), + m_Axes(vtkActor::New()), + m_Pivot(vtkActor::New()), + m_Content(&content) { - d->m_Content = &content; this->InstallPipe(); } vtkContainerBox::~vtkContainerBox() { - delete d; + m_Cube->Delete(); + m_Axes->Delete(); + m_Pivot->Delete(); } vtkPolyData *vtkContainerBox::GetPolyData() const @@ -95,8 +69,8 @@ vtkPolyData *vtkContainerBox::GetPolyData() const void vtkContainerBox::InstallPipe() { - if(!d->m_Content) return; - Content *c = d->m_Content; + if(!m_Content) return; + Content *c = m_Content; // CUBE vtkSmartPointer cube = vtkSmartPointer::New(); @@ -113,9 +87,9 @@ void vtkContainerBox::InstallPipe() vtkSmartPointer::New(); mapper->SetInputConnection(cube->GetOutputPort()); mapper->Update(); - d->m_Cube->SetMapper(mapper); - d->m_Cube->GetProperty()->SetRepresentationToWireframe(); - d->m_Cube->GetProperty()->SetAmbient(0.7); + m_Cube->SetMapper(mapper); + m_Cube->GetProperty()->SetRepresentationToWireframe(); + m_Cube->GetProperty()->SetAmbient(0.7); // AXES // vtkSmartPointer axes = vtkSmartPointer::New(); @@ -123,12 +97,12 @@ void vtkContainerBox::InstallPipe() mapper = vtkSmartPointer::New(); mapper->SetInputConnection(axes->GetOutputPort()); mapper->Update(); - d->m_Axes->SetMapper(mapper); + m_Axes->SetMapper(mapper); Vector3f s = c->GetSize(); - // d->m_Axes->SetScale(s(0),s(1),s(2)); - d->m_Axes->GetProperty()->SetLineWidth(3); - d->m_Axes->GetProperty()->SetAmbient(0.4); - d->m_Axes->GetProperty()->SetSpecular(0); + // m_Axes->SetScale(s(0),s(1),s(2)); + m_Axes->GetProperty()->SetLineWidth(3); + m_Axes->GetProperty()->SetAmbient(0.4); + m_Axes->GetProperty()->SetSpecular(0); // PIVOT // axes = vtkSmartPointer::New(); @@ -136,16 +110,16 @@ void vtkContainerBox::InstallPipe() mapper = vtkSmartPointer::New(); mapper->SetInputConnection(axes->GetOutputPort()); mapper->Update(); - d->m_Pivot->SetMapper(mapper); + m_Pivot->SetMapper(mapper); s = c->GetScale(); - // d->m_Pivot->SetScale(s(0),s(1),s(2)); - d->m_Pivot->GetProperty()->SetLineWidth(3); - d->m_Pivot->GetProperty()->SetAmbient(0.4); - d->m_Pivot->GetProperty()->SetSpecular(0); + // m_Pivot->SetScale(s(0),s(1),s(2)); + m_Pivot->GetProperty()->SetLineWidth(3); + m_Pivot->GetProperty()->SetAmbient(0.4); + m_Pivot->GetProperty()->SetSpecular(0); - this->SetProp(d->m_Cube); - this->SetProp(d->m_Axes); - this->SetProp(d->m_Pivot); + this->SetProp(m_Cube); + this->SetProp(m_Axes); + this->SetProp(m_Pivot); } diff --git a/src/Vtk/vtkContainerBox.h b/src/Vtk/vtkContainerBox.h index 1cebf48..951f2be 100644 --- a/src/Vtk/vtkContainerBox.h +++ b/src/Vtk/vtkContainerBox.h @@ -47,8 +47,10 @@ public: private: void InstallPipe(); - friend class vtkContainerBoxPimpl; - class vtkContainerBoxPimpl *d; + vtkActor *m_Cube; + vtkActor *m_Axes; + vtkActor *m_Pivot; + vtkContainerBox::Content *m_Content; }; } // vtk diff --git a/src/Vtk/vtkTriangleMesh.cpp b/src/Vtk/vtkTriangleMesh.cpp index 4144270..e03bad6 100644 --- a/src/Vtk/vtkTriangleMesh.cpp +++ b/src/Vtk/vtkTriangleMesh.cpp @@ -48,36 +48,7 @@ namespace uLib { -class vtkTriangleMeshPimpl { -public: - vtkTriangleMeshPimpl(vtkTriangleMesh::Content &content) : - m_content(content), - m_Poly(vtkPolyData::New()), - m_Actor(vtkActor::New()) - { - vtkSmartPointer mapper = - vtkSmartPointer::New(); - mapper->SetInputConnection(m_Poly->GetProducerPort()); - m_Actor->SetMapper(mapper); - } - - ~vtkTriangleMeshPimpl() { - m_Poly->Delete(); - m_Actor->Delete(); - } - - - void vtk2uLib_update(); - void uLib2vtk_update(); - - // members // - TriangleMesh &m_content; - vtkPolyData *m_Poly; - vtkActor *m_Actor; -}; - - -void vtkTriangleMeshPimpl::vtk2uLib_update() +void vtkTriangleMesh::vtk2uLib_update() { // Assumes that Polys are Triangles !!! // vtkIdType number_of_points = m_Poly->GetNumberOfPoints(); @@ -92,7 +63,7 @@ void vtkTriangleMeshPimpl::vtk2uLib_update() - m_content.Points().resize(number_of_points); + m_content.Points().resize(number_of_points); for (int i=0; iGetPoint(i); @@ -116,7 +87,7 @@ void vtkTriangleMeshPimpl::vtk2uLib_update() m_Actor->GetMapper()->Update(); } -void vtkTriangleMeshPimpl::uLib2vtk_update() +void vtkTriangleMesh::uLib2vtk_update() { vtkIdType number_of_points = m_content.Points().size(); vtkIdType number_of_triangles = m_content.Triangles().size(); @@ -161,12 +132,20 @@ void vtkTriangleMeshPimpl::uLib2vtk_update() vtkTriangleMesh::vtkTriangleMesh(vtkTriangleMesh::Content &content) : - d(new vtkTriangleMeshPimpl(content)) -{} + m_content(content), + m_Poly(vtkPolyData::New()), + m_Actor(vtkActor::New()) +{ + vtkSmartPointer mapper = + vtkSmartPointer::New(); + mapper->SetInputConnection(m_Poly->GetProducerPort()); + m_Actor->SetMapper(mapper); +} vtkTriangleMesh::~vtkTriangleMesh() { - delete d; + m_Poly->Delete(); + m_Actor->Delete(); } void vtkTriangleMesh::ReadFromFile(const char *filename) @@ -175,8 +154,8 @@ void vtkTriangleMesh::ReadFromFile(const char *filename) vtkSmartPointer::New(); reader->SetFileName(filename); reader->Update(); - d->m_Poly->DeepCopy(reader->GetOutput()); - d->vtk2uLib_update(); + m_Poly->DeepCopy(reader->GetOutput()); + vtk2uLib_update(); } void vtkTriangleMesh::ReadFromXMLFile(const char *filename) @@ -185,8 +164,8 @@ void vtkTriangleMesh::ReadFromXMLFile(const char *filename) vtkSmartPointer::New(); reader->SetFileName(filename); reader->Update(); - d->m_Poly->DeepCopy(reader->GetOutput()); - d->vtk2uLib_update(); + m_Poly->DeepCopy(reader->GetOutput()); + vtk2uLib_update(); } void vtkTriangleMesh::ReadFromObjFile(const char *filename) @@ -195,8 +174,8 @@ void vtkTriangleMesh::ReadFromObjFile(const char *filename) vtkSmartPointer::New(); reader->SetFileName(filename); reader->Update(); - d->m_Poly->DeepCopy(reader->GetOutput()); - d->vtk2uLib_update(); + m_Poly->DeepCopy(reader->GetOutput()); + vtk2uLib_update(); } void vtkTriangleMesh::ReadFromStlFile(const char *filename) @@ -205,23 +184,23 @@ void vtkTriangleMesh::ReadFromStlFile(const char *filename) vtkSmartPointer::New(); reader->SetFileName(filename); reader->Update(); - d->m_Poly->DeepCopy(reader->GetOutput()); - d->vtk2uLib_update(); + m_Poly->DeepCopy(reader->GetOutput()); + vtk2uLib_update(); } vtkProp *vtkTriangleMesh::GetProp() { - return d->m_Actor; + return m_Actor; } vtkPolyData *vtkTriangleMesh::GetPolyData() const { - return d->m_Poly; + return m_Poly; } void vtkTriangleMesh::Update() { - d->uLib2vtk_update(); + uLib2vtk_update(); } } diff --git a/src/Vtk/vtkTriangleMesh.h b/src/Vtk/vtkTriangleMesh.h index d0a1038..53da896 100644 --- a/src/Vtk/vtkTriangleMesh.h +++ b/src/Vtk/vtkTriangleMesh.h @@ -58,8 +58,12 @@ public: void Update(); private: - friend class vtkTriangleMeshPimpl; - class vtkTriangleMeshPimpl *d; + void vtk2uLib_update(); + void uLib2vtk_update(); + + TriangleMesh &m_content; + vtkPolyData *m_Poly; + vtkActor *m_Actor; }; diff --git a/src/Vtk/vtkVoxImage.cpp b/src/Vtk/vtkVoxImage.cpp index 4c6f134..aad7465 100644 --- a/src/Vtk/vtkVoxImage.cpp +++ b/src/Vtk/vtkVoxImage.cpp @@ -31,16 +31,12 @@ #include -#include -#include #include #include #include #include -#include -#include #include #include @@ -51,7 +47,6 @@ #include #include -#include #include