Commit: 8bd7d43ae0437ab3da3764fc186ef7d622ee79ba
Author: Martin Felke
Date:   Tue Mar 10 12:42:37 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB8bd7d43ae0437ab3da3764fc186ef7d622ee79ba

added different constraint types which can be applied between clusters, with 
sub object groups meshes from different objects are converted to clusters 
automatically, so you can have in a limited way different constraint types 
between different objects

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

M       release/scripts/startup/bl_ui/properties_physics_fracture.py
M       source/blender/blenkernel/intern/rigidbody.c
M       source/blender/blenloader/intern/readfile.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 24b6d58..ca1c8c0 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -76,6 +76,7 @@ class PHYSICS_PT_fracture(PhysicButtonsPanel, Panel):
         col.prop(md, "cluster_count")
         col.prop(md, "point_seed")
         layout.prop(md, "cluster_group")
+        layout.prop(md, "cluster_constraint_type")
         if md.frac_algorithm == 'BOOLEAN' or md.frac_algorithm == 
'BISECT_FILL' or md.frac_algorithm == 'BISECT_FAST_FILL':
             layout.prop(md, "inner_material")
         if md.frac_algorithm == 'BOOLEAN_FRACTAL':
diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 4fe3dfd..e893d1a 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -74,7 +74,7 @@ static void validateShard(RigidBodyWorld *rbw, MeshIsland 
*mi, Object *ob, int r
 
 static void activateRigidbody(RigidBodyOb* rbo, RigidBodyWorld* rbw, 
MeshIsland *mi, Object* ob)
 {
-       if (rbo->flag & RBO_FLAG_KINEMATIC)
+       if (rbo->flag & RBO_FLAG_KINEMATIC && rbo->type == RBO_TYPE_ACTIVE)
        {
                rbo->flag &= ~RBO_FLAG_KINEMATIC;
                //RB_dworld_remove_body(rbw->physics_world, 
rbo->physics_object);
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 74d113c..01d1e85 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4759,6 +4759,7 @@ static void load_fracture_modifier(FileData* fd, 
FractureModifierData *fmd)
        fmd->refresh_constraints = false;
        fmd->nor_tree = NULL;
        fmd->face_pairs = NULL;
+       fmd->vert_index_map = NULL;
 
        if (fm == NULL || fmd->dm_group) {
                fmd->dm = NULL;
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 2b69c45..8182352 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1449,6 +1449,7 @@ typedef struct FractureModifierData {
        struct KDTree *nor_tree; /* store original vertices here (coords), to 
find them later and reuse their normals */
        struct Material *inner_material;
        struct GHash *face_pairs;
+       struct GHash *vert_index_map; /*used for autoconversion of former 
objects to clusters, marks object membership of each vert*/
 
        /* values */
        int frac_algorithm;
@@ -1469,6 +1470,7 @@ typedef struct FractureModifierData {
        int fractal_iterations;
        int grease_decimate;
        int cutter_axis;
+       int cluster_constraint_type;
 
        float breaking_angle;
        float breaking_distance;
@@ -1513,7 +1515,7 @@ typedef struct FractureModifierData {
        /* internal values */
        float max_vol;
 
-       //char pad[4];
+       char pad[4];
 } FractureModifierData;
 
 #endif  /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 6c45908..317097a 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -769,6 +769,13 @@ static void 
rna_RigidBodyModifier_use_breaking_set(PointerRNA *ptr, bool value)
        }
 }
 
+static void rna_FractureModifier_cluster_constraint_type_set(PointerRNA* ptr, 
int value)
+{
+       FractureModifierData *rmd = (FractureModifierData*)ptr->data;
+       rmd->cluster_constraint_type = value;
+       rmd->refresh_constraints = true;
+}
+
 
 /* NOTE: Curve and array modifiers requires curve path to be evaluated,
  * dependency graph will make sure that curve eval would create such a path,
@@ -3911,6 +3918,7 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        prop = RNA_def_property(srna, "cluster_count", PROP_INT, PROP_NONE);
        RNA_def_property_range(prop, 0, 100000);
        RNA_def_property_ui_text(prop, "Cluster Count", "Amount of clusters 
built from existing shards, 0 for none");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        //simulation stuff...
@@ -3919,11 +3927,13 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0f, FLT_MAX);
        RNA_def_property_float_funcs(prop, NULL, 
"rna_RigidBodyModifier_threshold_set", NULL);
        RNA_def_property_ui_text(prop, "Inner Breaking threshold", "Threshold 
to break constraints between shards in the same object");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "use_constraints", PROP_BOOLEAN, 
PROP_NONE);
        RNA_def_property_boolean_funcs(prop, NULL, 
"rna_RigidBodyModifier_use_constraints_set");
        RNA_def_property_ui_text(prop, "Use Constraints", "Create constraints 
between all shards");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "contact_dist", PROP_FLOAT, PROP_NONE);
@@ -3932,11 +3942,13 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_float_default(prop, 1.0f);
        RNA_def_property_float_funcs(prop, NULL, 
"rna_RigidBodyModifier_contact_dist_set", NULL);
        RNA_def_property_ui_text(prop, "Search Radius", "Limit search radius up 
to which two mesh islands are being connected, 0 for entire boundingbox");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "use_mass_dependent_thresholds", 
PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_funcs(prop, NULL, 
"rna_RigidBodyModifier_mass_dependent_thresholds_set");
        RNA_def_property_ui_text(prop, "Use Mass Dependent Thresholds", "Match 
the breaking threshold according to the masses of the constrained shards");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "constraint_limit", PROP_INT, PROP_NONE);
@@ -3944,6 +3956,7 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, INT_MAX);
        RNA_def_property_int_funcs(prop, NULL, 
"rna_RigidBodyModifier_constraint_limit_set", NULL);
        RNA_def_property_ui_text(prop, "Constraint Search Limit", "Maximum 
number of neighbors being searched per mesh island during constraint creation, 
0 for unlimited");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "breaking_percentage", PROP_INT, 
PROP_NONE);
@@ -3951,6 +3964,7 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, 100);
        RNA_def_property_int_funcs(prop, NULL, 
"rna_RigidBodyModifier_breaking_percentage_set", NULL);
        RNA_def_property_ui_text(prop, "Breaking Percentage", "Percentage of 
broken constraints per island which leads to breaking of all others");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "breaking_angle", PROP_FLOAT, PROP_ANGLE);
@@ -3958,6 +3972,7 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, DEG2RADF(360.0));
        RNA_def_property_float_funcs(prop, NULL, 
"rna_RigidBodyModifier_breaking_angle_set", NULL);
        RNA_def_property_ui_text(prop, "Breaking Angle", "Angle in degrees 
above which constraint should break");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "breaking_distance", PROP_FLOAT, 
PROP_NONE);
@@ -3965,17 +3980,20 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, FLT_MAX);
        RNA_def_property_float_funcs(prop, NULL, 
"rna_RigidBodyModifier_breaking_distance_set", NULL);
        RNA_def_property_ui_text(prop, "Breaking Distance", "Distance above 
which constraint should break");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "use_experimental", PROP_BOOLEAN, 
PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "use_experimental", false);
        RNA_def_property_ui_text(prop, "Use Experimental", "Experimental 
features, work in progress. Use at own risk!");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
 
        prop = RNA_def_property(srna, "cluster_breaking_threshold", PROP_FLOAT, 
PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "cluster_breaking_threshold");
        RNA_def_property_range(prop, 0.0f, FLT_MAX);
        RNA_def_property_float_funcs(prop, NULL, 
"rna_RigidBodyModifier_cluster_threshold_set", NULL);
        RNA_def_property_ui_text(prop, "Cluster Breaking threshold", "Threshold 
to break constraints INSIDE a cluster of shards");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "solver_iterations_override", PROP_INT, 
PROP_NONE);
@@ -3983,17 +4001,20 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, INT_MAX);
        RNA_def_property_int_funcs(prop, NULL, 
"rna_RigidBodyModifier_solver_iterations_override_set", NULL);
        RNA_def_property_ui_text(prop, "Solver Iterations Override", "Override 
the world constraint solver iteration value with this value, 0 means no 
override");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "frac_algorithm", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_items(prop, prop_fracture_algorithm);
        RNA_def_property_ui_text(prop, "Fracture Algorithm", "Select type of 
fracture algorithm");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "shard_count", PROP_INT, PROP_NONE);
        RNA_def_property_range(prop, 1, 100000);
        RNA_def_property_int_default(prop, 10);
        RNA_def_property_ui_text(prop, "Shard Count", "How many sub-shards 
should be generated from the current shard");
+       RNA

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to