Commit: 80671518ebc0d832ecefb2205fe143d06432e98b
Author: Martin Felke
Date:   Sun Jan 14 20:12:53 2018 +0100
Branches: fracture_modifier
https://developer.blender.org/rB80671518ebc0d832ecefb2205fe143d06432e98b

put animated mesh settings to new panel, some fixes

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

M       release/scripts/startup/bl_operators/presets.py
M       release/scripts/startup/bl_ui/properties_physics_fracture.py
M       source/blender/blenkernel/intern/fracture.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/makesrna/intern/rna_fracture.c
M       source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/release/scripts/startup/bl_operators/presets.py 
b/release/scripts/startup/bl_operators/presets.py
index ecfdfe8fbb3..0e1e0371f14 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -708,6 +708,7 @@ class AddPresetFracture(AddPresetBase, Operator):
         "fracture.acceleration_fade",
         "fracture.use_animated_mesh",
         "fracture.animated_mesh_input",
+        "fracture.use_animated_mesh_rotation",
     ]
 
     preset_subdir = "fracture"
diff --git a/release/scripts/startup/bl_ui/properties_physics_fracture.py 
b/release/scripts/startup/bl_ui/properties_physics_fracture.py
index d0ffd3e8d73..3f7efb69e66 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -40,21 +40,29 @@ class PhysicButtonsPanel():
         rd = context.scene.render
         return (ob and (ob.type == 'MESH' or ob.type == 'CURVE' or ob.type == 
'SURFACE' or ob.type == 'FONT')) and (not rd.use_game_engine) and 
(context.fracture)
 
-class FRACTURE_UL_fracture_settings(UIList):
-    def draw_item(self, context, layout, data, item, icon, active_data, 
active_propname, index):
-        fl = item
-        if self.layout_type in {'DEFAULT', 'COMPACT'}:
-            layout.prop(fl, "name", text="", emboss=False, icon_value=icon)
-        elif self.layout_type in {'GRID'}:
-            layout.alignment = 'CENTER'
-            layout.label(text="", icon_value=icon)
-
-#class PHYSICS_PT_fracture_settings(PhysicButtonsPanel, Panel):
-#    bl_label = "Fracture Settings"
-
-#    def draw(self, context):
-#       layout = self.layout
-#       md = context.fracture
+#class FRACTURE_UL_fracture_settings(UIList):
+#    def draw_item(self, context, layout, data, item, icon, active_data, 
active_propname, index):
+#        fl = item
+#        if self.layout_type in {'DEFAULT', 'COMPACT'}:
+#            layout.prop(fl, "name", text="", emboss=False, icon_value=icon)
+#        elif self.layout_type in {'GRID'}:
+#            layout.alignment = 'CENTER'
+#            layout.label(text="", icon_value=icon)
+
+class PHYSICS_PT_fracture_anim_mesh(PhysicButtonsPanel, Panel):
+    bl_label = "Fracture Animated Mesh Settings"
+
+    def draw(self, context):
+        layout = self.layout
+        md = context.fracture
+        layout.context_pointer_set("modifier", md)
+        row = layout.row()
+        row.prop(md, "use_animated_mesh")
+        row.prop(md, "use_animated_mesh_rotation")
+        row = layout.row()
+        row.prop(md, "animated_mesh_input")
+        row = layout.row()
+        row.operator("object.fracture_anim_bind", text="Bind", 
icon="UV_VERTEXSEL")
 
 #       layout.template_list("FRACTURE_UL_fracture_settings", "", md, 
"fracture_settings", md, "active_setting", rows=3)
 
@@ -131,12 +139,6 @@ class PHYSICS_PT_fracture(PhysicButtonsPanel, Panel):
         row.prop(md, "use_smooth")
         row = layout.row()
         row.prop(md, "auto_execute")
-        row.prop(md, "use_animated_mesh")
-        row = layout.row()
-        row.prop(md, "animated_mesh_input")
-        row = layout.row()
-        row.context_pointer_set("modifier", md)
-        row.operator("object.fracture_anim_bind", text="Bind", 
icon="UV_VERTEXSEL")
         row = layout.row(align=True)
         row.prop(md, "splinter_axis")
         layout.prop(md, "splinter_length")
