Commit: 0c4939c0132aceb7922c6fca2a5ffc65b4f7656d
Author: Martin Felke
Date:   Thu Jan 28 23:04:12 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB0c4939c0132aceb7922c6fca2a5ffc65b4f7656d

added a RNA function to read the appliedImpulse from each constraints live, 
during simulation (slow when done from a python frame handler over all 
constraints)

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

M       intern/rigidbody/RBI_api.h
M       intern/rigidbody/rb_bullet_api.cpp
M       source/blender/blenkernel/intern/rigidbody.c
M       source/blender/makesrna/intern/rna_modifier.c
M       source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/intern/rigidbody/RBI_api.h b/intern/rigidbody/RBI_api.h
index 69a8324..0791bda 100644
--- a/intern/rigidbody/RBI_api.h
+++ b/intern/rigidbody/RBI_api.h
@@ -306,6 +306,7 @@ void RB_constraint_delete(rbConstraint *con);
 /* Enable or disable constraint */
 void RB_constraint_set_enabled(rbConstraint *con, int enabled);
 int RB_constraint_is_enabled(rbConstraint *con);
+float RB_constraint_get_applied_impulse(rbConstraint *con);
 
 /* Limits */
 #define RB_LIMIT_LIN_X 0
diff --git a/intern/rigidbody/rb_bullet_api.cpp 
b/intern/rigidbody/rb_bullet_api.cpp
index 2e9f543..c3b63d2 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -1370,6 +1370,7 @@ void RB_constraint_set_enabled(rbConstraint *con, int 
enabled)
        btTypedConstraint *constraint = 
reinterpret_cast<btTypedConstraint*>(con);
        
        constraint->setEnabled(enabled);
+       constraint->enableFeedback(enabled);
 }
 
 int RB_constraint_is_enabled(rbConstraint *con)
@@ -1379,6 +1380,12 @@ int RB_constraint_is_enabled(rbConstraint *con)
        return constraint->isEnabled();
 }
 
+float RB_constraint_get_applied_impulse(rbConstraint *con)
+{
+       btTypedConstraint *constraint = 
reinterpret_cast<btTypedConstraint*>(con);
+       return (float)constraint->getAppliedImpulse();
+}
+
 void RB_constraint_set_limits_hinge(rbConstraint *con, float lower, float 
upper)
 {
        btHingeConstraint *constraint = 
reinterpret_cast<btHingeConstraint*>(con);
diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 9f1bce2..cb6e6a5 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4115,7 +4115,7 @@ static void resetDynamic(RigidBodyWorld *rbw)
                                MeshIsland *mi;
                                //mti->freeData((ModifierData*)fmd);
                                //BKE_object_where_is_calc(scene, go->ob);
-                               //fmd->last_frame = INT_MAX;
+
                                for (mi = fmd->meshIslands.first; mi; mi = 
mi->next)
                                {
                                        BKE_rigidbody_remove_shard(scene, mi);
@@ -4123,6 +4123,7 @@ static void resetDynamic(RigidBodyWorld *rbw)
 
                                fmd->refresh = true;
                                fmd->reset_shards = true;
+                               fmd->last_frame = INT_MAX;
 
                                DAG_id_tag_update(go->ob, OB_RECALC_ALL);
                                WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, 
go->ob);
@@ -4137,8 +4138,8 @@ void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw)
        if (rbw) {
                rbw->pointcache->flag |= PTCACHE_OUTDATED;
                //restoreKinematic(rbw);
-               if (!(rbw->pointcache->flag & PTCACHE_BAKED))
-                       resetDynamic(rbw);
+               //if (!(rbw->pointcache->flag & PTCACHE_BAKED))
+               resetDynamic(rbw);
        }
 }
 
@@ -4202,7 +4203,7 @@ void BKE_rigidbody_do_simulation(Scene *scene, float 
ctime)
        if ((rbw->flag & RBW_FLAG_OBJECT_CHANGED))
        {
                rbw->flag &= ~RBW_FLAG_OBJECT_CHANGED;
-               if (!(cache->flag & PTCACHE_BAKED))
+               //if (!(cache->flag & PTCACHE_BAKED))
                {
                        /* dont mess with baked data */
                        //if (ctime <= startframe)
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 3f9463f..8b0b322 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1306,6 +1306,15 @@ static void 
rna_FractureModifier_mesh_constraint_clear(ID *id, FractureModifierD
        }
 }
 
+static float rna_MeshCon_get_applied_impulse(RigidBodyShardCon *con)
+{
+#ifdef WITH_BULLET
+       if (con && con->physics_constraint)
+               return 
RB_constraint_get_applied_impulse(con->physics_constraint);
+#endif
+       return 0.0f;
+}
+
 #define RB_FLAG_SET(dest, value, flag) { \
        if (value) \
                dest |= flag; \
@@ -5280,8 +5289,8 @@ static void rna_def_mesh_island(BlenderRNA *brna)
 static void rna_def_mesh_constraint(BlenderRNA *brna)
 {
        StructRNA *srna;
-       PropertyRNA *prop;
-       //FunctionRNA *func;
+       PropertyRNA *prop, *parm;
+       FunctionRNA *func;
 
        srna = RNA_def_struct(brna, "MeshConstraint", NULL);
        RNA_def_struct_sdna(srna, "RigidBodyShardCon");
@@ -5627,6 +5636,11 @@ static void rna_def_mesh_constraint(BlenderRNA *brna)
        RNA_def_property_range(prop, -1.0f, DEG2RADF(360.0));
        RNA_def_property_ui_text(prop, "Plastic Angle", "Angle Tolerance of 
this constraint, when exceeded enter plastic mode, -1 disables");
        //RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+       //do as function, dont need an dna value for storage, instead query 
from bullet directly
+       func = RNA_def_function(srna, "appliedImpulse", 
"rna_MeshCon_get_applied_impulse");
+       parm = RNA_def_float(func, "impulse", 0, -FLT_MAX, FLT_MAX, "Applied 
Impulse", "The currently applied impulse on this constraint", -FLT_MIN, 
FLT_MAX);
+       RNA_def_function_return(func, parm);
 }
 
 static void rna_def_fracture_meshislands(BlenderRNA *brna, PropertyRNA *cprop)
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index d5fa533..6b7d914 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -425,7 +425,7 @@ static void freeData(ModifierData *md)
 
        /*force deletion of meshshards here, it slips through improper state 
detection*/
        /*here we know the modifier is about to be deleted completely*/
-       //free_shards(fmd);
+       free_shards(fmd);
 }
 
 //XXX TODO move cluster handling to BKE too

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

Reply via email to