iMSTK
Interactive Medical Simulation Toolkit
imstkPbdAreaConstraint.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(PbdAreaConstraint)
24 
25 
26  void initConstraint(
29  const Vec3d& p0, const Vec3d& p1, const Vec3d& p2,
30  const PbdParticleId& pIdx0, const PbdParticleId& pIdx1, const PbdParticleId& pIdx2,
31  const double k = 2.5);
32 
39  bool computeValueAndGradient(PbdState& bodies,
40  double& c, std::vector<Vec3d>& dcdx) override;
44  double getRestValue() const { return m_restArea; }
45 
46 public:
47  double m_restArea = 0.0;
48 };
49 } // namespace imstk
Area constraint for triangular face.
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...
bool computeValueAndGradient(PbdState &bodies, double &c, std::vector< Vec3d > &dcdx) override
Compute value and gradient of constraint function.
void initConstraint(const Vec3d &p0, const Vec3d &p1, const Vec3d &p2, const PbdParticleId &pIdx0, const PbdParticleId &pIdx1, const PbdParticleId &pIdx2, const double k=2.5)
Initialize the constraint.
double getRestValue() const
Return the rest configuration for the constraint.
Compound Geometry.
Base Constraint class for Position based dynamics constraints.
double m_restArea
Area at the rest position.
Provides interface for accessing particles from a 2d array of PbdBody,Particles.
Definition: imstkPbdBody.h:229