@@ -315,10 +317,11 @@ class PHYSICS_PT_fracture_utilities(PhysicButtonsPanel, 
Panel):
 
 classes = (
     FRACTURE_MT_presets,
-    FRACTURE_UL_fracture_settings,
+    #FRACTURE_UL_fracture_settings,
     PHYSICS_PT_fracture,
     PHYSICS_PT_fracture_simulation,
     PHYSICS_PT_fracture_utilities,
+    PHYSICS_PT_fracture_anim_mesh,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/blenkernel/intern/fracture.c 
b/source/blender/blenkernel/intern/fracture.c
index e2c5b9c4d11..8e0c022ecd3 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -3848,7 +3848,7 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, 
Object *ob, bool do_bi
        DerivedMesh *dm = NULL;
        int totvert, count = 0, i = 0, *orig_index;
        KDTree *tree = NULL;
-       float obquat[4];
+       float obquat[4], imat[4][4];
        bool *used;
 
        if (!fmd->anim_mesh_ob)
@@ -3863,6 +3863,7 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, 
Object *ob, bool do_bi
                return;
 
        totvert = dm->getNumVerts(dm);
+       invert_m4_m4(imat, fmd->anim_mesh_ob->obmat);
 
        if (totvert == 0) {
                dm->release(dm);
@@ -3940,6 +3941,7 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, 
Object *ob, bool do_bi
 
                        n = MEM_mallocN(sizeof(KDTreeNearest) * count, 
"nearest");
                        copy_v3_v3(co, mvert[i].co);
+                       //mul_m4_v3(fmd->anim_mesh_ob->obmat, co);
                        mul_m4_v3(ob->obmat, co);
                        r = BLI_kdtree_find_nearest_n(tree, co, n, count);
                        bc = 0;
@@ -4034,7 +4036,8 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, 
Object *ob, bool do_bi
 
                                copy_v3_v3(co, mvert[v].co);
                                sub_v3_v3(co, fmd->anim_bind[i].offset);
-                               mul_m4_v3(ob->obmat, co);
+                               mul_m4_v3(fmd->anim_mesh_ob->obmat, co);
+                               //mul_m4_v3(ob->obmat, co);
                                copy_v3_v3(mi->rigidbody->pos, co);
 
                                if (quats)
@@ -4044,20 +4047,19 @@ void BKE_read_animated_loc_rot(FractureModifierData 
*fmd, Object *ob, bool do_bi
                                        quat[2] = quatZ[v];
                                        quat[3] = quatW[v];
 
-                                       copy_qt_qt(mi->rigidbody->orn, quat);
+                                       if (fmd->anim_mesh_rot) {
+                                               mul_qt_qtqt(quat, obquat, quat);
+                                               copy_qt_qt(mi->rigidbody->orn, 
quat);
+                                       }
                                }
                                else {
                                        float no[3], vec[3] = {0, 0, 1}, 
quat[4];
                                        normal_short_to_float_v3(no, 
mvert[v].no);
-                                       if (dot_v3v3(vec, no) >= 0) {
-                                               //if difference too strong ?
-                                               
rotation_between_vecs_to_quat(quat, vec, no);
-                                       }
-                                       else {
-                                               unit_qt(quat);
+                                       rotation_between_vecs_to_quat(quat, 
vec, no);
+                                       if (fmd->anim_mesh_rot) {
+                                               mul_qt_qtqt(quat, obquat, quat);
+                                               copy_qt_qt(mi->rigidbody->orn, 
quat);
                                        }
-                                       mul_qt_qtqt(quat, obquat, quat);
-                                       copy_qt_qt(mi->rigidbody->orn, quat);
                                }
 
                                mi->rigidbody->flag |= RBO_FLAG_NEEDS_VALIDATE;
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 86c95f635db..ae63f52abc9 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1745,6 +1745,7 @@ typedef struct FractureModifierData {
        int active_setting;
 
        int anim_bind_len;
+       int anim_mesh_rot;
 
        /* values */
        int frac_algorithm;
@@ -1866,7 +1867,7 @@ typedef struct FractureModifierData {
        short mat_ofs_intersect;
        short mat_ofs_difference;
 
-       char pad[4];
+       //char pad[4];
 } FractureModifierData;
 
 typedef struct DataTransferModifierData {
diff --git a/source/blender/makesrna/intern/rna_fracture.c 
b/source/blender/makesrna/intern/rna_fracture.c
index 90aef5fe20f..6e3b075f528 100644
--- a/source/blender/makesrna/intern/rna_fracture.c
+++ b/source/blender/makesrna/intern/rna_fracture.c
@@ -1515,5 +1515,10 @@ void RNA_def_fracture(BlenderRNA *brna)
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+       prop = RNA_def_property(srna, "use_animated_mesh_rotation", 
PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "anim_mesh_rot", false);
+       RNA_def_property_ui_text(prop, "Use Rotation", "Allow moving original 
vertices to rotate the shards as well");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
        RNA_api_fracture(brna, srna);
 }
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index 206a888f207..a8c289a12bf 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -266,6 +266,7 @@ static void initData(ModifierData *md)
        fmd->anim_mesh_ob = NULL;
        fmd->anim_bind = NULL;
        fmd->anim_bind_len = 0;
+       fmd->anim_mesh_rot = false;
 }
 
 //XXX TODO, freeing functionality should be in BKE too
@@ -1881,6 +1882,7 @@ static void copyData(ModifierData *md, ModifierData 
*target)
        trmd->anim_bind_len = 0; //rmd->anim_bind_len;
        trmd->anim_bind = NULL;
        //memcpy(trmd->anim_bind, rmd->anim_bind, sizeof(int) * 
trmd->anim_bind_len);
+       trmd->anim_mesh_rot = rmd->anim_mesh_rot;
 }
 
 //XXXX TODO, is BB really useds still ? aint there exact volume calc now ?

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to