Class DistanceFieldCollisionDetection

Inheritance Relationships

Base Type

Derived Type

Class Documentation

class DistanceFieldCollisionDetection : public PBD::CollisionDetection

Distance field collision detection.

Subclassed by PBD::CubicSDFCollisionDetection

Public Functions

DistanceFieldCollisionDetection()
virtual ~DistanceFieldCollisionDetection()
virtual void collisionDetection(SimulationModel &model)
virtual bool isDistanceFieldCollisionObject(CollisionObject *co) const
void addCollisionBox(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Vector3r &box, const bool testMesh = true, const bool invertSDF = false)
void addCollisionSphere(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Real radius, const bool testMesh = true, const bool invertSDF = false)
void addCollisionTorus(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Vector2r &radii, const bool testMesh = true, const bool invertSDF = false)
void addCollisionObjectWithoutGeometry(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const bool testMesh)
void addCollisionHollowSphere(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Real radius, const Real thickness, const bool testMesh = true, const bool invertSDF = false)
void addCollisionHollowBox(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Vector3r &box, const Real thickness, const bool testMesh = true, const bool invertSDF = false)
void addCollisionCylinder(const unsigned int bodyIndex, const unsigned int bodyType, const Vector3r *vertices, const unsigned int numVertices, const Vector2r &dim, const bool testMesh = true, const bool invertSDF = false)

Add collision cylinder

Parameters
  • bodyIndex – index of corresponding body

  • bodyType – type of corresponding body

  • dim – (radius, height) of cylinder

Protected Functions

void collisionDetectionRigidBodies(RigidBody *rb1, DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2, const Real restitutionCoeff, const Real frictionCoeff, std::vector<std::vector<ContactData>> &contacts_mt)
void collisionDetectionRBSolid(const ParticleData &pd, const unsigned int offset, const unsigned int numVert, DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2, const Real restitutionCoeff, const Real frictionCoeff, std::vector<std::vector<ContactData>> &contacts_mt)
void collisionDetectionSolidSolid(const ParticleData &pd, const unsigned int offset, const unsigned int numVert, DistanceFieldCollisionObject *co1, TetModel *tm2, DistanceFieldCollisionObject *co2, const Real restitutionCoeff, const Real frictionCoeff, std::vector<std::vector<ContactData>> &contacts_mt)
bool findRefTetAt(const ParticleData &pd, TetModel *tm, const DistanceFieldCollisionDetection::DistanceFieldCollisionObject *co, const Vector3r &X, unsigned int &tetIndex, Vector3r &barycentricCoordinates)
struct ContactData

Public Members

char m_type
unsigned int m_index1
unsigned int m_index2
Vector3r m_cp1
Vector3r m_cp2
Vector3r m_normal
Real m_dist
Real m_restitution
Real m_friction
unsigned int m_elementIndex1
unsigned int m_elementIndex2
Vector3r m_bary1
Vector3r m_bary2
struct DistanceFieldCollisionBox : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionBox()
inline virtual int &getTypeId() const
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Vector3r m_box

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionCylinder : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionCylinder()
inline virtual int &getTypeId() const
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Vector2r m_dim

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionHollowBox : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionHollowBox()
inline virtual int &getTypeId() const
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Vector3r m_box
Real m_thickness

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionHollowSphere : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionHollowSphere()
inline virtual int &getTypeId() const
virtual bool collisionTest(const Vector3r &x, const Real tolerance, Vector3r &cp, Vector3r &n, Real &dist, const Real maxDist = 0.0)
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Real m_radius
Real m_thickness

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionObject : public PBD::CollisionDetection::CollisionObject

Subclassed by PBD::CubicSDFCollisionDetection::CubicSDFCollisionObject, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionBox, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionCylinder, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionHollowSphere, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObjectWithoutGeometry, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionSphere, PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionTorus

Public Functions

inline DistanceFieldCollisionObject()
inline virtual ~DistanceFieldCollisionObject()
virtual bool collisionTest(const Vector3r &x, const Real tolerance, Vector3r &cp, Vector3r &n, Real &dist, const Real maxDist = 0.0)
virtual void approximateNormal(const Eigen::Vector3d &x, const Real tolerance, Vector3r &n)
virtual double distance(const Eigen::Vector3d &x, const Real tolerance) = 0
void initTetBVH(const Vector3r *vertices, const unsigned int numVertices, const unsigned int *indices, const unsigned int numTets, const Real tolerance)

Public Members

bool m_testMesh
Real m_invertSDF
PointCloudBSH m_bvh
TetMeshBSH m_bvhTets
TetMeshBSH m_bvhTets0
struct DistanceFieldCollisionObjectWithoutGeometry : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionObjectWithoutGeometry()
inline virtual int &getTypeId() const
inline virtual bool collisionTest(const Vector3r &x, const Real tolerance, Vector3r &cp, Vector3r &n, Real &dist, const Real maxDist = 0.0)
inline virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionSphere : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionSphere()
inline virtual int &getTypeId() const
virtual bool collisionTest(const Vector3r &x, const Real tolerance, Vector3r &cp, Vector3r &n, Real &dist, const Real maxDist = 0.0)
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Real m_radius

Public Static Attributes

static int TYPE_ID = IDFactory::getId()
struct DistanceFieldCollisionTorus : public PBD::DistanceFieldCollisionDetection::DistanceFieldCollisionObject

Public Functions

inline virtual ~DistanceFieldCollisionTorus()
inline virtual int &getTypeId() const
virtual double distance(const Eigen::Vector3d &x, const Real tolerance)

Public Members

Vector2r m_radii

Public Static Attributes

static int TYPE_ID = IDFactory::getId()