24 Mat3d m_intertiaTensor = Mat3d::Identity();
25 Vec3d m_initPos = Vec3d(0.0, 0.0, 0.0);
26 Quatd m_initOrientation = Quatd(1.0, 0.0, 0.0, 0.0);
27 Vec3d m_initVelocity = Vec3d(0.0, 0.0, 0.0);
28 Vec3d m_initAngularVelocity = Vec3d(0.0, 0.0, 0.0);
29 Vec3d m_initForce = Vec3d(0.0, 0.0, 0.0);
30 Vec3d m_initTorque = Vec3d(0.0, 0.0, 0.0);
31 bool m_isStatic =
false;
33 Vec3d m_prevForce = Vec3d(0.0, 0.0, 0.0);
35 Vec3d* m_pos =
nullptr;
36 Quatd* m_orientation =
nullptr;
37 Vec3d* m_velocity =
nullptr;
38 Vec3d* m_angularVelocity =
nullptr;
39 Vec3d* m_force =
nullptr;
40 Vec3d* m_torque =
nullptr;
43 const Vec3d& getPosition()
const {
return *m_pos; }
44 const Quatd& getOrientation()
const {
return *m_orientation; }
45 const Vec3d& getVelocity()
const {
return *m_velocity; }
46 const Vec3d& getAngularVelocity()
const {
return *m_angularVelocity; }
47 const Vec3d& getForce()
const {
return *m_force; }
48 const Vec3d& getTorque()
const {
return *m_torque; }
50 const double getMass()
const {
return m_mass; }
51 void setMass(
const double mass) { m_mass = mass; }
53 const Mat3d& getIntertiaTensor()
const {
return m_intertiaTensor; }
54 void setInertiaTensor(
const Mat3d& inertiaTensor) { m_intertiaTensor = inertiaTensor; }
56 const Vec3d& getInitPos()
const {
return m_initPos; }
57 void setInitPos(
const Vec3d& pos) { m_initPos = pos; }
59 const Quatd& getInitOrientation()
const {
return m_initOrientation; }
60 void setInitOrientation(
const Quatd& orientation) { m_initOrientation = orientation; }
62 const Vec3d& getInitVelocity()
const {
return m_initVelocity; }
63 void setInitVelocity(
const Vec3d& velocity) { m_initVelocity = velocity; }
65 const Vec3d& getInitAngularVelocity()
const {
return m_initAngularVelocity; }
66 void setInitAngularVelocity(
const Vec3d& angularVelocity) { m_initAngularVelocity = angularVelocity; }
68 const Vec3d& getInitForce()
const {
return m_initForce; }
69 void setInitForce(
const Vec3d& force) { m_initForce = force; }
71 const Vec3d& getInitTorque()
const {
return m_initTorque; }
72 void setInitTorque(
const Vec3d& torque) { m_initTorque = torque; }
78 void setInertiaFromPointSet(std::shared_ptr<PointSet> pointset,
const double scale = 1.0,
const bool useBoundingBoxOrigin =
true);
101 virtual const std::string getTypeName()
const = 0;
106 virtual void compute(
double dt) = 0;
110 std::shared_ptr<RigidBody> rbd2,
const Side side) :
111 m_obj1(rbd1), m_obj2(rbd2), m_side(side)
116 Eigen::Matrix<double, 3, 4> J = Eigen::Matrix<double, 3, 4>::Zero();
120 double range[2] = { 0.0, std::numeric_limits<double>::max() };
123 std::shared_ptr<RigidBody> m_obj1 =
nullptr;
124 std::shared_ptr<RigidBody> m_obj2 =
nullptr;
127 Side m_side = Side::AB;
Abstract class for rigid body constraints. A RbdConstraint should mainly provide a constraint jacobia...
void setInertiaFromPointSet(std::shared_ptr< PointSet > pointset, const double scale=1.0, const bool useBoundingBoxOrigin=true)
Convience function to set the inertia tensor based off provided geometry assuming uniform mass at eac...
Serves as a handle to the body.