JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
deformable_body.hpp
Go to the documentation of this file.
1// Copyright (c) JSim contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the LGPLv3 license file in the root directory of this project.
4
5#pragma once
6
7#include <vector>
8
13
14namespace frcsim {
15
26 public:
31 explicit DeformableBody(double mass_kg = 1.0) : rigid_base_(mass_kg) {}
32
34 const RigidBody& rigidBase() const { return rigid_base_; }
36 RigidBody& rigidBase() { return rigid_base_; }
37
42 void enableDeformation(bool enable) { enable_deformation_ = enable; }
44 bool isDeformationEnabled() const { return enable_deformation_; }
45
50 void setBendStiffness(double stiffness_npm) {
51 bend_stiffness_npm_ = stiffness_npm;
52 }
53
54 double bendStiffness() const { return bend_stiffness_npm_; }
55
60 void setWarpDamping(double damping_nspm) {
61 warp_damping_nspm_ = damping_nspm;
62 }
63
64 double warpDamping() const { return warp_damping_nspm_; }
65
71 const std::vector<Vector3>& deformationNodes() const {
72 return deformation_nodes_local_;
73 }
74
78 std::vector<Vector3>& deformationNodes() { return deformation_nodes_local_; }
79
84 const std::vector<Vector3>& deformationVelocities() const {
85 return deformation_velocities_;
86 }
87
91 std::vector<Vector3>& deformationVelocities() {
92 return deformation_velocities_;
93 }
94
95 private:
96 RigidBody rigid_base_;
97 bool enable_deformation_{false};
98 double bend_stiffness_npm_{100.0};
99 double warp_damping_nspm_{10.0};
100
101 // TODO: Populate with actual deformation mesh nodes during application setup.
102 std::vector<Vector3> deformation_nodes_local_;
103 std::vector<Vector3> deformation_velocities_;
104};
105
106} // namespace frcsim
RigidBody & rigidBase()
Mutable access to underlying rigid body.
Definition deformable_body.hpp:36
void enableDeformation(bool enable)
Enables or disables deformation solving.
Definition deformable_body.hpp:42
void setWarpDamping(double damping_nspm)
Sets the warp damping coefficient for deformation energy dissipation.
Definition deformable_body.hpp:60
double warpDamping() const
Returns warp damping in newton-seconds per meter.
Definition deformable_body.hpp:64
std::vector< Vector3 > & deformationNodes()
Mutable access to local-frame deformation node positions.
Definition deformable_body.hpp:78
const std::vector< Vector3 > & deformationVelocities() const
Immutable access to deformation node velocities.
Definition deformable_body.hpp:84
const RigidBody & rigidBase() const
Immutable access to underlying rigid body state and properties.
Definition deformable_body.hpp:34
const std::vector< Vector3 > & deformationNodes() const
Immutable access to local-frame deformation node positions.
Definition deformable_body.hpp:71
std::vector< Vector3 > & deformationVelocities()
Mutable access to deformation node velocities.
Definition deformable_body.hpp:91
bool isDeformationEnabled() const
Returns whether deformation is currently enabled.
Definition deformable_body.hpp:44
double bendStiffness() const
Returns bending stiffness in newtons per meter.
Definition deformable_body.hpp:54
void setBendStiffness(double stiffness_npm)
Sets the bending stiffness for deformation resistance.
Definition deformable_body.hpp:50
DeformableBody(double mass_kg=1.0)
Constructs a rigid-body-based deformable body.
Definition deformable_body.hpp:31
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
Definition vector.hpp:13