smpl_core/conversions/
pose_remap.rs

1use super::pose_chunked::PoseChunked;
2use crate::common::{
3    metadata::{smpl_metadata, SmplMetadata},
4    pose::Pose,
5    types::SmplType,
6};
7/// Will remap the pose from a certain model to another one. For example from
8/// smplh to smplx. This is because different models have different number of
9/// joints for each part.
10#[allow(dead_code)]
11pub struct PoseRemap {
12    origin: SmplType,
13    origin_metadata: SmplMetadata,
14    destination: SmplType,
15    dest_metadata: SmplMetadata,
16}
17impl PoseRemap {
18    pub fn new(origin: SmplType, destination: SmplType) -> Self {
19        let origin_metadata = smpl_metadata(&origin);
20        let dest_metadata = smpl_metadata(&destination);
21        Self {
22            origin,
23            origin_metadata,
24            destination,
25            dest_metadata,
26        }
27    }
28    pub fn remap(&self, pose: &Pose) -> Pose {
29        let origin_chunked = PoseChunked::new(pose, &self.origin_metadata);
30        let mut new_pose = origin_chunked.to_pose(&self.dest_metadata, self.destination);
31        new_pose.retargeted = pose.retargeted;
32        new_pose
33    }
34}