Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
1 result

triangulate.cpp

Blame
  • triangulate.cpp 1.34 KiB
    #include <vtkTriangleFilter.h>
    #include "triangulate.h"
    
    vtkSmartPointer<vtkPolyData> triangulate::buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData)
    {
        vtkSmartPointer<vtkPolyData> triPolyData = vtkSmartPointer<vtkPolyData>::New();
    
        // if mesh is composed of quads, builds a valid triangulation
        if (polyData->GetMaxCellSize() == 4)
        {
            // we're using a vtkQuadToTriangle filter to convert quads in triangles
            vtkSmartPointer<vtkTriangleFilter> quadToTri = vtkSmartPointer<vtkTriangleFilter>::New();
            quadToTri->SetInputData(polyData);
            quadToTri->Update();
    
            triPolyData = quadToTri->GetOutput();
        }
        else if (polyData->GetMaxCellSize() == 3) // if mesh is already triangulated, return origin's vtkPolyData
        {
            triPolyData = polyData;
        }
        else
        {
            std::cout << "This mesh is not handled by this program, allows only triangulated and quadrilated meshes.\n";
            std::cout << "Maximum cell size for this mesh: " << polyData->GetMaxCellSize() << ".\n";
            exit(0);
        }
        // adding a vtkTriangleFilter to ensure that the output is a well triangulated mesh
        vtkSmartPointer<vtkTriangleFilter> triangleFilter = vtkSmartPointer<vtkTriangleFilter>::New();
        triangleFilter->SetInputData(triPolyData);
        triangleFilter->Update();
    
        return triangleFilter->GetOutput();
    }