iMSTK
Interactive Medical Simulation Toolkit
imstkPbdVolumeConstraint.h
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #pragma once
8 
9 #include "imstkPbdConstraint.h"
10 
11 namespace imstk
12 {
19 {
20 public:
22 
23  IMSTK_TYPE_NAME(PbdVolumeConstraint)
24 
25 
26  void initConstraint(
29  const Vec3d& p0, const Vec3d& p1, const Vec3d& p2, const Vec3d& p3,
30  const PbdParticleId& pIdx0, const PbdParticleId& pIdx1,
31  const PbdParticleId& pIdx2, const PbdParticleId& pIdx3,
32  const double k = 2.0);
33 
40  bool computeValueAndGradient(PbdState& bodies,
41  double& c, std::vector<Vec3d>& dcdx) override;
42 
46  double getRestValue() const { return m_restVolume; }
47 
48 protected:
49  double m_restVolume = 0.0;
50 };
51 } // namespace imstk
void initConstraint(const Vec3d &p0, const Vec3d &p1, const Vec3d &p2, const Vec3d &p3, const PbdParticleId &pIdx0, const PbdParticleId &pIdx1, const PbdParticleId &pIdx2, const PbdParticleId &pIdx3, const double k=2.0)
Initializes the volume constraint.
std::pair< int, int > PbdParticleId
Index pair that refers to a particle in a PbdState. Index 0 is the body id, Index 1 is the particle i...
Compound Geometry.
bool computeValueAndGradient(PbdState &bodies, double &c, std::vector< Vec3d > &dcdx) override
Compute value and gradient of constraint function.
double getRestValue() const
Return the rest configuration for the constraint.
Base Constraint class for Position based dynamics constraints.
Provides interface for accessing particles from a 2d array of PbdBody,Particles.
Definition: imstkPbdBody.h:229
Volume constraint for tetrahedral element.