Blender V4.3
rb_convex_hull_api.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2020 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#include "RBI_hull_api.h"
11
12plConvexHull plConvexHullCompute(float (*coords)[3], int count)
13{
15 computer->compute(reinterpret_cast<float *>(coords), sizeof(*coords), count, 0, 0);
16 return reinterpret_cast<plConvexHull>(computer);
17}
18
20{
21 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
22 delete computer;
23}
24
26{
27 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
28 return computer->vertices.size();
29}
30
32{
33 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
34 return computer->edges.size();
35}
36
38{
39 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
40 return computer->faces.size();
41}
42
43void plConvexHullGetVertex(plConvexHull hull, int n, float coords[3], int *original_index)
44{
45 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
46 const btVector3 &v(computer->vertices[n]);
47 coords[0] = v[0];
48 coords[1] = v[1];
49 coords[2] = v[2];
50 (*original_index) = computer->original_vertex_index[n];
51}
52
53void plConvexHullGetLoop(plConvexHull hull, int n, int *v_from, int *v_to)
54{
55 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
56 (*v_from) = computer->edges[n].getSourceVertex();
57 (*v_to) = computer->edges[n].getTargetVertex();
58}
59
61{
62 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
63 return computer->edges[n].getReverseEdge() - &computer->edges[0];
64}
65
67{
68 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
69 const btConvexHullComputer::Edge *e_orig, *e;
70 int count;
71
72 for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
73 count == 0 || e != e_orig;
74 e = e->getNextEdgeOfFace(), count++)
75 {
76 ;
77 }
78 return count;
79}
80
81void plConvexHullGetFaceLoops(plConvexHull hull, int n, int *loops)
82{
83 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
84 const btConvexHullComputer::Edge *e_orig, *e;
85 int count;
86
87 for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
88 count == 0 || e != e_orig;
89 e = e->getNextEdgeOfFace(), count++)
90 {
91 loops[count] = e - &computer->edges[0];
92 }
93}
94
95void plConvexHullGetFaceVertices(plConvexHull hull, int n, int *vertices)
96{
97 btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
98 const btConvexHullComputer::Edge *e_orig, *e;
99 int count;
100
101 for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
102 count == 0 || e != e_orig;
103 e = e->getNextEdgeOfFace(), count++)
104 {
105 vertices[count] = e->getTargetVertex();
106 }
107}
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
btAlignedObjectArray< btVector3 > vertices
btAlignedObjectArray< int > original_vertex_index
btAlignedObjectArray< int > faces
btAlignedObjectArray< Edge > edges
int count
int plConvexHullGetFaceSize(plConvexHull hull, int n)
int plConvexHullNumLoops(plConvexHull hull)
void plConvexHullGetVertex(plConvexHull hull, int n, float coords[3], int *original_index)
void plConvexHullGetLoop(plConvexHull hull, int n, int *v_from, int *v_to)
int plConvexHullNumVertices(plConvexHull hull)
int plConvexHullGetReversedLoopIndex(plConvexHull hull, int n)
plConvexHull plConvexHullCompute(float(*coords)[3], int count)
void plConvexHullDelete(plConvexHull hull)
void plConvexHullGetFaceLoops(plConvexHull hull, int n, int *loops)
int plConvexHullNumFaces(plConvexHull hull)
void plConvexHullGetFaceVertices(plConvexHull hull, int n, int *vertices)