[Bf-blender-cvs] [57c9742] fracture_modifier: added global keep shards mode for cutter groups
Martin Felke
noreply at git.blender.org
Fri Sep 9 14:12:41 CEST 2016
Commit: 57c9742438b5774ab392eb6a89b755e9cdec89ee
Author: Martin Felke
Date: Fri Sep 9 14:12:09 2016 +0200
Branches: fracture_modifier
https://developer.blender.org/rB57c9742438b5774ab392eb6a89b755e9cdec89ee
added global keep shards mode for cutter groups
===================================================================
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_modifier.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 7d4ea5a..e151343 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -137,6 +137,8 @@ class PHYSICS_PT_fracture(PhysicButtonsPanel, Panel):
col.prop(md, "dm_group")
if md.frac_algorithm == 'BOOLEAN':
col.prop(md, "cutter_group")
+ if (md.cutter_group):
+ col.prop(md, "keep_cutter_shards")
col.prop(md, "use_particle_birth_coordinates")
box.prop(md, "percentage")
diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index b43e680..0cceed8 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -1275,16 +1275,20 @@ static void do_intersect(FractureModifierData *fmd, Object* ob, Shard *t, short
//printf("Fractured: %d\n", k);
- if (s != NULL) {
- add_shard(fmd->frac_mesh, s, mat);
- shards++;
- s = NULL;
+ if (ELEM(fmd->keep_cutter_shards, MOD_FRACTURE_KEEP_BOTH, MOD_FRACTURE_KEEP_INTERSECT)) {
+ if (s != NULL) {
+ add_shard(fmd->frac_mesh, s, mat);
+ shards++;
+ s = NULL;
+ }
}
- if (s2 != NULL) {
- add_shard(fmd->frac_mesh, s2, mat);
- shards++;
- s2 = NULL;
+ if (ELEM(fmd->keep_cutter_shards, MOD_FRACTURE_KEEP_BOTH, MOD_FRACTURE_KEEP_DIFFERENCE)) {
+ if (s2 != NULL) {
+ add_shard(fmd->frac_mesh, s2, mat);
+ shards++;
+ s2 = NULL;
+ }
}
if ((is_zero && ob->derivedFinal == NULL) || !is_zero) {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index cd0991b..42d7528 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1537,6 +1537,12 @@ enum {
MOD_FRACTURE_EXTERNAL = (1 << 2),
};
+enum {
+ MOD_FRACTURE_KEEP_BOTH = (1 << 0),
+ MOD_FRACTURE_KEEP_INTERSECT = (1 << 1),
+ MOD_FRACTURE_KEEP_DIFFERENCE = (1 << 2),
+};
+
typedef struct ShardSequence {
struct ShardSequence *next, *prev;
struct FracMesh *frac_mesh;
@@ -1755,7 +1761,9 @@ typedef struct FractureModifierData {
int matstart;
int defstart;
- char pad[4];
+ int keep_cutter_shards;
+
+ //char pad[4];
} FractureModifierData;
typedef struct DataTransferModifierData {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index f6a50d4..0b1e933 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -5820,6 +5820,13 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}
};
+ static EnumPropertyItem prop_keep_cutter_shards[] = {
+ {MOD_FRACTURE_KEEP_BOTH, "KEEP_BOTH", 0, "Both", "Keep both shards(intersect and difference)"},
+ {MOD_FRACTURE_KEEP_INTERSECT, "KEEP_INTERSECT", 0, "Intersect Only", "Keep intersected shards only"},
+ {MOD_FRACTURE_KEEP_DIFFERENCE, "KEEP_DIFFERENCE", 0, "Difference Only", "Keep difference shards only"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
srna = RNA_def_struct(brna, "FractureModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Fracture Modifier", "Add a fracture container to this object");
RNA_def_struct_sdna(srna, "FractureModifierData");
@@ -6315,6 +6322,13 @@ static void rna_def_modifier_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, "keep_cutter_shards", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_keep_cutter_shards);
+ RNA_def_property_enum_default(prop, MOD_FRACTURE_KEEP_BOTH);
+ RNA_def_property_ui_text(prop, "Cutter mode", "Determines which shards to keep from cutting process");
+ //RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
/*Fracture Modifiers own python / RNA API */
rna_def_mesh_island(brna);
prop = RNA_def_property(srna, "mesh_islands", PROP_COLLECTION, PROP_NONE);
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 1d3987d..359bf88 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -3721,6 +3721,18 @@ static void updateDepgraph(ModifierData *md, DagForest *forest,
}
}
}
+
+ if (fmd->cutter_group) {
+ GroupObject *go;
+ for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
+ if (go->ob)
+ {
+ DagNode *curNode = dag_get_node(forest, go->ob);
+ dag_add_relation(forest, curNode, obNode,
+ DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Fracture Modifier Cutter Group");
+ }
+ }
+ }
}
static void foreachObjectLink(
@@ -3755,6 +3767,16 @@ static void foreachObjectLink(
}
}
}
+
+ if (fmd->cutter_group) {
+ GroupObject *go;
+ for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
+ if (go->ob)
+ {
+ walk(userData, ob, &go->ob, IDWALK_NOP);
+ }
+ }
+ }
}
static ShardSequence* shard_sequence_add(FractureModifierData* fmd, float frame, DerivedMesh* dm)
More information about the Bf-blender-cvs
mailing list