Skip to main content

rapier3d/dynamics/joint/multibody_joint/
multibody_workspace.rs

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