iMSTK
Interactive Medical Simulation Toolkit
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
imstkPbdState.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 "imstkMath.h"
10 #include "imstkVecDataArray.h"
11 
12 namespace imstk
13 {
14 class PointSet;
15 
21 class PbdState
22 {
23 public:
24  PbdState(const int numElements) :
25  m_pos(std::make_shared<VecDataArray<double, 3>>(numElements)),
26  m_vel(std::make_shared<VecDataArray<double, 3>>(numElements)),
27  m_acc(std::make_shared<VecDataArray<double, 3>>(numElements))
28  {
29  std::fill_n(m_pos->getPointer(), numElements, Vec3d::Zero());
30  std::fill_n(m_vel->getPointer(), numElements, Vec3d::Zero());
31  std::fill_n(m_acc->getPointer(), numElements, Vec3d::Zero());
32  }
33 
34  virtual ~PbdState() = default;
35 
39  std::shared_ptr<VecDataArray<double, 3>> getAccelerations() { return m_acc; }
40 
44  std::shared_ptr<VecDataArray<double, 3>> getPositions() { return m_pos; }
45 
49  std::shared_ptr<VecDataArray<double, 3>> getVelocities() { return m_vel; }
50 
54  void setAccelerations(std::shared_ptr<VecDataArray<double, 3>> accelerations) { m_acc = accelerations; }
55 
59  void setPositions(std::shared_ptr<VecDataArray<double, 3>> positions) { m_pos = positions; }
60 
64  void setVelocities(std::shared_ptr<VecDataArray<double, 3>> velocities) { m_vel = velocities; }
65 
69  void setState(std::shared_ptr<PbdState> rhs);
70 
71 private:
72  std::shared_ptr<VecDataArray<double, 3>> m_pos;
73  std::shared_ptr<VecDataArray<double, 3>> m_vel;
74  std::shared_ptr<VecDataArray<double, 3>> m_acc;
75 };
76 } // namespace imstk
std::shared_ptr< VecDataArray< double, 3 > > getAccelerations()
Returns the vector of current nodal accelerations.
Definition: imstkPbdState.h:39
std::shared_ptr< VecDataArray< double, 3 > > getPositions()
Returns the vector of current nodal positions.
Definition: imstkPbdState.h:44
void setVelocities(std::shared_ptr< VecDataArray< double, 3 >> velocities)
Set the vector for velocities.
Definition: imstkPbdState.h:64
Compound Geometry.
std::shared_ptr< VecDataArray< double, 3 > > getVelocities()
Returns the vector of current nodal velocities.
Definition: imstkPbdState.h:49
void setState(std::shared_ptr< PbdState > rhs)
Set the state to a given one, copies vector values by value instead of references.
void setPositions(std::shared_ptr< VecDataArray< double, 3 >> positions)
Sets the vector that stores the positions.
Definition: imstkPbdState.h:59
void setAccelerations(std::shared_ptr< VecDataArray< double, 3 >> accelerations)
Set the vector for accelerations.
Definition: imstkPbdState.h:54