14static void veccopy(
float dst[3],
const float src[3])
21#define GET_TRI(_mesh, _n) \
22 (*(DualConTri)(((char *)(_mesh)->corner_tris) + ((_n) * (_mesh)->tri_stride)))
24#define GET_CO(_mesh, _n) (*(DualConCo)(((char *)(_mesh)->co) + ((_n) * (_mesh)->co_stride)))
26#define GET_CORNER_VERT(_mesh, _n) \
27 (*(DualConCornerVerts)(((char *)(_mesh)->corner_verts) + ((_n) * (_mesh)->corner_verts_stride)))
33 float min[3], max[3], maxsize;
46 tottri = input_mesh->tottri;
52 for (
int i = 0;
i < 3;
i++) {
53 float d = max[
i] - min[
i];
54 maxsize = std::max(d, maxsize);
58 for (
int i = 0;
i < 3;
i++) {
59 min[
i] = (max[
i] + min[
i]) / 2 - maxsize / 2;
60 max[
i] = (max[
i] + min[
i]) / 2 + maxsize / 2;
63 for (
int i = 0;
i < 3;
i++) {
64 min[
i] -= maxsize * (1 / scale - 1) / 2;
71 if (curtri == input_mesh->tottri) {
77 const unsigned int *tr =
GET_TRI(input_mesh, curtri);
85 for (
int i = 0;
i < 3;
i++) {
86 const float *co = t->
vt[
i];
87 if (std::isnan(co[0]) || std::isnan(co[1]) || std::isnan(co[2])) {
98 if (curtri == input_mesh->tottri) {
102 const unsigned int *tr =
GET_TRI(input_mesh, curtri);
119 return input_mesh->totco;
141 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:DualConInputReader")
158 Octree o(&r, alloc_output, add_vert, add_quad, flags, mode, depth, threshold, hermite_num);
ModelReader()=default
Constructor.
void(* DualConAddQuad)(void *output, const int vert_indices[4])
void(* DualConAddVert)(void *output, const float co[3])
void *(* DualConAllocOutput)(int totvert, int totquad)
void * dualcon(const DualConInput *input_mesh, DualConAllocOutput alloc_output, DualConAddVert add_vert, DualConAddQuad add_quad, DualConFlags flags, DualConMode mode, float threshold, float hermite_num, float scale, int depth)
static void veccopy(float dst[3], const float src[3])
#define GET_CO(_mesh, _n)
#define GET_CORNER_VERT(_mesh, _n)
#define GET_TRI(_mesh, _n)