iMSTK
Interactive Medical Simulation Toolkit
Public Member Functions | Protected Attributes | List of all members
imstk::EmbeddingConstraint Class Reference

Constrains a rigid body line segment defined via p and q to a "puncture" point defined via barycentric coordinates on a triangle. More...

#include <EmbeddingConstraint.h>

Inheritance diagram for imstk::EmbeddingConstraint:
Inheritance graph
[legend]
Collaboration diagram for imstk::EmbeddingConstraint:
Collaboration graph
[legend]

Public Member Functions

void initConstraint (PbdState &bodies, const PbdParticleId &ptA1, const PbdParticleId &ptB1, const PbdParticleId &ptB2, const PbdParticleId &ptB3, Vec3d *p, Vec3d *q, const double compliance=0.0)
 Initializes both PBD and RBD constraint. More...
 
Vec3d computeInterpolantDifference (const PbdState &bodies) const
 Given two interpolants on the two elements, compute the difference between them and use for resolution.
 
bool computeValueAndGradient (PbdState &bodies, double &c, std::vector< Vec3d > &dcdx) override
 Compute value and gradient of the constraint. More...
 
const Vec3d & getIntersectionPoint () const
 
Vec3d * getP () const
 
Vec3d * getQ () const
 
- Public Member Functions inherited from imstk::PbdContactConstraint
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.
 
- Public Member Functions inherited from imstk::PbdConstraint
virtual const std::string getTypeName () const =0
 
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 Attributes

Vec3d m_uvw = Vec3d::Zero()
 
Vec2d m_uv = Vec2d::Zero()
 
double t = 0.0
 
Vec3d * m_p = nullptr
 
Vec3d * m_q = nullptr
 
Vec3d m_iPt
 
double m_normalFriction = 0.0
 
- Protected Attributes inherited from imstk::PbdContactConstraint
std::vector< Vec3d > m_r
 
std::vector< double > m_weights
 
- Protected Attributes inherited from imstk::PbdConstraint
std::vector< PbdParticleIdm_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

- Public Types inherited from imstk::PbdConstraint
enum  SolverType { xPBD = 0, PBD }
 Type of solvers.
 
- Protected Member Functions inherited from imstk::PbdContactConstraint
 PbdContactConstraint (const int numParticles)
 
- Protected Member Functions inherited from imstk::PbdConstraint
 PbdConstraint (const size_t numParticles)
 

Detailed Description

Constrains a rigid body line segment defined via p and q to a "puncture" point defined via barycentric coordinates on a triangle.

Definition at line 17 of file EmbeddingConstraint.h.

Member Function Documentation

◆ computeValueAndGradient()

bool imstk::EmbeddingConstraint::computeValueAndGradient ( PbdState bodies,
double &  c,
std::vector< Vec3d > &  dcdx 
)
overridevirtual

Compute value and gradient of the constraint.

Parameters
bodiesPbdState provides all the bodies
cConstraint value
dcdxNormalized constraint gradients (per vertex)

Implements imstk::PbdConstraint.

Definition at line 72 of file EmbeddingConstraint.cpp.

Here is the call graph for this function:

◆ initConstraint()

void imstk::EmbeddingConstraint::initConstraint ( PbdState bodies,
const PbdParticleId ptA1,
const PbdParticleId ptB1,
const PbdParticleId ptB2,
const PbdParticleId ptB3,
Vec3d *  p,
Vec3d *  q,
const double  compliance = 0.0 
)

Initializes both PBD and RBD constraint.

Parameters
bodies
rigidbody particle
triangleparticle b1
triangleparticle b2
triangleparticle b3
p/startof line
q/endof line

Definition at line 13 of file EmbeddingConstraint.cpp.


The documentation for this class was generated from the following files: