0
0
forked from blender/blender
blender/intern/dualcon/dualcon.h
Campbell Barton e955c94ed3 License Headers: Set copyright to "Blender Authors", add AUTHORS
Listing the "Blender Foundation" as copyright holder implied the Blender
Foundation holds copyright to files which may include work from many
developers.

While keeping copyright on headers makes sense for isolated libraries,
Blender's own code may be refactored or moved between files in a way
that makes the per file copyright holders less meaningful.

Copyright references to the "Blender Foundation" have been replaced with
"Blender Authors", with the exception of `./extern/` since these this
contains libraries which are more isolated, any changed to license
headers there can be handled on a case-by-case basis.

Some directories in `./intern/` have also been excluded:

- `./intern/cycles/` it's own `AUTHORS` file is planned.
- `./intern/opensubdiv/`.

An "AUTHORS" file has been added, using the chromium projects authors
file as a template.

Design task: #110784

Ref !110783.
2023-08-16 00:20:26 +10:00

88 lines
2.1 KiB
C++

/* SPDX-FileCopyrightText: 2011-2022 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#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__ */