Blender  V3.3
rb_convex_hull_api.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2020 Blender Foundation. All rights reserved. */
3 
9 #include "RBI_hull_api.h"
10 
11 plConvexHull plConvexHullCompute(float (*coords)[3], int count)
12 {
14  computer->compute(reinterpret_cast<float *>(coords), sizeof(*coords), count, 0, 0);
15  return reinterpret_cast<plConvexHull>(computer);
16 }
17 
19 {
20  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
21  delete computer;
22 }
23 
25 {
26  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
27  return computer->vertices.size();
28 }
29 
31 {
32  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
33  return computer->edges.size();
34 }
35 
37 {
38  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
39  return computer->faces.size();
40 }
41 
42 void plConvexHullGetVertex(plConvexHull hull, int n, float coords[3], int *original_index)
43 {
44  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
45  const btVector3 &v(computer->vertices[n]);
46  coords[0] = v[0];
47  coords[1] = v[1];
48  coords[2] = v[2];
49  (*original_index) = computer->original_vertex_index[n];
50 }
51 
52 void plConvexHullGetLoop(plConvexHull hull, int n, int *v_from, int *v_to)
53 {
54  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
55  (*v_from) = computer->edges[n].getSourceVertex();
56  (*v_to) = computer->edges[n].getTargetVertex();
57 }
58 
60 {
61  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
62  return computer->edges[n].getReverseEdge() - &computer->edges[0];
63 }
64 
66 {
67  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
68  const btConvexHullComputer::Edge *e_orig, *e;
69  int count;
70 
71  for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
72  count == 0 || e != e_orig;
73  e = e->getNextEdgeOfFace(), count++) {
74  ;
75  }
76  return count;
77 }
78 
79 void plConvexHullGetFaceLoops(plConvexHull hull, int n, int *loops)
80 {
81  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
82  const btConvexHullComputer::Edge *e_orig, *e;
83  int count;
84 
85  for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
86  count == 0 || e != e_orig;
87  e = e->getNextEdgeOfFace(), count++) {
88  loops[count] = e - &computer->edges[0];
89  }
90 }
91 
92 void plConvexHullGetFaceVertices(plConvexHull hull, int n, int *vertices)
93 {
94  btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull));
95  const btConvexHullComputer::Edge *e_orig, *e;
96  int count;
97 
98  for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0;
99  count == 0 || e != e_orig;
100  e = e->getNextEdgeOfFace(), count++) {
101  vertices[count] = e->getTargetVertex();
102  }
103 }
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
Definition: btVector3.h:82
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)