38 #ifndef COAL_COLLISION_OBJECT_BASE_H 
   39 #define COAL_COLLISION_OBJECT_BASE_H 
   97       : aabb_center(
Vec3s::Constant((std::numeric_limits<
CoalScalar>::max)())),
 
  100         threshold_occupied(1),
 
  123     return isNotEqual(other);
 
  142   inline bool isOccupied()
 const { 
return cost_density >= threshold_occupied; }
 
  145   inline bool isFree()
 const { 
return cost_density <= threshold_free; }
 
  177     return Matrix3s::Constant(NAN);
 
  185     Matrix3s C = computeMomentofInertia();
 
  186     Vec3s com = computeCOM();
 
  189     return (
Matrix3s() << C(0, 0) - V * (com[1] * com[1] + com[2] * com[2]),
 
  190             C(0, 1) + V * com[0] * com[1], C(0, 2) + V * com[0] * com[2],
 
  191             C(1, 0) + V * com[1] * com[0],
 
  192             C(1, 1) - V * (com[0] * com[0] + com[2] * com[2]),
 
  193             C(1, 2) + V * com[1] * com[2], C(2, 0) + V * com[2] * com[0],
 
  194             C(2, 1) + V * com[2] * com[1],
 
  195             C(2, 2) - V * (com[0] * com[0] + com[1] * com[1]))
 
  205     return !(*
this == other);
 
  209   EIGEN_MAKE_ALIGNED_OPERATOR_NEW
 
  217                   bool compute_local_aabb = 
