[Bf-blender-cvs] [e53880a122d] soc-2021-simulation-display: Constraints:Added functions to get transforms from bullet. - These should be used in the constraint visualisation functions so that they can be drawn for kinematic objects as well
soumya pochiraju
noreply at git.blender.org
Wed Aug 18 12:30:09 CEST 2021
Commit: e53880a122d868c4b291ead2950bc53ad6ed56a0
Author: soumya pochiraju
Date: Wed Aug 18 15:58:16 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rBe53880a122d868c4b291ead2950bc53ad6ed56a0
Constraints:Added functions to get transforms from bullet.
- These should be used in the constraint visualisation functions so that they can be drawn for kinematic objects as well
===================================================================
M intern/rigidbody/RBI_api.h
M intern/rigidbody/rb_bullet_api.cpp
===================================================================
diff --git a/intern/rigidbody/RBI_api.h b/intern/rigidbody/RBI_api.h
index 3b614b07e6c..eb94045c704 100644
--- a/intern/rigidbody/RBI_api.h
+++ b/intern/rigidbody/RBI_api.h
@@ -376,7 +376,18 @@ void RB_constraint_set_target_velocity_motor(rbConstraint *con,
float velocity_ang);
/* Get object transforms */
-void RB_constraint_get_transforms_hinge(rbConstraint *con, float r_ob1_transform[4][4], float r_ob2_transform[4][4]);
+void RB_constraint_get_transforms_hinge(rbConstraint *con,
+ float r_ob1_basis[3][3],
+ float r_ob2_basis[3][3],
+ float r_ob1_orig[3],
+ float r_ob2_orig[3]);
+
+void RB_constraint_get_transforms_slider(rbConstraint *con,
+ float r_ob1_basis[3][3],
+ float r_ob2_basis[3][3],
+ float r_ob1_orig[3],
+ float r_ob2_orig[3],
+ float r_initial_dist[]);
/* Set number of constraint solver iterations made per step, this overrided world setting
* To use default set it to -1 */
diff --git a/intern/rigidbody/rb_bullet_api.cpp b/intern/rigidbody/rb_bullet_api.cpp
index 79f0e473a2a..a5127865c0a 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -1414,7 +1414,11 @@ void RB_constraint_set_target_velocity_motor(rbConstraint *con,
constraint->getRotationalLimitMotor(0)->m_targetVelocity = velocity_ang;
}
-void RB_constraint_get_transforms_hinge(rbConstraint *con, float r_ob1_transform[4][4], float r_ob2_transform[4][4]) {
+void RB_constraint_get_transforms_hinge(rbConstraint *con,
+ float r_ob1_basis[3][3],
+ float r_ob2_basis[3][3],
+ float r_ob1_orig[3],
+ float r_ob2_orig[3]) {
btHingeConstraint *constraint = reinterpret_cast<btHingeConstraint *>(con);
btTransform transform1;
btTransform transform2;
@@ -1422,8 +1426,39 @@ void RB_constraint_get_transforms_hinge(rbConstraint *con, float r_ob1_transform
transform1 = constraint->getAFrame();
transform2 = constraint->getBFrame();
- transform1.getOpenGLMatrix((btScalar *)r_ob1_transform);
- transform2.getOpenGLMatrix((btScalar *)r_ob2_transform);
+ for(int i=0; i<3; i++) {
+ copy_v3_btvec3(r_ob1_basis[i], btVector3(transform1.getBasis()[0][i],transform1.getBasis()[1][i], transform1.getBasis()[2][i]));
+ copy_v3_btvec3(r_ob2_basis[i], btVector3(transform2.getBasis()[0][i],transform2.getBasis()[1][i], transform2.getBasis()[2][i]));
+ }
+ copy_v3_btvec3(r_ob1_orig, btVector3(transform1.getOrigin().x(),transform1.getOrigin().y(), transform1.getOrigin().z()));
+ copy_v3_btvec3(r_ob2_orig, btVector3(transform2.getOrigin().x() ,transform2.getOrigin().y(), transform2.getOrigin().z()));
+
+}
+
+void RB_constraint_get_transforms_slider(rbConstraint *con,
+ float r_ob1_basis[3][3],
+ float r_ob2_basis[3][3],
+ float r_ob1_orig[3],
+ float r_ob2_orig[3],
+ float r_initial_dist[3]) {
+ btSliderConstraint *constraint = reinterpret_cast<btSliderConstraint *>(con);
+ btTransform transform1;
+ btTransform transform2;
+
+ transform1 = constraint->getFrameOffsetA();
+ transform2 = constraint->getFrameOffsetB();
+
+ for(int i=0; i<3; i++) {
+ copy_v3_btvec3(r_ob1_basis[i], btVector3(transform1.getBasis()[0][i],transform1.getBasis()[1][i], transform1.getBasis()[2][i]));
+ copy_v3_btvec3(r_ob2_basis[i], btVector3(transform2.getBasis()[0][i],transform2.getBasis()[1][i], transform2.getBasis()[2][i]));
+ }
+ copy_v3_btvec3(r_ob1_orig, btVector3(transform1.getOrigin().x(),transform1.getOrigin().y(), transform1.getOrigin().z()));
+ copy_v3_btvec3(r_ob2_orig, btVector3(transform2.getOrigin().x() ,transform2.getOrigin().y(), transform2.getOrigin().z()));
+
+ if(r_initial_dist) {
+ btTransform transform3 = transform1 * transform2.inverse();
+ copy_v3_btvec3(r_initial_dist, btVector3(transform3.getOrigin().x() ,transform3.getOrigin().y(), transform3.getOrigin().z()));
+ }
}
/* ********************************** */
More information about the Bf-blender-cvs
mailing list