9 #include "imstkCollisionHandling.h" 10 #include "imstkMacros.h" 36 void setInputRigidObjectA(std::shared_ptr<RigidObject2> rbdObjA);
48 std::shared_ptr<RigidObject2> getRigidObjA();
49 std::shared_ptr<RigidObject2> getRigidObjB();
58 const double getBeta()
const {
return m_beta; }
60 void setFriction(
double frictionalCoefficient)
62 m_frictionalCoefficient = frictionalCoefficient;
63 m_useFriction = (m_frictionalCoefficient != 0.0);
66 const double getFriction()
const {
return m_frictionalCoefficient; }
68 void setUseFriction(
bool useFriction) { m_useFriction = useFriction; }
69 const double getUseFriction()
const {
return m_useFriction; }
76 const std::vector<CollisionElement>& elementsA,
77 const std::vector<CollisionElement>& elementsB)
override;
84 std::shared_ptr<RigidObject2> rbdObjA,
85 std::shared_ptr<RigidObject2> rbdObjB,
86 const std::vector<CollisionElement>& elementsA,
87 const std::vector<CollisionElement>& elementsB);
94 std::shared_ptr<RigidObject2> rbdObj,
95 std::shared_ptr<CollidingObject> colObj,
96 const std::vector<CollisionElement>& elementsA,
97 const std::vector<CollisionElement>& elementsB);
103 std::shared_ptr<RigidObject2> rbdObj,
104 const Vec3d& contactPt,
const Vec3d& contactNormal,
105 const double contactDepth);
111 std::shared_ptr<RigidObject2> rbdObjA,
112 std::shared_ptr<RigidObject2> rbdObjB,
113 const Vec3d& contactPt,
const Vec3d& contactNormal,
114 const double contactDepth);
118 double m_frictionalCoefficient = 2.0;
119 bool m_useFriction =
false;
void setInputCollidingObjectB(std::shared_ptr< CollidingObject > colObjB)
Second input colliding object is optional.
void setInputRigidObjectB(std::shared_ptr< RigidObject2 > rbdObjB)
Second input rigid object is optional.
void setBaumgarteStabilization(double beta)
Baumgarte stabilization term, scales the constraint scalars The higher it is, the faster constraint v...
void handleRbdStaticOneWay(std::shared_ptr< RigidObject2 > rbdObj, std::shared_ptr< CollidingObject > colObj, const std::vector< CollisionElement > &elementsA, const std::vector< CollisionElement > &elementsB)
Handle rigid vs static one-way edge-edge, vertex-triangle, etc.
virtual void handle(const std::vector< CollisionElement > &elementsA, const std::vector< CollisionElement > &elementsB) override
Add rigid body constraints according to contacts.
Base class for all collision handling classes.
Creates rigid body contact and frictional constraints given collision data then adds them to the rigi...
virtual void addConstraint(std::shared_ptr< RigidObject2 > rbdObj, const Vec3d &contactPt, const Vec3d &contactNormal, const double contactDepth)
Add constraint for the rigid body given contact.
void handleRbdRbdTwoWay(std::shared_ptr< RigidObject2 > rbdObjA, std::shared_ptr< RigidObject2 > rbdObjB, const std::vector< CollisionElement > &elementsA, const std::vector< CollisionElement > &elementsB)
Handle rigid vs rigid two-way edge-edge, vertex-triangle, etc.