29 #include <console_bridge/console.h>
30 #include <LinearMath/btConvexHullComputer.h>
38 Eigen::VectorXi& faces,
45 btConvexHullComputer conv;
46 std::vector<double> points;
47 points.reserve(input.size() * 3);
48 for (
const auto& v : input)
50 points.push_back(v[0]);
51 points.push_back(v[1]);
52 points.push_back(v[2]);
55 btScalar val = conv.compute(points.data(),
57 static_cast<int>(input.size()),
58 static_cast<btScalar
>(shrink),
59 static_cast<btScalar
>(shrinkClamp));
62 CONSOLE_BRIDGE_logError(
"Failed to create convex hull");
66 int num_verts = conv.vertices.size();
67 vertices.reserve(
static_cast<size_t>(num_verts));
68 for (
int i = 0; i < num_verts; i++)
70 btVector3& v = conv.vertices[i];
71 vertices.emplace_back(
static_cast<double>(v.getX()),
static_cast<double>(v.getY()),
static_cast<double>(v.getZ()));
74 auto num_faces =
static_cast<size_t>(conv.faces.size());
75 std::vector<int> local_faces;
76 local_faces.reserve(3UL * num_faces);
77 for (
int i = 0; i < conv.faces.size(); i++)
79 std::vector<int> face;
82 const btConvexHullComputer::Edge* sourceEdge = &(conv.edges[conv.faces[i]]);
83 int a = sourceEdge->getSourceVertex();
86 int b = sourceEdge->getTargetVertex();
89 const btConvexHullComputer::Edge* edge = sourceEdge->getNextEdgeOfFace();
90 int c = edge->getTargetVertex();
93 edge = edge->getNextEdgeOfFace();
94 c = edge->getTargetVertex();
99 edge = edge->getNextEdgeOfFace();
100 c = edge->getTargetVertex();
102 local_faces.push_back(
static_cast<int>(face.size()));
103 local_faces.insert(local_faces.end(), face.begin(), face.end());
106 faces.resize(
static_cast<long>(local_faces.size()));
107 for (
size_t i = 0; i < local_faces.size(); ++i)
108 faces[
static_cast<long>(i)] = local_faces[i];
110 return conv.faces.size();
115 std::shared_ptr<tesseract_common::VectorVector3d> ch_vertices = std::make_shared<tesseract_common::VectorVector3d>();
116 std::shared_ptr<Eigen::VectorXi> ch_faces = std::make_shared<Eigen::VectorXi>();
118 auto convex_mesh = std::make_shared<tesseract_geometry::ConvexMesh>(