[Bf-blender-cvs] [fcff61a1bd9] fracture_modifier: made do_merge and keep_distort optional

Martin Felke noreply at git.blender.org
Thu Jun 8 15:40:27 CEST 2017


Commit: fcff61a1bd9dc925df69425a4b73d8e4f0ad66a0
Author: Martin Felke
Date:   Thu Jun 8 15:40:20 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rBfcff61a1bd9dc925df69425a4b73d8e4f0ad66a0

made do_merge and keep_distort optional

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

M	release/scripts/startup/bl_operators/presets.py
M	release/scripts/startup/bl_ui/properties_physics_fracture.py
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 f521cb0b761..1f045e2e92b 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -686,7 +686,10 @@ class AddPresetFracture(AddPresetBase, Operator):
         "fracture.use_constraint_collision",
         "fracture.inner_crease",
         "fracture.material_offset_difference",
-        "fracture.material_offset_intersect"
+        "fracture.material_offset_intersect",
+        "fracture.orthogonality_factor",
+        "fracture.keep_distort",
+        "fracture.do_merge"
     ]
 
     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 fd41310dde3..d7140b561b8 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -256,6 +256,9 @@ class PHYSICS_PT_fracture_utilities(PhysicButtonsPanel, Panel):
         col.prop(md, "autohide_dist")
         col.prop(md, "automerge_dist")
         row = layout.row()
+        row.prop(md, "keep_distort")
+        row.prop(md, "do_merge")
+        row = layout.row()
         row.prop(md, "fix_normals")
         row.prop(md, "nor_range")
 
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 8705b1f0746..e838f28f95c 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1770,6 +1770,8 @@ typedef struct FractureModifierData {
 	int fracture_all;
 	int dynamic_new_constraints;
 	int is_dynamic_external;
+	int keep_distort;
+	int do_merge;
 
 	/* internal flags */
 	int use_experimental;
diff --git a/source/blender/makesrna/intern/rna_fracture.c b/source/blender/makesrna/intern/rna_fracture.c
index 336e56e3427..0f342e0333d 100644
--- a/source/blender/makesrna/intern/rna_fracture.c
+++ b/source/blender/makesrna/intern/rna_fracture.c
@@ -595,7 +595,7 @@ static void rna_Modifier_update_and_keep(Main *UNUSED(bmain), Scene *UNUSED(scen
 	if (md && md->type == eModifierType_Fracture)
 	{
 		FractureModifierData *fmd = (FractureModifierData*)md;
-		if (fmd->fracture_mode == MOD_FRACTURE_PREFRACTURED)
+		if (fmd->fracture_mode == MOD_FRACTURE_PREFRACTURED || fmd->fracture_mode == MOD_FRACTURE_EXTERNAL)
 		{
 			FractureSetting* fs = BLI_findlink(&fmd->fracture_settings, fmd->active_setting);
 			BKE_fracture_store_settings(fmd, fs);
@@ -605,10 +605,10 @@ static void rna_Modifier_update_and_keep(Main *UNUSED(bmain), Scene *UNUSED(scen
 				return;
 			}
 		}
-	}
 
-	DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
-	WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
+		DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+		WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
+	}
 }
 
 #endif
@@ -1247,5 +1247,15 @@ void RNA_def_fracture(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Orthogonality Factor",  "1 means only orthogonal cuts, move down to 0 to get more diagonal-ish cuts");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+	prop = RNA_def_property(srna, "keep_distort", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "keep_distort", false);
+	RNA_def_property_ui_text(prop, "Keep Distortion", "Whether or not to make the distortion on torn merged shards persistent.");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update_and_keep");
+
+	prop = RNA_def_property(srna, "do_merge", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "do_merge", false);
+	RNA_def_property_ui_text(prop, "Perform Merge", "Whether or not to actually weld the prepared automerge geometry.");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update_and_keep");
+
 	RNA_api_fracture(brna, srna);
 }
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index a8e99eefe18..bf29e845e85 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -253,6 +253,10 @@ static void initData(ModifierData *md)
 
 	fmd->mat_ofs_difference = 0;
 	fmd->mat_ofs_intersect = 0;
+
+	fmd->orthogonality_factor = 0.0f;
+	fmd->keep_distort = false;
+	fmd->do_merge = false;
 }
 
 //XXX TODO, freeing functionality should be in BKE too
@@ -1839,6 +1843,9 @@ static void copyData(ModifierData *md, ModifierData *target)
 
 	trmd->mat_ofs_difference = rmd->mat_ofs_difference;
 	trmd->mat_ofs_intersect = rmd->mat_ofs_intersect;
+	trmd->keep_distort = rmd->keep_distort;
+	trmd->do_merge = rmd->do_merge;
+	trmd->orthogonality_factor = rmd->orthogonality_factor;
 }
 
 //XXXX TODO, is BB really useds still ? aint there exact volume calc now ?
@@ -3240,7 +3247,7 @@ static void prepare_automerge(FractureModifierData *fmd, BMesh *bm)
 {
 	SharedVert *sv;
 	SharedVertGroup *vg;
-	bool do_calc_delta = true;
+	bool do_calc_delta = fmd->keep_distort;
 
 	int cd_edge_crease_offset = CustomData_get_offset(&bm->edata, CD_CREASE);
 	if (cd_edge_crease_offset == -1) {
@@ -3346,7 +3353,7 @@ static DerivedMesh *do_autoHide(FractureModifierData *fmd, DerivedMesh *dm, Obje
 	DerivedMesh *result;
 	BMFace **faces = MEM_mallocN(sizeof(BMFace *), "faces");
 	int del_faces = 0;
-	bool do_merge = true;
+	bool do_merge = fmd->do_merge;
 
 	DM_to_bmesh_ex(dm, bm, true);




More information about the Bf-blender-cvs mailing list