#ifndef __FVM_TRIANGULATE_H__ #define __FVM_TRIANGULATE_H__ /*============================================================================ * Triangulation of a polygon *============================================================================*/ /* This file is part of the "Finite Volume Mesh" library, intended to provide finite volume mesh and associated fields I/O and manipulation services. Copyright (C) 2005-2006 EDF This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*---------------------------------------------------------------------------- * Local headers *----------------------------------------------------------------------------*/ #include /*----------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #if 0 } /* Fake brace to force back Emacs auto-indentation back to column 0 */ #endif #endif /* __cplusplus */ /*============================================================================= * Macro definitions *============================================================================*/ /*============================================================================ * Type definitions *============================================================================*/ /* * Pointer to structure maintaining the state of the current triangulation; * the structure itself is private. */ typedef struct _fvm_triangulate_state_t fvm_triangulate_state_t; /*============================================================================= * Static global variables *============================================================================*/ /*============================================================================= * Public function prototypes *============================================================================*/ /*---------------------------------------------------------------------------- * Create a structure necessary to the polygon triangulation algorithm. * * parameters: * n_vertices_max <-- maximum expected number of vertices per polygon. * * returns: * pointer to polygon triangulation state structure. *----------------------------------------------------------------------------*/ fvm_triangulate_state_t * fvm_triangulate_state_create(const int n_vertices_max); /*---------------------------------------------------------------------------- * Destroy a structure necessary to the polygon triangulation algorithm. * * parameters: * this_state <-> pointer to structure that should be destroyed. * * returns: * NULL pointer. *----------------------------------------------------------------------------*/ fvm_triangulate_state_t * fvm_triangulate_state_destroy(fvm_triangulate_state_t *this_state); /*---------------------------------------------------------------------------- * Triangulate a polygonal face. * * For a polygon with n vertices, we should obtain a triangluation with * (n-2) triangles and (2n-3) edges. If the polygon_vertices argument * is NULL, 1, 2, ...,n local numbering is implied. * * parameters: * dim <-- spatial dimension (2 or 3). * n_vertices <-- number of vertices defining the polygon. * coords <-- coordinates of the triangulation's vertices. * parent_vertex_num <-- optional indirection to vertex coordinates (1 to n). * polygon_vertices <-- polygon connectivity; size: n_vertices or empty. * triangle_vertices --> triangles connectivity; * size: (n_vertices - 2) * 3. * state <-> associated triangulation state structure. * * returns: * number of resulting triangles. *----------------------------------------------------------------------------*/ int fvm_triangulate_polygon(const int dim, const int n_vertices, const fvm_coord_t coords[], const fvm_lnum_t parent_vertex_num[], const fvm_lnum_t polygon_vertices[], fvm_lnum_t triangle_vertices[], fvm_triangulate_state_t *const state); /*----------------------------------------------------------------------------*/ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __FVM_TRIANGULATE_H__ */