rapier3d/dynamics/joint/multibody_joint/
multibody_workspace.rs

1use crate::dynamics::RigidBodyVelocity;
2use crate::math::Real;
3use na::DVector;
4
5/// A temporary workspace for various updates of the multibody.
6#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
7#[derive(Clone, Debug)]
8pub(crate) struct MultibodyWorkspace {
9    pub accs: Vec<RigidBodyVelocity<Real>>,
10    pub ndofs_vec: DVector<Real>,
11}
12
13impl MultibodyWorkspace {
14    /// Create an empty workspace.
15    pub fn new() -> Self {
16        MultibodyWorkspace {
17            accs: Vec::new(),
18            ndofs_vec: DVector::zeros(0),
19        }
20    }
21
22    /// Resize the workspace so it is enough for `nlinks` links.
23    pub fn resize(&mut self, nlinks: usize, ndofs: usize) {
24        self.accs.resize(nlinks, RigidBodyVelocity::zero());
25        self.ndofs_vec = DVector::zeros(ndofs)
26    }
27}