iMSTK
Interactive Medical Simulation Toolkit
|
A constraint on a rigid body that defines rotationl correction through dx applied at a local position r on the body. More...
#include <imstkPbdContactConstraint.h>
Public Member Functions | |
void | projectConstraint (PbdState &bodies, const double dt, const SolverType &type) override |
Update positions by projecting constraints. | |
virtual Vec3d | computeRelativeVelocity (PbdState &imstkNotUsed(bodies)) |
const Vec3d & | getR (const int i) const |
Get the support point r/the difference to the contact point. | |
void | correctVelocity (PbdState &bodies, const double dt) override |
Solve the velocities given to the constraint. More... | |
Vec3d | getVelocityOnRigidBody (PbdState &bodies, const int bodyId, const Vec3d &pt) |
Returns the velocity at the given point on body Either body in collision could be rigid body. | |
double | getTorque (const double dt, const int i) |
Get torque magnitude after solve. | |
![]() | |
virtual const std::string | getTypeName () const =0 |
virtual bool | computeValueAndGradient (PbdState &bodies, double &c, std::vector< Vec3d > &dcdx)=0 |
Compute value and gradient of the constraint. More... | |
std::vector< PbdParticleId > & | getParticles () |
Get the vertex indices of the constraint. | |
bool | getCorrectVelocity () const |
Get/Set whether velocity should be corrected for this constraint. | |
void | setCorrectVelocity (const bool correctVelocity) |
const Vec3d & | getGradient (const int i) const |
Get gradient given the particle index in constraint. | |
double | getForce (const double dt) const |
Get the force magnitude, valid after solving lambda Only valid with xpbd. | |
double | getConstraintC () const |
Get constraint value C (how much the constraint is violated) | |
double | getLambda () const |
Get constraint value C (how much the constraint is violated) | |
virtual double | getRestValue () const |
Get reference constraint value. This value will have different context depending on the constraint being used. | |
void | zeroOutLambda () |
Zero's out the lagrange multplier before integration only used for xpbd, must be called before solving. | |
double | computeGeneralizedInvMass (const PbdState &bodies, const size_t particleIndex) const |
Compute generalized inverse mass of the particle. Note perf sensitive function. It has been intentionally inlined. More... | |
double | computeGeneralizedInvMass (const PbdState &bodies, const size_t particleIndex, const Vec3d &r) const |
Compute generalized inverse mass of the particle. More... | |
double | getRestitution () const |
Get/Set restitution. | |
void | setRestitution (const double restitution) |
double | getFriction () const |
Get/Set friction. | |
void | setFriction (const double friction) |
double | getStiffness () const |
Get/Set the stiffness. | |
void | setStiffness (const double stiffness) |
double | getCompliance () const |
Get/Set the compliance This function is also provided in case users need 0 compliance. | |
void | setCompliance (const double compliance) |
Protected Member Functions | |
PbdContactConstraint (const int numParticles) | |
![]() | |
PbdConstraint (const size_t numParticles) | |
Protected Attributes | |
std::vector< Vec3d > | m_r |
std::vector< double > | m_weights |
![]() | |
std::vector< PbdParticleId > | m_particles |
body, particle index | |
std::vector< Vec3d > | m_dcdx |
Normalized constraint gradients (per particle) | |
double | m_stiffness = 1.0 |
used in PBD, [0, 1] | |
double | m_compliance = 1e-7 |
used in xPBD, inverse of Stiffness | |
double | m_lambda = 0.0 |
Lagrange multiplier. | |
double | m_C = 0.0 |
Constraint Value. | |
double | m_friction = 0.0 |
double | m_restitution = 0.0 |
bool | m_correctVelocity = false |
Additional Inherited Members | |
![]() | |
enum | SolverType { xPBD = 0, PBD } |
Type of solvers. | |
A constraint on a rigid body that defines rotationl correction through dx applied at a local position r on the body.
It is primarily useful for rigid vs rigid and rigid vs deformable collision but can be used for other purposes such as joints.
Definition at line 22 of file imstkPbdContactConstraint.h.
|
overridevirtual |
Solve the velocities given to the constraint.
m_dcdx[i].squaredNorm()
Reimplemented from imstk::PbdConstraint.
Definition at line 98 of file imstkPbdContactConstraint.cpp.