2 #ifndef GEOMETRY_CONVEXHULL3D_H 3 #define GEOMETRY_CONVEXHULL3D_H 5 #include <KrisLibrary/utils/AnyValue.h> 7 #include <KrisLibrary/math/vector.h> 9 #include <KrisLibrary/math3d/AABB3D.h> 10 #include <KrisLibrary/math3d/Box3D.h> 11 #include <KrisLibrary/math3d/geometry3d.h> 12 #include <KrisLibrary/utils/IntTriple.h> 21 typedef struct DT_ShapeHandle__* DT_ShapeHandle;
22 typedef struct DT_ObjectHandle__* DT_ObjectHandle;
36 bool ConvexHull3D_Qhull(
const std::vector<Vector3>& points,std::vector<std::vector<int> >& facets);
37 bool ConvexHull3D_Qhull(
const std::vector<double>& points,std::vector<std::vector<int> >& facets);
47 bool ConvexHull3D_Qhull(
const std::vector<Vector3>& points,std::vector<IntTriple>& tris);
65 typedef std::vector<double> PolytopeData;
67 typedef std::pair<ConvexHull3D, ConvexHull3D> MinkowskiData;
68 typedef std::pair<ConvexHull3D, RigidTransform> TransData;
69 typedef std::pair<ConvexHull3D, ConvexHull3D> HullData;
76 enum Type { Empty, Polytope, Box, Cone, Cylinder, Sphere, Point, Line, Minkowski, Trans, Hull};
78 void SetPoint(
const Vector3& a);
79 void SetPoints(
const Vector& a);
80 void SetPoints(
const std::vector<double>& a);
81 void SetPoints(
const std::vector<Vector3> & a);
82 void SetPoints(
const std::vector<Vector> & a);
86 bool Contains(
const Vector3& pt);
91 std::tuple<Real, Vector3, Vector3> ClosestPoints(
const ConvexHull3D & other)
const;
94 void Transform(
const Matrix4 &T);
97 PolytopeData& AsPolytope();
98 const PolytopeData& AsPolytope()
const;
99 const PointData& AsPoint()
const;
100 const TransData& AsTrans()
const;
101 const HullData& AsHull()
const;
102 size_t NumPrimitives()
const;
113 std::shared_ptr<ShapeHandleContainer> shapeHandle;
129 bool Contains(
const Vector3& pt)
const;
137 void UpdateHullSecondRelativeTransform(
const RigidTransform& tran);
145 DT_ObjectHandle data;
147 std::shared_ptr<ObjectHandleContainer> objectHandle;
148 DT_ShapeHandle shapeHandle;
149 double transform[16];
152 std::ostream& operator << (std::ostream& out,
const ConvexHull3D& h);
153 std::istream& operator >> (std::istream& in,
ConvexHull3D& h);
bool ConvexHull3D_Qhull(const vector< Vector3 > &points, vector< vector< int > > &facets)
Computes the convex hull of the point set using the Qhull library.
Definition: ConvexHull3D.cpp:68
void GetBB(const CollisionMesh &m, Box3D &bb)
Returns the bounding box containing m.
Definition: CollisionMesh.cpp:1856
Common math typedefs, constants, functions.
A generic 3D geometric primitive class.
Definition: geometry3d.h:33
Real Distance(const CollisionImplicitSurface &s, const Vector3 &pt)
Definition: CollisionImplicitSurface.cpp:140
A 3D vector class.
Definition: math3d/primitives.h:136
A polymorphic container class that can contain data of any type.
Definition: AnyValue.h:25
Type
Definition: ConvexHull3D.h:76
Definition: ConvexHull3D.h:142
A 3D axis-aligned bounding box.
Definition: AABB3D.h:13
Class declarations for useful 3D math types.
A 4x4 matrix class.
Definition: math3d/primitives.h:626
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
The collision data class for ConvexHull3D that contains the solid3 data structure moved by some rigid...
Definition: ConvexHull3D.h:124
int ClosestPoint(const CollisionMesh &mesh, const Vector3 &p, Vector3 &cp, Real bound)
Definition: CollisionMesh.cpp:1309
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A 3D convex hull class.
Definition: ConvexHull3D.h:62
Definition: ConvexHull3D.h:108
A 3D boxThe box is the unit cube [0,1]^3 set in the scaled local coordinate system. That is, one corner is at the origin, and it has dimensions [dims.x,dims.y,dims.z] in the coordinates given by {xbasis,ybasis,zbasis}.
Definition: Box3D.h:21
bool Collides(const CollisionImplicitSurface &s, const CollisionPointCloud &pc, Real margin, vector< int > &collidingPoints, size_t maxContacts)
Definition: CollisionImplicitSurface.cpp:195
Contains all definitions in the Geometry package.
Definition: AnyGeometry.cpp:26