[Bf-blender-cvs] [fb8acd8b333] fracture_modifier: optionally restore old activation behavior with broken constraints
Martin Felke
noreply at git.blender.org
Sat Feb 24 11:21:11 CET 2018
Commit: fb8acd8b33310919c38cb1e208fdbdb9dc655d27
Author: Martin Felke
Date: Sat Feb 24 11:20:44 2018 +0100
Branches: fracture_modifier
https://developer.blender.org/rBfb8acd8b33310919c38cb1e208fdbdb9dc655d27
optionally restore old activation behavior with broken constraints
this allows easier breaking / collapsing of objects
===================================================================
M release/scripts/startup/bl_ui/properties_physics_fracture.py
M source/blender/blenkernel/intern/rigidbody.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_ui/properties_physics_fracture.py b/release/scripts/startup/bl_ui/properties_physics_fracture.py
index 561a0f2d564..20efd1f0557 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -217,6 +217,7 @@ class PHYSICS_PT_fracture_simulation(PhysicButtonsPanel, Panel):
row.prop(md, "use_self_collision")
row = layout.row()
row.prop(md, "use_compounds")
+ row.prop(md, "activate_broken")
col = layout.column(align=True)
col.prop(md, "constraint_target")
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index b88900f3746..2f6ce8c594a 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4087,7 +4087,7 @@ static bool do_activate(Object* ob, Object *ob2, MeshIsland *mi_compare, RigidBo
RigidBodyOb* rbo = mi->rigidbody;
if ((((rbo->flag & RBO_FLAG_KINEMATIC) || different_cluster) &&
- ((mi_compare == mi) /*|| (same_cluster && !dissolve)*/)) && valid)
+ ((mi_compare == mi) || (same_cluster && !dissolve && fmd->activate_broken))) && valid)
{
if (rbo->physics_object && activate) {
activateRigidbody(rbo, rbw, mi, ob);
@@ -4703,7 +4703,7 @@ static void activateCluster(MeshIsland *mi, int particle_index, RigidBodyWorld *
{
if (con->mi1->rigidbody->flag & RBO_FLAG_KINEMATIC) {
activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
- activateCluster(con->mi1, particle_index, rbw, ob);
+ //activateCluster(con->mi1, particle_index, rbw, ob);
}
}
@@ -4711,7 +4711,7 @@ static void activateCluster(MeshIsland *mi, int particle_index, RigidBodyWorld *
{
if (con->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC) {
activateRigidbody(con->mi2->rigidbody, rbw, con->mi2, ob);
- activateCluster(con->mi2, particle_index, rbw, ob);
+ //activateCluster(con->mi2, particle_index, rbw, ob);
}
}
}
@@ -4780,14 +4780,15 @@ static void handle_breaking_percentage(FractureModifierData* fmd, Object *ob, Me
RB_constraint_set_enabled(con->physics_constraint, false);
/*if (con->mi1->rigidbody->flag & RBO_FLAG_KINEMATIC ||
- con->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC )
+ con->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC ) */
+ if (fmd->activate_broken)
{
activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
activateCluster(con->mi1, con->mi1->particle_index, rbw, ob);
activateRigidbody(con->mi2->rigidbody, rbw, con->mi2, ob);
activateCluster(con->mi2, con->mi2->particle_index, rbw, ob);
- }*/
+ }
}
}
}
@@ -4804,8 +4805,11 @@ static void handle_breaking_percentage(FractureModifierData* fmd, Object *ob, Me
{
if (con->physics_constraint) {
RB_constraint_set_enabled(con->physics_constraint, false);
- //activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
- //activateRigidbody(con->mi2->rigidbody, rbw, con->mi2, ob);
+ if (fmd->activate_broken)
+ {
+ activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
+ activateRigidbody(con->mi2->rigidbody, rbw, con->mi2, ob);
+ }
}
}
}
@@ -4917,8 +4921,11 @@ static void handle_breaking_angle(FractureModifierData *fmd, Object *ob, RigidBo
//break constraint
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
- //activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
- //activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ if (fmd->activate_broken)
+ {
+ activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
+ activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ }
}
}
}
@@ -4931,8 +4938,11 @@ static void handle_breaking_angle(FractureModifierData *fmd, Object *ob, RigidBo
{
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
- //activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
- //activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ if (fmd->activate_broken)
+ {
+ activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
+ activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ }
}
}
}
@@ -4952,8 +4962,11 @@ static void handle_breaking_distance(FractureModifierData *fmd, Object *ob, Rigi
{
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
- //activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
- //activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ if (fmd->activate_broken)
+ {
+ activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
+ activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ }
}
}
}
@@ -4966,8 +4979,11 @@ static void handle_breaking_distance(FractureModifierData *fmd, Object *ob, Rigi
{
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
- //activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
- //activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ if (fmd->activate_broken)
+ {
+ activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
+ activateRigidbody(rbsc->mi2->rigidbody, rbw, rbsc->mi2, ob);
+ }
}
}
}
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index bfcac681cc9..b7969671adc 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1861,6 +1861,7 @@ typedef struct FractureModifierData {
int deform_distance_weighted;
int use_centroids;
int use_vertices;
+ int activate_broken;
/* internal flags */
int use_experimental;
@@ -1883,7 +1884,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 713939e673a..227c995988a 100644
--- a/source/blender/makesrna/intern/rna_fracture.c
+++ b/source/blender/makesrna/intern/rna_fracture.c
@@ -1573,5 +1573,11 @@ 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, "activate_broken", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "activate_broken", false);
+ RNA_def_property_ui_text(prop, "Activate Broken", "Activate both shards or all elements of the cluster if a constraint breaks");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ 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 336e713e0e9..30723cc4fb2 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -269,6 +269,7 @@ static void initData(ModifierData *md)
zero_v3(fmd->grid_offset);
zero_v3(fmd->grid_spacing);
fmd->use_constraint_group = false;
+ fmd->activate_broken = false;
}
//XXX TODO, freeing functionality should be in BKE too
@@ -1924,6 +1925,7 @@ static void copyData(ModifierData *md, ModifierData *target)
copy_v3_v3(trmd->grid_spacing, rmd->grid_spacing);
trmd->use_constraint_group = rmd->use_constraint_group;
+ trmd->activate_broken = rmd->activate_broken;
}
//XXXX TODO, is BB really useds still ? aint there exact volume calc now ?
More information about the Bf-blender-cvs
mailing list