Select Git revision
triangulate.cpp
-
Astrid Beyer authoredAstrid Beyer authored
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();
}