aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/joint/generic_joint.rs
diff options
context:
space:
mode:
authorThierry Berger <contact@thierryberger.com>2024-06-03 15:20:24 +0200
committerThierry Berger <contact@thierryberger.com>2024-06-03 15:20:24 +0200
commite1ed90603e618e28f48916690d761e0d8213e2ad (patch)
tree8399da9825ca9ee8edd601b1265e818fa303b541 /src/dynamics/joint/generic_joint.rs
parentfe336b9b98d5825544ad3a153a84cb59dc9171c6 (diff)
parent856675032e76b6eb4bc9e0be4dc87abdbcfe0421 (diff)
downloadrapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.gz
rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.bz2
rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.zip
Merge branch 'master' into collider-builder-debug
Diffstat (limited to 'src/dynamics/joint/generic_joint.rs')
-rw-r--r--src/dynamics/joint/generic_joint.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/dynamics/joint/generic_joint.rs b/src/dynamics/joint/generic_joint.rs
index 76a7fe1..8c8a4aa 100644
--- a/src/dynamics/joint/generic_joint.rs
+++ b/src/dynamics/joint/generic_joint.rs
@@ -496,6 +496,24 @@ impl GenericJoint {
self.motors[i].damping = damping;
self
}
+
+ /// Flips the orientation of the joint, including limits and motors.
+ pub fn flip(&mut self) {
+ std::mem::swap(&mut self.local_frame1, &mut self.local_frame2);
+
+ let coupled_bits = self.coupled_axes.bits();
+
+ for dim in 0..SPATIAL_DIM {
+ if coupled_bits & (1 << dim) == 0 {
+ let limit = self.limits[dim];
+ self.limits[dim].min = -limit.max;
+ self.limits[dim].max = -limit.min;
+ }
+
+ self.motors[dim].target_vel = -self.motors[dim].target_vel;
+ self.motors[dim].target_pos = -self.motors[dim].target_pos;
+ }
+ }
}
macro_rules! joint_conversion_methods(