diff --git a/object_fracture_cell/__init__.py b/object_fracture_cell/__init__.py index 63ffdd924a94a61e3f526d97825145c2c6973505..73f9efa67b01877fb61b22fd2733240f13ce93ec 100644 --- a/object_fracture_cell/__init__.py +++ b/object_fracture_cell/__init__.py @@ -56,6 +56,7 @@ def main_object(scene, obj, level, **kw): 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") + use_layer_index = kw_copy.pop("use_layer_index") 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") @@ -127,11 +128,18 @@ def main_object(scene, obj, level, **kw): # Scene Options # layer - if use_layer_next: + layers_new = None + if use_layer_index != 0: + layers_new = [False] * 20 + layers_new[use_layer_index - 1] = True + elif use_layer_next: layers_new = [False] * 20 layers_new[(obj.layers[:].index(True) + 1) % 20] = True + + if layers_new is not None: for obj_cell in objects: obj_cell.layers = layers_new + # group if group_name: group = bpy.data.groups.get(group_name) @@ -152,8 +160,12 @@ def main(context, **kw): import time t = time.time() scene = context.scene - obj = context.active_object - objects = main_object(scene, obj, 0, **kw) + objects_context = context.selected_editable_objects + + objects = [] + for obj in objects_context: + if obj.type == 'MESH': + objects += main_object(scene, obj, 0, **kw) bpy.ops.object.select_all(action='DESELECT') for obj_cell in objects: @@ -164,7 +176,7 @@ def main(context, **kw): class FractureCell(Operator): bl_idname = "object.add_fracture_cell_objects" - bl_label = "Cell Fracture Mesh" + bl_label = "Cell fracture selected mesh objects" bl_options = {'PRESET'} # ------------------------------------------------------------------------- @@ -291,9 +303,16 @@ class FractureCell(Operator): # .. dirreferent from object options in that this controls how the objects # are setup in the scene. + use_layer_index = IntProperty( + name="Layer Index", + description="Layer to add the objects into or 0 for existing", + default=-1, + min=0, max=20, + ) + use_layer_next = BoolProperty( name="Next Layer", - description="At the object into the next layer", + description="At the object into the next layer (layer index overrides)", default=True, ) @@ -382,6 +401,7 @@ class FractureCell(Operator): col = box.column() col.label("Scene") rowsub = col.row(align=True) + rowsub.prop(self, "use_layer_index") rowsub.prop(self, "use_layer_next") rowsub.prop(self, "group_name") @@ -393,22 +413,22 @@ class FractureCell(Operator): 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") + +def menu_func(self, context): + layout = self.layout + layout.label("Cell Fracture:") + layout.operator("object.add_fracture_cell_objects", + text="Cell Fracture") def register(): bpy.utils.register_class(FractureCell) - - # Add the "add fracture objects" menu to the "Add" menu - # bpy.types.INFO_MT_add.append(menu_func) + bpy.types.VIEW3D_PT_tools_objectmode.append(menu_func) def unregister(): bpy.utils.unregister_class(FractureCell) - - # Remove "add fracture objects" menu from the "Add" menu. - # bpy.types.INFO_MT_add.remove(menu_func) + bpy.types.VIEW3D_PT_tools_objectmode.remove(menu_func) if __name__ == "__main__": diff --git a/object_fracture_cell/fracture_cell_calc.py b/object_fracture_cell/fracture_cell_calc.py index 884fec1109fc1b6e281d386ae07efa774302ab37..acd8e976e4e4bf5d2da65e8eb9ea0c15b2479c9a 100644 --- a/object_fracture_cell/fracture_cell_calc.py +++ b/object_fracture_cell/fracture_cell_calc.py @@ -44,6 +44,9 @@ def points_as_bmesh_cells(verts, plane_indices = [] vertices = [] + if points_scale == (1.0, 1.0, 1.0): + points_scale = None + # there are many ways we could get planes - convex hull for eg # but it ends up fastest if we just use bounding box if 1: