123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- #ifndef __DUALCON_H__
- #define __DUALCON_H__
- #ifdef WITH_CXX_GUARDEDALLOC
- # include "MEM_guardedalloc.h"
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef float (*DualConCo)[3];
- typedef unsigned int (*DualConTri)[3];
- typedef unsigned int(*DualConLoop);
- typedef struct DualConInput {
- DualConLoop mloop;
- DualConCo co;
- int co_stride;
- int totco;
- DualConTri looptri;
- int tri_stride;
- int tottri;
- int loop_stride;
- float min[3], max[3];
- } DualConInput;
- /* callback for allocating memory for output */
- typedef void *(*DualConAllocOutput)(int totvert, int totquad);
- /* callback for adding a new vertex to the output */
- typedef void (*DualConAddVert)(void *output, const float co[3]);
- /* callback for adding a new quad to the output */
- typedef void (*DualConAddQuad)(void *output, const int vert_indices[4]);
- typedef enum {
- DUALCON_FLOOD_FILL = 1,
- } DualConFlags;
- typedef enum {
- /* blocky */
- DUALCON_CENTROID,
- /* smooth */
- DUALCON_MASS_POINT,
- /* keeps sharp edges */
- DUALCON_SHARP_FEATURES,
- } DualConMode;
- /* Usage:
- *
- * The three callback arguments are used for creating the output
- * mesh. The alloc_output callback takes the total number of vertices
- * and faces (quads) that will be in the output. It should allocate
- * and return a structure to hold the output mesh. The add_vert and
- * add_quad callbacks will then be called for each new vertex and
- * quad, and the callback should add the new mesh elements to the
- * structure.
- */
- void *dualcon(const DualConInput *input_mesh,
- /* callbacks for output */
- DualConAllocOutput alloc_output,
- DualConAddVert add_vert,
- DualConAddQuad add_quad,
- /* flags and settings to control the remeshing
- * algorithm */
- DualConFlags flags,
- DualConMode mode,
- float threshold,
- float hermite_num,
- float scale,
- int depth);
- #ifdef __cplusplus
- }
- #endif
- #endif /* __DUALCON_H__ */
|