37 std::vector<RigidBody>&
bodies() {
return bodies_; }
38 const std::vector<RigidBody>&
bodies()
const {
return bodies_; }
48 std::vector<std::shared_ptr<JointBase>>&
joints() {
return joints_; }
49 const std::vector<std::shared_ptr<JointBase>>&
joints()
const {
69 std::vector<RigidBody> bodies_;
70 std::vector<std::shared_ptr<JointBase>> joints_;
71 size_t root_body_idx_{0};
Rigidly locks two bodies together (no relative translation or rotation).
Definition fixed_joint.hpp:22
Slider joint that permits translation along one axis and constrains all other relative motion.
Definition prismatic_joint.hpp:22
Hinge joint that permits rotation about one axis while constraining relative translation.
Definition revolute_joint.hpp:22
PrismaticJoint * addPrismaticJoint(size_t body_a_idx, size_t body_b_idx, const Vector3 &axis_local)
void solveConstraints(double dt_s, int iterations)
void setRootBodyIndex(size_t idx)
double totalMass() const
Get total assembly mass.
const std::vector< std::shared_ptr< JointBase > > & joints() const
Definition rigid_assembly.hpp:49
size_t rootBodyIndex() const
Definition rigid_assembly.hpp:56
FixedJoint * addFixedJoint(size_t body_a_idx, size_t body_b_idx)
std::vector< std::shared_ptr< JointBase > > & joints()
Joint management.
Definition rigid_assembly.hpp:48
void enableConstraints(bool enable)
Disable/enable all constraints in assembly.
RigidBody * addBody(double mass_kg)
Add a body to this assembly (takes ownership).
Vector3 centerOfMass() const
Compute assembly center of mass in world space.
RevoluteJoint * addRevoluteJoint(size_t body_a_idx, size_t body_b_idx, const Vector3 &axis_local)
Create joints between bodies in this assembly.
const std::vector< RigidBody > & bodies() const
Definition rigid_assembly.hpp:38
std::vector< RigidBody > & bodies()
Retrieve bodies.
Definition rigid_assembly.hpp:37
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
3D vector utility used throughout JSim physics.
Definition vector.hpp:22