iMSTK
Interactive Medical Simulation Toolkit
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
imstkRigidBodyState2.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 
11 namespace imstk
12 {
19 {
20 public:
21  void resize(const size_t size)
22  {
23  m_invMasses.resize(size);
24  m_invIntertiaTensors.resize(size);
25  m_positions.resize(size);
26  m_orientations.resize(size);
27  m_velocities.resize(size);
28  m_angularVelocities.resize(size);
29  m_tentativeVelocities.resize(size);
30  m_tentativeAngularVelocities.resize(size);
31  m_forces.resize(size);
32  m_torques.resize(size);
33  m_isStatic.resize(size);
34  }
35 
36  size_t size() const { return m_invMasses.size(); }
37 
38  const std::vector<bool>& getIsStatic() const { return m_isStatic; }
39  std::vector<bool>& getIsStatic() { return m_isStatic; }
40 
41  const std::vector<double>& getInvMasses() const { return m_invMasses; }
42  std::vector<double>& getInvMasses() { return m_invMasses; }
43  const StdVectorOfMat3d& getInvIntertiaTensors() const { return m_invIntertiaTensors; }
44  StdVectorOfMat3d& getInvIntertiaTensors() { return m_invIntertiaTensors; }
45 
46  const StdVectorOfVec3d& getPositions() const { return m_positions; }
47  StdVectorOfVec3d& getPositions() { return m_positions; }
48  const StdVectorOfQuatd& getOrientations() const { return m_orientations; }
49  StdVectorOfQuatd& getOrientations() { return m_orientations; }
50 
51  const StdVectorOfVec3d& getVelocities() const { return m_velocities; }
52  StdVectorOfVec3d& getVelocities() { return m_velocities; }
53  const StdVectorOfVec3d& getAngularVelocities() const { return m_angularVelocities; }
54  StdVectorOfVec3d& getAngularVelocities() { return m_angularVelocities; }
55 
56  const StdVectorOfVec3d& getTentatveVelocities() const { return m_tentativeVelocities; }
57  StdVectorOfVec3d& getTentatveVelocities() { return m_tentativeVelocities; }
58  const StdVectorOfVec3d& getTentativeAngularVelocities() const { return m_tentativeAngularVelocities; }
59  StdVectorOfVec3d& getTentativeAngularVelocities() { return m_tentativeAngularVelocities; }
60 
61  const StdVectorOfVec3d& getForces() const { return m_forces; }
62  StdVectorOfVec3d& getForces() { return m_forces; }
63  const StdVectorOfVec3d& getTorques() const { return m_torques; }
64  StdVectorOfVec3d& getTorques() { return m_torques; }
65 
69  void setState(std::shared_ptr<RigidBodyState2> state)
70  {
71  m_invMasses = state->getInvMasses();
72  m_invIntertiaTensors = state->getInvIntertiaTensors();
73 
74  m_positions = state->getPositions();
75  m_orientations = state->getOrientations();
76 
77  m_velocities = state->getVelocities();
78  m_angularVelocities = state->getAngularVelocities();
79 
80  m_forces = state->getForces();
81  m_torques = state->getTorques();
82  }
83 
84 private:
85  std::vector<double> m_invMasses;
86  StdVectorOfMat3d m_invIntertiaTensors;
87 
88  StdVectorOfVec3d m_positions;
89  StdVectorOfQuatd m_orientations;
90 
91  StdVectorOfVec3d m_velocities;
92  StdVectorOfVec3d m_angularVelocities;
93  StdVectorOfVec3d m_tentativeVelocities;
94  StdVectorOfVec3d m_tentativeAngularVelocities;
95 
96  StdVectorOfVec3d m_forces;
97  StdVectorOfVec3d m_torques;
98 
99  std::vector<bool> m_isStatic;
100 };
101 } // namespace imstk
Compound Geometry.
Kinematic state of rigid bodies within a system.
void setState(std::shared_ptr< RigidBodyState2 > state)
Set the state to a given one, copies.