diff --git a/object_fracture_cell/__init__.py b/object_fracture_cell/__init__.py index 01216409f8f58238c657a6af93c165240b934806..63ffdd924a94a61e3f526d97825145c2c6973505 100644 --- a/object_fracture_cell/__init__.py +++ b/object_fracture_cell/__init__.py @@ -58,6 +58,7 @@ def main_object(scene, obj, level, **kw): use_layer_next = kw_copy.pop("use_layer_next") group_name = kw_copy.pop("group_name") use_island_split = kw_copy.pop("use_island_split") + use_debug_bool = kw_copy.pop("use_debug_bool") from . import fracture_cell_setup @@ -71,6 +72,7 @@ def main_object(scene, obj, level, **kw): objects = fracture_cell_setup.cell_fracture_objects(scene, obj, **kw_copy) objects = fracture_cell_setup.cell_fracture_boolean(scene, obj, objects, use_island_split=use_island_split, + use_debug_bool=use_debug_bool, use_debug_redraw=kw_copy["use_debug_redraw"]) # todo, split islands. @@ -315,6 +317,12 @@ class FractureCell(Operator): default=True, ) + use_debug_bool = BoolProperty( + name="Debug Boolean", + description="Skip applying the boolean modifier", + default=False, + ) + def execute(self, context): keywords = self.as_keywords() # ignore=("blah",) @@ -383,6 +391,7 @@ class FractureCell(Operator): rowsub = col.row(align=True) rowsub.prop(self, "use_debug_redraw") rowsub.prop(self, "use_debug_points") + rowsub.prop(self, "use_debug_bool") #def menu_func(self, context): # self.layout.menu("INFO_MT_add_fracture_objects", icon="PLUGIN") diff --git a/object_fracture_cell/fracture_cell_setup.py b/object_fracture_cell/fracture_cell_setup.py index 19a5086a2a56488fb69ce503fad9f2b749f69871..2f6625bbff34da1e5321b68cdd4f25178948ec7c 100644 --- a/object_fracture_cell/fracture_cell_setup.py +++ b/object_fracture_cell/fracture_cell_setup.py @@ -205,7 +205,21 @@ def cell_fracture_objects(scene, obj, # create the convex hulls bm = bmesh.new() + + # WORKAROUND FOR CONVEX HULL BUG/LIMIT + # XXX small noise + import random + def R(): return (random.random() - 0.5) * 0.01 + # XXX small noise + for i, co in enumerate(cell_points): + + # XXX small noise + co.x += R() + co.y += R() + co.z += R() + # XXX small noise + bm_vert = bm.verts.new(co) bm_vert.tag = True @@ -291,7 +305,7 @@ def cell_fracture_objects(scene, obj, def cell_fracture_boolean(scene, obj, objects, - apply=True, + use_debug_bool=False, clean=True, use_island_split=False, use_debug_redraw=False, @@ -304,7 +318,7 @@ def cell_fracture_boolean(scene, obj, objects, mod.object = obj mod.operation = 'INTERSECT' - if apply: + if not use_debug_bool: mesh_new = obj_cell.to_mesh(scene, apply_modifiers=True, settings='PREVIEW') @@ -346,7 +360,7 @@ def cell_fracture_boolean(scene, obj, objects, if use_debug_redraw: _redraw_yasiamevil() - if apply and use_island_split: + if (not use_debug_bool) and use_island_split: # this is ugly and Im not proud of this - campbell objects_islands = [] for obj_cell in objects_boolean: