Commit: 9d7483341251a5808220d43e32c258a3fd338740
Author: Martin Felke
Date:   Wed Nov 21 19:13:06 2018 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB9d7483341251a5808220d43e32c258a3fd338740

exposed apply_force and apply_torque for rigidbody to python

===================================================================

M       extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
M       intern/rigidbody/RBI_api.h
M       intern/rigidbody/rb_bullet_api.cpp
M       source/blender/makesrna/intern/rna_rigidbody.c

===================================================================

diff --git 
a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp 
b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
index a551feb9f66..194dba21150 100644
--- a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
+++ b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
@@ -221,7 +221,7 @@ void btFractureDynamicsWorld::glueCallback()
                        m_idCallback(body0->getUserPointer(),&objectId0, 
&shardId0);
                        m_idCallback(body1->getUserPointer(),&objectId1, 
&shardId1);
 
-                       printf("%d %d %d %d\n", objectId0, objectId1, tag0, 
tag1);
+                       //printf("%d %d %d %d\n", objectId0, objectId1, tag0, 
tag1);
                        //if (!colObj0->isStaticOrKinematicObject() && 
!colObj1->isStaticOrKinematicObject())
                        if (objectId0 == objectId1 && objectId0 > -1 && tag0 > 
-1 && tag1 > -1)
                        {
diff --git a/intern/rigidbody/RBI_api.h b/intern/rigidbody/RBI_api.h
index 7aba57c8ad8..5d64871cd43 100644
--- a/intern/rigidbody/RBI_api.h
+++ b/intern/rigidbody/RBI_api.h
@@ -240,6 +240,7 @@ void RB_body_apply_central_force(rbRigidBody *body, const 
float v_in[3]);
 
 void RB_body_apply_impulse(rbRigidBody* object, const float impulse[3], const 
float pos[3]);
 void RB_body_apply_force(rbRigidBody* object, const float force[3], const 
float pos[3]);
+void RB_body_apply_torque(rbRigidBody* object, const float torque[3]);
 
 /* ********************************** */
 /* Collision Shape Methods */
diff --git a/intern/rigidbody/rb_bullet_api.cpp 
b/intern/rigidbody/rb_bullet_api.cpp
index 83d0ab50888..aef1ec10824 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -1628,6 +1628,13 @@ void RB_body_apply_force(rbRigidBody* object, const 
float force[3], const float
        body->applyForce(btVector3(force[0], force[1], force[2]), 
btVector3(pos[0], pos[1], pos[2]));
 }
 
+void RB_body_apply_torque(rbRigidBody* object, const float torque[3])
+{
+       btRigidBody *body = object->body;
+
+       body->applyTorque(btVector3(torque[0], torque[1], torque[2]));
+}
+
 /* ********************************** */
 /* Collision Shape Methods */
 
diff --git a/source/blender/makesrna/intern/rna_rigidbody.c 
b/source/blender/makesrna/intern/rna_rigidbody.c
index 3ade431bbbb..bb3293fbb30 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -598,6 +598,25 @@ static void rna_RigidBodyOb_force_threshold_set(PointerRNA 
*ptr, float value)
     foreach_shard_float(ob, value, set_force_threshold);
 }
 
+static void rna_RigidBodyOb_force_apply(RigidBodyOb* rbo, float force[3], 
float position[3])
+{
+#ifdef WITH_BULLET
+       if (rbo && rbo->shared && rbo->shared->physics_object) {
+               RB_body_apply_force(rbo->shared->physics_object, force, 
position);
+       }
+#endif
+}
+
+
+static void rna_RigidBodyOb_torque_apply(RigidBodyOb* rbo, float torque[3])
+{
+#ifdef WITH_BULLET
+       if (rbo && rbo->shared && rbo->shared->physics_object) {
+               RB_body_apply_torque(rbo->shared->physics_object, torque);
+       }
+#endif
+}
+
 static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *scene, 
PointerRNA *ptr)
 {
        //RigidBodyWorld *rbw = (RigidBodyWorld *)ptr->data;
@@ -1150,7 +1169,8 @@ static void rna_def_rigidbody_world(BlenderRNA *brna)
 static void rna_def_rigidbody_object(BlenderRNA *brna)
 {
        StructRNA *srna;
-       PropertyRNA *prop;
+       PropertyRNA *prop, *parm;
+       FunctionRNA *func;
 
 
        srna = RNA_def_struct(brna, "RigidBodyObject", NULL);
@@ -1367,6 +1387,22 @@ static void rna_def_rigidbody_object(BlenderRNA *brna)
        prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_QUATERNION);
        RNA_def_property_float_sdna(prop, NULL, "orn");
        RNA_def_property_ui_text(prop, "Rotation", "Quaternion rotation of the 
rigidbody object");
+
+       //expose force and torque application as RNA functions
+       func = RNA_def_function(srna, "apply_force", 
"rna_RigidBodyOb_force_apply");
+       parm = RNA_def_float_vector_xyz(func, "force", 3, NULL, -FLT_MAX, 
FLT_MAX,
+                                       "Applied Force", "The currently applied 
force on this rigid body",
+                                      -FLT_MIN, FLT_MAX);
+
+       parm = RNA_def_float_vector_xyz(func, "position", 3, NULL, -FLT_MAX, 
FLT_MAX,
+                                       "Position", "The position of the 
applied force on this rigid body",
+                                      -FLT_MIN, FLT_MAX);
+
+       func = RNA_def_function(srna, "apply_torque", 
"rna_RigidBodyOb_torque_apply");
+       parm = RNA_def_float_vector_xyz(func, "torque", 3, NULL, -FLT_MAX, 
FLT_MAX,
+                                       "Applied Torque", "The currently 
applied torque on this rigid body",
+                                      -FLT_MIN, FLT_MAX);
+
 }
 
 static void rna_def_rigidbody_constraint(BlenderRNA *brna)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to