[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3633] trunk/py/scripts/addons/ object_fracture_cell/__init__.py: change how recursion works, now keep scanning all input to re-shatter
Campbell Barton
ideasman42 at gmail.com
Tue Jul 17 11:01:12 CEST 2012
Revision: 3633
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3633
Author: campbellbarton
Date: 2012-07-17 09:01:12 +0000 (Tue, 17 Jul 2012)
Log Message:
-----------
change how recursion works, now keep scanning all input to re-shatter
Modified Paths:
--------------
trunk/py/scripts/addons/object_fracture_cell/__init__.py
Modified: trunk/py/scripts/addons/object_fracture_cell/__init__.py
===================================================================
--- trunk/py/scripts/addons/object_fracture_cell/__init__.py 2012-07-17 08:30:15 UTC (rev 3632)
+++ trunk/py/scripts/addons/object_fracture_cell/__init__.py 2012-07-17 09:01:12 UTC (rev 3633)
@@ -52,6 +52,7 @@
use_remove_original = kw_copy.pop("use_remove_original")
recursion = kw_copy.pop("recursion")
recursion_source_limit = kw_copy.pop("recursion_source_limit")
+ recursion_clamp = kw_copy.pop("recursion_clamp")
recursion_chance = kw_copy.pop("recursion_chance")
recursion_chance_select = kw_copy.pop("recursion_chance_select")
use_layer_next = kw_copy.pop("use_layer_next")
@@ -89,42 +90,48 @@
bpy.ops.object.origin_set({"selected_editable_objects": objects},
type='ORIGIN_GEOMETRY', center='MEDIAN')
- if level < recursion:
+ if level == 0:
+ for level_sub in range(1, recursion + 1):
- objects_recurse_input = [(i, o) for i, o in enumerate(objects)]
+ objects_recurse_input = [(i, o) for i, o in enumerate(objects)]
- if recursion_chance != 1.0:
- from mathutils import Vector
- if recursion_chance_select == 'RANDOM':
- random.shuffle(objects_recurse_input)
- elif recursion_chance_select in {'SIZE_MIN', 'SIZE_MAX'}:
- objects_recurse_input.sort(key=lambda ob_pair:
- (Vector(ob_pair[1].bound_box[0]) -
- Vector(ob_pair[1].bound_box[6])).length_squared)
- if recursion_chance_select == 'SIZE_MAX':
- objects_recurse_input.reverse()
- elif recursion_chance_select in {'CURSOR_MIN', 'CURSOR_MAX'}:
- c = scene.cursor_location.copy()
- objects_recurse_input.sort(key=lambda ob_pair:
- (ob_pair[1].location - c).length_squared)
- if recursion_chance_select == 'CURSOR_MAX':
- objects_recurse_input.reverse()
+ if recursion_chance != 1.0:
+ from mathutils import Vector
+ if recursion_chance_select == 'RANDOM':
+ random.shuffle(objects_recurse_input)
+ elif recursion_chance_select in {'SIZE_MIN', 'SIZE_MAX'}:
+ objects_recurse_input.sort(key=lambda ob_pair:
+ (Vector(ob_pair[1].bound_box[0]) -
+ Vector(ob_pair[1].bound_box[6])).length_squared)
+ if recursion_chance_select == 'SIZE_MAX':
+ objects_recurse_input.reverse()
+ elif recursion_chance_select in {'CURSOR_MIN', 'CURSOR_MAX'}:
+ c = scene.cursor_location.copy()
+ objects_recurse_input.sort(key=lambda ob_pair:
+ (ob_pair[1].location - c).length_squared)
+ if recursion_chance_select == 'CURSOR_MAX':
+ objects_recurse_input.reverse()
- objects_recurse_input[int(recursion_chance * len(objects_recurse_input)):] = []
- objects_recurse_input.sort()
+ objects_recurse_input[int(recursion_chance * len(objects_recurse_input)):] = []
+ objects_recurse_input.sort()
- # reverse index values so we can remove from original list.
- objects_recurse_input.reverse()
+ # reverse index values so we can remove from original list.
+ objects_recurse_input.reverse()
- objects_recursive = []
- for i, obj_cell in objects_recurse_input:
- assert(objects[i] is obj_cell)
- objects_recursive += main_object(scene, obj_cell, level + 1, **kw)
- if use_remove_original:
- scene.objects.unlink(obj_cell)
- del objects[i]
- objects.extend(objects_recursive)
+ objects_recursive = []
+ for i, obj_cell in objects_recurse_input:
+ assert(objects[i] is obj_cell)
+ objects_recursive += main_object(scene, obj_cell, level_sub, **kw)
+ if use_remove_original:
+ scene.objects.unlink(obj_cell)
+ del objects[i]
+ if recursion_clamp and len(objects) + len(objects_recursive) >= recursion_clamp:
+ break
+ objects.extend(objects_recursive)
+ if recursion_clamp and len(objects) > recursion_clamp:
+ break
+
#--------------
# Level Options
if level == 0:
@@ -293,11 +300,18 @@
default=8,
)
+ recursion_clamp = IntProperty(
+ name="Clamp Recursion",
+ description="Finish recursion when this number of objects is reached (prevents recursing for extended periods of time), zero disables",
+ min=0, max=10000,
+ default=250,
+ )
+
recursion_chance = FloatProperty(
name="Random Factor",
description="Likelyhood of recursion",
min=0.0, max=1.0,
- default=0.5,
+ default=0.25,
)
recursion_chance_select = EnumProperty(
@@ -473,6 +487,7 @@
rowsub = col.row(align=True)
rowsub.prop(self, "recursion")
rowsub.prop(self, "recursion_source_limit")
+ rowsub.prop(self, "recursion_clamp")
rowsub = col.row()
rowsub.prop(self, "recursion_chance")
rowsub.prop(self, "recursion_chance_select", expand=True)
More information about the Bf-extensions-cvs
mailing list