true)
 
  218       : cgeom(cgeom_), user_data(nullptr) {
 
  219     init(compute_local_aabb);
 
  223                   const Transform3s& tf, 
bool compute_local_aabb = 
true)
 
  224       : cgeom(cgeom_), t(tf), user_data(nullptr) {
 
  225     init(compute_local_aabb);
 
  230                   bool compute_local_aabb = 
true)
 
  231       : cgeom(cgeom_), t(R, T), user_data(nullptr) {
 
  232     init(compute_local_aabb);
 
  236     return cgeom == other.
cgeom && t == other.
t && user_data == other.
user_data;
 
  240     return !(*
this == other);
 
  259     if (t.getRotation().isIdentity()) {
 
  260       aabb = 
translate(cgeom->aabb_local, t.getTranslation());
 
  262       aabb.min_ = aabb.max_ = t.getTranslation();
 
  264       Vec3s min_world, max_world;
 
  265       for (
int k = 0; k < 3; ++k) {
 
  266         min_world.array() = t.getRotation().row(k).array() *
 
  267                             cgeom->aabb_local.min_.transpose().array();
 
  268         max_world.array() = t.getRotation().row(k).array() *
 
  269                             cgeom->aabb_local.max_.transpose().array();
 
  271         aabb.min_[k] += (min_world.array().min)(max_world.array()).sum();
 
  272         aabb.max_[k] += (min_world.array().max)(max_world.array()).sum();
 
  331       const shared_ptr<CollisionGeometry>& collision_geometry,
 
  332       bool compute_local_aabb = 
true) {
 
  333     if (collision_geometry.get() != cgeom.get()) {
 
  334       cgeom = collision_geometry;
 
  335       init(compute_local_aabb);
 
  340   void init(
bool compute_local_aabb = 
true) {
 
  342       if (compute_local_aabb) cgeom->computeLocalAABB();
 
  347   shared_ptr<CollisionGeometry> 
cgeom;
 
A class describing the AABB collision structure, which is a box in 3D space determined by two diagona...
Definition: AABB.h:55
 
The geometry for the object for collision or distance computation.
Definition: collision_object.h:94
 
the object for collision or distance computation, contains the geometry and the transform information
Definition: collision_object.h:214
 
#define COAL_DLLAPI
Definition: config.hh:88
 
KDOP< N > translate(const KDOP< N > &bv, const Vec3s &t)
translate the KDOP BV
 
void * user_data
pointer to user defined data specific to this object
Definition: collision_object.h:161
 
void setTransform(const Transform3s &tf)
set object's transform
Definition: collision_object.h:302
 
const shared_ptr< CollisionGeometry > & collisionGeometry()
get shared pointer to collision geometry of the object instance
Definition: collision_object.h:316
 
void setIdentityTransform()
set the object in local coordinate
Definition: collision_object.h:308
 
void setUserData(void *data)
set user data in geometry
Definition: collision_object.h:139
 
void setTransform(const Matrix3s &R, const Vec3s &T)
set object's transform
Definition: collision_object.h:299
 
void init(bool compute_local_aabb=true)
Definition: collision_object.h:340
 
AABB aabb
AABB in global coordinate.
Definition: collision_object.h:352
 
virtual OBJECT_TYPE getObjectType() const
get the type of the object
Definition: collision_object.h:127
 
virtual Matrix3s computeMomentofInertia() const
compute the inertia matrix, related to the origin
Definition: collision_object.h:176
 
void * user_data
pointer to user defined data specific to this object
Definition: collision_object.h:355
 
AABB aabb_local
AABB in local coordinate, used for tight AABB when only translation transform.
Definition: collision_object.h:158
 
const CollisionGeometry * collisionGeometryPtr() const
get raw pointer to collision geometry of the object instance
Definition: collision_object.h:319
 
virtual CollisionGeometry * clone() const =0
Clone *this into a new CollisionGeometry.
 
void setTranslation(const Vec3s &T)
set object's translation
Definition: collision_object.h:296
 
virtual NODE_TYPE getNodeType() const
get the node type
Definition: collision_object.h:130
 
bool isFree() const
whether the object is completely free
Definition: collision_object.h:145
 
const Transform3s & getTransform() const
get object's transform
Definition: collision_object.h:290
 
shared_ptr< CollisionGeometry > cgeom
Definition: collision_object.h:347
 
virtual Matrix3s computeMomentofInertiaRelatedToCOM() const
compute the inertia matrix, related to the com
Definition: collision_object.h:184
 
void * getUserData() const
get user data in geometry
Definition: collision_object.h:136
 
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_, const Transform3s &tf, bool compute_local_aabb=true)
Definition: collision_object.h:222
 
@ GEOM_CONE
Definition: collision_object.h:77
 
@ BV_KDOP24
Definition: collision_object.h:73
 
@ GEOM_TRIANGLE
Definition: collision_object.h:82
 
@ BV_KDOP18
Definition: collision_object.h:72
 
@ BV_RSS
Definition: collision_object.h:68
 
@ GEOM_BOX
Definition: collision_object.h:74
 
@ GEOM_SPHERE
Definition: collision_object.h:75
 
@ BV_KDOP16
Definition: collision_object.h:71
 
@ NODE_COUNT
Definition: collision_object.h:87
 
@ BV_kIOS
Definition: collision_object.h:69
 
@ GEOM_CYLINDER
Definition: collision_object.h:78
 
@ GEOM_CAPSULE
Definition: collision_object.h:76
 
@ HF_OBBRSS
Definition: collision_object.h:86
 
@ BV_UNKNOWN
Definition: collision_object.h:65
 
@ BV_AABB
Definition: collision_object.h:66
 
@ BV_OBBRSS
Definition: collision_object.h:70
 
@ GEOM_ELLIPSOID
Definition: collision_object.h:84
 
@ GEOM_HALFSPACE
Definition: collision_object.h:81
 
@ BV_OBB
Definition: collision_object.h:67
 
@ GEOM_PLANE
Definition: collision_object.h:80
 
@ HF_AABB
Definition: collision_object.h:85
 
@ GEOM_CONVEX
Definition: collision_object.h:79
 
@ GEOM_OCTREE
Definition: collision_object.h:83
 
bool isOccupied() const
whether the object is completely occupied
Definition: collision_object.h:142
 
bool isIdentityTransform() const
whether the object is in local coordinate
Definition: collision_object.h:305
 
CollisionGeometry(const CollisionGeometry &other)=default
Copy constructor.
 
AABB & getAABB()
get the AABB in world space
Definition: collision_object.h:255
 
void setRotation(const Matrix3s &R)
set object's rotation matrix
Definition: collision_object.h:293
 
~CollisionObject()
Definition: collision_object.h:243
 
const shared_ptr< const CollisionGeometry > collisionGeometry() const
get shared pointer to collision geometry of the object instance
Definition: collision_object.h:311
 
virtual CoalScalar computeVolume() const
compute the volume
Definition: collision_object.h:181
 
const Matrix3s & getRotation() const
get matrix rotation of the object
Definition: collision_object.h:287
 
NODE_TYPE getNodeType() const
get the node type
Definition: collision_object.h:249
 
bool operator!=(const CollisionObject &other) const
Definition: collision_object.h:239
 
virtual Vec3s computeCOM() const
compute center of mass
Definition: collision_object.h:173
 
virtual void computeLocalAABB()=0
compute the AABB for object in local coordinate
 
bool operator==(const CollisionObject &other) const
Definition: collision_object.h:235
 
CoalScalar cost_density
collision cost for unit volume
Definition: collision_object.h:164
 
bool isUncertain() const
whether the object has some uncertainty
 
const Vec3s & getTranslation() const
get translation of the object
Definition: collision_object.h:284
 
bool operator==(const CollisionGeometry &other) const
Equality operator.
Definition: collision_object.h:112
 
CoalScalar threshold_free
threshold for free (<= is free)
Definition: collision_object.h:170
 
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_, bool compute_local_aabb=true)
Definition: collision_object.h:216
 
virtual ~CollisionGeometry()
Definition: collision_object.h:106
 
Transform3s t
Definition: collision_object.h:349
 
CollisionGeometry * collisionGeometryPtr()
get raw pointer to collision geometry of the object instance
Definition: collision_object.h:322
 
@ OT_BVH
Definition: collision_object.h:54
 
@ OT_GEOM
Definition: collision_object.h:55
 
@ OT_COUNT
Definition: collision_object.h:58
 
@ OT_OCTREE
Definition: collision_object.h:56
 
@ OT_HFIELD
Definition: collision_object.h:57
 
@ OT_UNKNOWN
Definition: collision_object.h:53
 
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_, const Matrix3s &R, const Vec3s &T, bool compute_local_aabb=true)
Definition: collision_object.h:228
 
CoalScalar threshold_occupied
threshold for occupied ( >= is occupied)
Definition: collision_object.h:167
 
OBJECT_TYPE getObjectType() const
get the type of the object
Definition: collision_object.h:246
 
bool operator!=(const CollisionGeometry &other) const
Difference operator.
Definition: collision_object.h:122
 
void setUserData(void *data)
set user data in object
Definition: collision_object.h:281
 
Vec3s aabb_center
AABB center in local coordinate.
Definition: collision_object.h:151
 
CollisionGeometry()
Definition: collision_object.h:96
 
void setCollisionGeometry(const shared_ptr< CollisionGeometry > &collision_geometry, bool compute_local_aabb=true)
Associate a new CollisionGeometry.
Definition: collision_object.h:330
 
void * getUserData() const
get user data in object
Definition: collision_object.h:278
 
CoalScalar aabb_radius
AABB radius.
Definition: collision_object.h:154
 
const AABB & getAABB() const
get the AABB in world space
Definition: collision_object.h:252
 
void computeAABB()
compute the AABB in world space
Definition: collision_object.h:258
 
Main namespace.
Definition: broadphase_bruteforce.h:44
 
Eigen::Matrix< CoalScalar, 3, 3 > Matrix3s
Definition: data_types.h:81
 
bool isEqual(const Eigen::MatrixBase< Derived > &lhs, const Eigen::MatrixBase< OtherDerived > &rhs, const CoalScalar tol=std::numeric_limits< CoalScalar >::epsilon() *100)
Definition: tools.h:204
 
NODE_TYPE
traversal node type: bounding volume (AABB, OBB, RSS, kIOS, OBBRSS, KDOP16, KDOP18,...
Definition: collision_object.h:64
 
OBJECT_TYPE
object type: BVH (mesh, points), basic geometry, octree
Definition: collision_object.h:52
 
Eigen::Matrix< CoalScalar, 3, 1 > Vec3s
Definition: data_types.h:77
 
double CoalScalar
Definition: data_types.h:76