diff --git a/CMakeLists.txt b/CMakeLists.txt index b02cc5f987538c917e7339b21aef2cfb67bea464..9d8c7e8b160819fdf336fe331b83957e3a8bf21f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 11) find_package(TTKVTK REQUIRED) -add_executable(projet-stage main.cpp isTriangulate.cpp) +add_executable(projet-stage main.cpp triangulate.cpp) target_link_libraries(projet-stage PUBLIC diff --git a/isTriangulate.cpp b/isTriangulate.cpp deleted file mode 100644 index 9e0a153a297f617b0b578a3bdf2705ddbde2ed46..0000000000000000000000000000000000000000 --- a/isTriangulate.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include <vtkTriangleFilter.h> -#include "isTriangulate.h" - -// Fonction pour construire une triangulation valide à partir d'un vtkPolyData contenant des quadrilatères -vtkSmartPointer<vtkPolyData> triangulate::buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData) -{ - vtkSmartPointer<vtkPolyData> triPolyData = vtkSmartPointer<vtkPolyData>::New(); - - // Si le maillage en entrée est composé de quadrilatères, on construit une triangulation valide - if (polyData->GetMaxCellSize() > 3) - { - std::cout << "maillage composé de quads"; - // On utilise un filtre vtkQuadToTriangle pour convertir les quadrilatères en triangles - vtkSmartPointer<vtkTriangleFilter> quadToTri = vtkSmartPointer<vtkTriangleFilter>::New(); - quadToTri->SetInputData(polyData); - quadToTri->Update(); - - triPolyData = quadToTri->GetOutput(); - } - else if (polyData->GetMaxCellSize() == 3) // Si le maillage en entrée est déjà triangulé, on renvoie le vtkPolyData d'origine - { - triPolyData = polyData; - } - else - { - std::cout << "Ce maillage n'est pas géré par ce programme, sont acceptés les maillages triangulés et quadrilatérisés"; - } - - // On ajoute un filtre vtkTriangleFilter pour garantir que la sortie est bien un maillage triangulé - vtkSmartPointer<vtkTriangleFilter> triangleFilter = vtkSmartPointer<vtkTriangleFilter>::New(); - triangleFilter->SetInputData(triPolyData); - triangleFilter->Update(); - - return triangleFilter->GetOutput(); -} \ No newline at end of file diff --git a/isTriangulate.h b/isTriangulate.h deleted file mode 100644 index 0c25de8e766454d17bba159d95f54888efb07552..0000000000000000000000000000000000000000 --- a/isTriangulate.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef IS_TRIANGULATE_H // Vérification d'inclusion multiple -#define IS_TRIANGULATE_H - -namespace triangulate -{ - vtkSmartPointer<vtkPolyData> buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData); // Prototype de la fonction -} - -#endif // Fin de vérification d'inclusion multiple diff --git a/main.cpp b/main.cpp index 057a5371a996aa16ab22b4041c30677f535e1747..0ebd7042f13b155f88ea3dec11a9429d69ae7948 100644 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,20 @@ +/**========================================================================= +* @file main.cpp +* +* @brief This script reads mesh files and translate them in VTKPolyData. +* It calculates the main curvature of the mesh, then the shape index in +* each vertex of the mesh. Generates a Reeb's graph of shape index. +* Finally, it writes the graph in .vtp format and colors the map with +* the shape index of mesh. +* +* @authors Lucie CLERAND, Eve REGA +* Astrid BEYER +* +* @date 2023 +* @version 1.0.1 +* +=========================================================================**/ + #include <vtkNew.h> #include <vtkSmartPointer.h> #include <vtkOBJReader.h> @@ -38,10 +55,11 @@ #include <vtkAppendPolyData.h> #include <vtkSortDataArray.h> -#include "isTriangulate.h" +#include "triangulate.h" int main(int argc, char *argv[]) { + vtkObject::GlobalWarningDisplayOff(); if (argc != 2) { std::cout << "Required arguments: Filename(.obj)" << std::endl; @@ -60,7 +78,6 @@ int main(int argc, char *argv[]) vtkNew<vtkOBJReader> reader; reader->SetFileName(filename.c_str()); reader->Update(); - source = triangulate::buildValidTriangulation(reader->GetOutput()); } else diff --git a/triangulate.cpp b/triangulate.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d985f360735a19056d7daf24b88c25f3cde3947d --- /dev/null +++ b/triangulate.cpp @@ -0,0 +1,34 @@ +#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(); +} \ No newline at end of file diff --git a/triangulate.h b/triangulate.h new file mode 100644 index 0000000000000000000000000000000000000000..f873fbfe4c2cdad71d5c9947ed59a6238c2c76d9 --- /dev/null +++ b/triangulate.h @@ -0,0 +1,23 @@ +/** + * @class triangulate + * + * @author Astrid BEYER + * @date 2023 + * @version 1.1 + * + */ + +#ifndef TRIANGULATE_H +#define TRIANGULATE_H + +namespace triangulate +{ + /** + * @brief buildValidTriangulation : transforms, if necessary, input's polyData so it ensure it's triangulated + * @param polyData + * @returns vtkSmartPointer<vtkPolyData> + */ + vtkSmartPointer<vtkPolyData> buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData); +} + +#endif