The algorithm needs a initial triangulation as input, any triangulations will work, in the following Figure the example of a Planar Straigh Line Graph (PSLG) with holes (left image), triangulizated (middle image) to generate a Polylla mesh (right image).
The algorithm supports two file formats as input, the output is an .off file and an .ale file use for the VEM.
The project is configured to automatically compile for CUDA Compute Capability 7.0 (Volta architecture and newer GPUs with Tensor Cores). Simply compile as:
cd build
cmake ..
makeNote: The CMakeLists.txt is preconfigured with CMAKE_CUDA_ARCHITECTURES=70, so no additional flags are needed. This ensures compatibility with GPUs that support Tensor Cores (GTX 1660+, RTX series, Tesla V100, A100, etc.).
The program supports three input modes:
Triangulation is represented as a .node file with the nodes of the triangulations and the boundary marker, .ele file with the triangles of the triangulations and a .neigh file with the adjacencies of each triangle.
./GPolylla -n <input.node> <input.ele> <input.neigh> <output_name>Example to generate pikachu:
./GPolylla -n ./data/pikachu.1.node ./data/pikachu.1.ele ./data/pikachu.1.neigh pikachu_output./GPolylla -o <input.off> <output_name>Example:
./GPolylla -o ./data/pikachu.1.off pikachu_output./Polylla <input .off> <output filename>
Each execution generates two output files:
<output_name>.off- Polygonal mesh in OFF format<output_name>.json- Statistics and performance metrics
Note shape of the polygon depend on the initital triangulation, in the folowing Figure there is a example of a disk generate with a Delaunay Triangulation with random points (left image) vs a refined Delaunay triangulation with semi uniform points (right image).
Scripts made to facilizate the process of test the algorithm:
-
(in build folder) To generate random points, an initital triangulation and a poylla mesh
./generatemesh.sh <number of vertices of triangulation> -
(in build folder) To generate mesh from files .node, .ele, .neigh with the same name
./generatefromfile.sh <filename> <output name>./generatefromfile.sh pikachu.1 out
Triangulazitation are generated with triangle with the command -zn.
- Line 45 of plotting depends on a transpose, store edges directly as the transpose of edge vectors and remove it.
- Define an input and output folder scripts
- Define -n in plot_triangulation.py to avoid label edges and vertices
- Change name plot_triangulation.py to plot_mesh.py
- Travel phase does not work with over big meshes (10^7)
- Add high float point precision edge lenght comparision
- POSIBLE BUG: el algoritmo no viaja por todos los halfedges dentro de un poligono en la travel phase, por lo que pueden haber semillas que no se borren y tener poligonos repetidos de output
- Add arbitrary precision arithmetic in the label phase
- Add frontier-edge addition to constrained segmend and refinement (agregar método que dividida un polygono dado una arista especifica)
- hacer la función distance parte de cada halfedge y cambiar el ciclo por 3 comparaciones.
- Add way to store polygons.
- iterador de polygono
- Vector con los poligonos de malla
- Método para imprimir SVG
- Copy constructor
- half-edge constructor
- Change by triangle bitvector by triangle list
- Remove distance edge
- edge_iterator;
- face_iterator;
- vertex_iterator;
- copy constructor;
- constructor indepent of triangle (any off file now works)
- default constructor
- definir mejor cuáles variables son unsigned int y cuáles no
- Change by triangle bitvector by triangle list
- Calculate distante edge
- Read node files with commentaries
- change to std::size_t to int
- change operator [] by .at()
- add #ifndef ALL_H_FILES #define ALL_H_FILES #endif to being and end header
- add google tests
- Add google benchmark
- Add how generate mesh from OFF file
- Add images that show how the initial trangulization changes the output
- Add the triangulation of the disks
- Hacer el readme más explicativo
- Add example meshes
- Add .gitignore
- Poner en inglés uwu









