diff options
Diffstat (limited to 'intern/rigidbody/rb_convex_hull_api.cpp')
-rw-r--r-- | intern/rigidbody/rb_convex_hull_api.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/intern/rigidbody/rb_convex_hull_api.cpp b/intern/rigidbody/rb_convex_hull_api.cpp index c5893a4c808..03e7580a12b 100644 --- a/intern/rigidbody/rb_convex_hull_api.cpp +++ b/intern/rigidbody/rb_convex_hull_api.cpp @@ -39,6 +39,12 @@ int plConvexHullNumVertices(plConvexHull hull) return computer->vertices.size(); } +int plConvexHullNumLoops(plConvexHull hull) +{ + btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); + return computer->edges.size(); +} + int plConvexHullNumFaces(plConvexHull hull) { btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); @@ -55,6 +61,19 @@ void plConvexHullGetVertex(plConvexHull hull, int n, float coords[3], int *origi (*original_index) = computer->original_vertex_index[n]; } +void plConvexHullGetLoop(plConvexHull hull, int n, int *v_from, int *v_to) +{ + btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); + (*v_from) = computer->edges[n].getSourceVertex(); + (*v_to) = computer->edges[n].getTargetVertex(); +} + +int plConvexHullGetReversedLoopIndex(plConvexHull hull, int n) +{ + btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); + return computer->edges[n].getReverseEdge() - &computer->edges[0]; +} + int plConvexHullGetFaceSize(plConvexHull hull, int n) { btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); @@ -69,6 +88,19 @@ int plConvexHullGetFaceSize(plConvexHull hull, int n) return count; } +void plConvexHullGetFaceLoops(plConvexHull hull, int n, int *loops) +{ + btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); + const btConvexHullComputer::Edge *e_orig, *e; + int count; + + for (e_orig = &computer->edges[computer->faces[n]], e = e_orig, count = 0; + count == 0 || e != e_orig; + e = e->getNextEdgeOfFace(), count++) { + loops[count] = e - &computer->edges[0]; + } +} + void plConvexHullGetFaceVertices(plConvexHull hull, int n, int *vertices) { btConvexHullComputer *computer(reinterpret_cast<btConvexHullComputer *>(hull)); |