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 ? _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs