[Bf-blender-cvs] [8bd7d43] fracture_modifier: 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
Martin Felke
noreply at git.blender.org
Tue Mar 10 12:42:59 CET 2015
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. @@
More information about the Bf-blender-cvs
mailing list