[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