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