[Bf-blender-cvs] [e8958954ba1] fracture_modifier: added option to only output centroids as vertices

Martin Felke noreply at git.blender.org
Thu Dec 21 12:59:25 CET 2017


Commit: e8958954ba19c282c737589b98f4c0cfb3758762
Author: Martin Felke
Date:   Thu Dec 21 12:59:03 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rBe8958954ba19c282c737589b98f4c0cfb3758762

added option to only output centroids as vertices

might be useful in conjunction with duplicated metaballs to have simple fluid-like behavior

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

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_ui/properties_physics_fracture.py b/release/scripts/startup/bl_ui/properties_physics_fracture.py
index 91e2ab5e2d5..ccb57c5bb8e 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -284,6 +284,8 @@ class PHYSICS_PT_fracture_utilities(PhysicButtonsPanel, Panel):
         row.prop(md, "do_merge")
         row = layout.row()
         row.prop(md, "fix_normals")
+        row.prop(md, "use_centroids")
+        row = layout.row()
         row.prop(md, "nor_range")
 
         col = layout.column(align=True)
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index ed223015daf..85ffff5239a 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1796,6 +1796,7 @@ typedef struct FractureModifierData {
 	int do_merge;
 	int deform_angle_weighted;
 	int deform_distance_weighted;
+	int use_centroids;
 
 	/* internal flags */
 	int use_experimental;
@@ -1818,7 +1819,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 d0c777f9109..16000057f8f 100644
--- a/source/blender/makesrna/intern/rna_fracture.c
+++ b/source/blender/makesrna/intern/rna_fracture.c
@@ -1413,5 +1413,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_centroids", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "use_centroids", false);
+	RNA_def_property_ui_text(prop, "Use Centroids", "Only output the meshisland centroids as vertices");
+	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 f5c72969799..412a7aa0116 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -253,6 +253,8 @@ static void initData(ModifierData *md)
 	fmd->grid_resolution[0] = 10;
 	fmd->grid_resolution[1] = 10;
 	fmd->grid_resolution[2] = 10;
+
+	fmd->use_centroids = false;
 }
 
 //XXX TODO, freeing functionality should be in BKE too
@@ -1850,6 +1852,7 @@ static void copyData(ModifierData *md, ModifierData *target)
 	trmd->distortion_cached = rmd->distortion_cached;
 
 	copy_v3_v3_int(trmd->grid_resolution, rmd->grid_resolution);
+	trmd->use_centroids = rmd->use_centroids;
 }
 
 //XXXX TODO, is BB really useds still ? aint there exact volume calc now ?
@@ -3422,7 +3425,23 @@ static DerivedMesh *do_autoHide(FractureModifierData *fmd, DerivedMesh *dm, Obje
 	int del_faces = 0;
 	bool do_merge = fmd->do_merge;
 
-	DM_to_bmesh_ex(dm, bm, true);
+	if (fmd->use_centroids)
+	{
+		MeshIsland *mi;
+		//only add verts where centroids are...
+		float imat[4][4];
+		invert_m4_m4(imat, ob->obmat);
+
+		for (mi = fmd->meshIslands.first; mi; mi = mi->next)
+		{
+			float co[3];
+			mul_v3_m4v3(co, imat, mi->rigidbody->pos);
+			BM_vert_create(bm, co, NULL, BM_CREATE_NOP);
+		}
+	}
+	else {
+		DM_to_bmesh_ex(dm, bm, true);
+	}
 
 	BM_mesh_elem_index_ensure(bm, BM_FACE | BM_VERT);
 	BM_mesh_elem_table_ensure(bm, BM_FACE | BM_VERT);
@@ -3430,7 +3449,7 @@ static DerivedMesh *do_autoHide(FractureModifierData *fmd, DerivedMesh *dm, Obje
 
 	//BM_mesh_elem_hflag_disable_all(bm, BM_FACE | BM_EDGE | BM_VERT , BM_ELEM_SELECT, false);
 
-	//if (fmd->automerge_dist > 0)
+	if (!fmd->use_centroids)
 	{
 		Scene* sc = fmd->modifier.scene;
 		RigidBodyWorld *rbw = sc ? sc->rigidbody_world : NULL;
@@ -3943,7 +3962,7 @@ static DerivedMesh *output_dm(FractureModifierData* fmd, DerivedMesh *dm, Object
 			}
 		}
 
-		if (fmd->autohide_dist > 0 || fmd->automerge_dist > 0)
+		if (fmd->autohide_dist > 0 || fmd->automerge_dist > 0 || fmd->use_centroids)
 		{
 			//printf("Autohide \n");
 			dm_final = do_autoHide(fmd, fmd->visible_mesh_cached, ob);



More information about the Bf-blender-cvs mailing list