Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Rachinskiy <mikhail.rachinskiy@gmail.com>2016-10-21 16:44:14 +0300
committerMikhail Rachinskiy <mikhail.rachinskiy@gmail.com>2016-10-21 16:44:14 +0300
commit29a86ac946c7424932586ebea8ac6d2f6b6435d2 (patch)
tree9802c8d453296d883b706759066a292ff6cfe175 /object_boolean_tools.py
parent49c39f59fbc464dd34388990123f271c39eacbf4 (diff)
BoolTool: Fix redo for Auto Booleans
Also rename Direct Booleans to Auto Booleans for consistency across the add-on.
Diffstat (limited to 'object_boolean_tools.py')
-rw-r--r--object_boolean_tools.py103
1 files changed, 54 insertions, 49 deletions
diff --git a/object_boolean_tools.py b/object_boolean_tools.py
index 7ef8d7a5..259ec8bf 100644
--- a/object_boolean_tools.py
+++ b/object_boolean_tools.py
@@ -581,9 +581,9 @@ class BTool_Slice(Operator):
return {'FINISHED'}
-# Direct boolean operators (maintainer Mikhail Rachinskiy) -------------------------------
+# Auto Boolean operators (maintainer Mikhail Rachinskiy) -------------------------------
-class DirectBoolean:
+class AutoBoolean:
bl_options = {'REGISTER', 'UNDO'}
solver = EnumProperty(
@@ -599,9 +599,8 @@ class DirectBoolean:
def __init__(self):
self.context = bpy.context
self.solver = self.context.user_preferences.addons[__name__].preferences.solver
- self.prepare_objects()
- def prepare_objects(self):
+ def objects_prepare(self):
for ob in self.context.selected_objects:
if ob.type != 'MESH':
ob.select = False
@@ -628,62 +627,67 @@ class DirectBoolean:
self.boolean_mod(obj, ob, self.mode)
obj.select = True
- def boolean_mod(self, obj, ob, mode, delete_ob=True):
- md = obj.modifiers.new("Direct Boolean", 'BOOLEAN')
+ def boolean_mod(self, obj, ob, mode, ob_delete=True):
+ md = obj.modifiers.new("Auto Boolean", 'BOOLEAN')
md.show_viewport = False
md.operation = mode
md.solver = self.solver
md.object = ob
- bpy.ops.object.modifier_apply(modifier="Direct Boolean")
- if not delete_ob:
+ bpy.ops.object.modifier_apply(modifier="Auto Boolean")
+ if not ob_delete:
return
self.context.scene.objects.unlink(ob)
bpy.data.objects.remove(ob)
-class Direct_Union(DirectBoolean, Operator):
+class Auto_Union(AutoBoolean, Operator):
"""Combine selected objects"""
- bl_idname = "btool.direct_union"
+ bl_idname = "btool.auto_union"
bl_label = "Union"
mode = 'UNION'
def execute(self, context):
+ self.objects_prepare()
self.boolean_operation()
return {'FINISHED'}
-class Direct_Difference(DirectBoolean, Operator):
+class Auto_Difference(AutoBoolean, Operator):
"""Subtract selected objects from active object"""
- bl_idname = "btool.direct_difference"
+ bl_idname = "btool.auto_difference"
bl_label = "Difference"
mode = 'DIFFERENCE'
def execute(self, context):
+ self.objects_prepare()
self.boolean_operation()
return {'FINISHED'}
-class Direct_Intersect(DirectBoolean, Operator):
+class Auto_Intersect(AutoBoolean, Operator):
"""Keep only intersecting geometry"""
- bl_idname = "btool.direct_intersect"
+ bl_idname = "btool.auto_intersect"
bl_label = "Intersect"
mode = 'INTERSECT'
def execute(self, context):
+ self.objects_prepare()
self.boolean_operation()
return {'FINISHED'}
-class Direct_Slice(DirectBoolean, Operator):
+class Auto_Slice(AutoBoolean, Operator):
"""Slice active object along the selected object (can handle only two objects at a time)"""
- bl_idname = "btool.direct_slice"
+ bl_idname = "btool.auto_slice"
bl_label = "Slice"
def execute(self, context):
+ self.objects_prepare()
+
scene = context.scene
obj = context.active_object
obj.select = False
@@ -696,7 +700,7 @@ class Direct_Slice(DirectBoolean, Operator):
obj_copy.data = obj.data.copy()
scene.objects.link(obj_copy)
- self.boolean_mod(obj, ob, 'DIFFERENCE', delete_ob=False)
+ self.boolean_mod(obj, ob, 'DIFFERENCE', ob_delete=False)
scene.objects.active = obj_copy
self.boolean_mod(obj_copy, ob, 'INTERSECT')
obj_copy.select = True
@@ -704,20 +708,22 @@ class Direct_Slice(DirectBoolean, Operator):
return {'FINISHED'}
-class Direct_Subtract(DirectBoolean, Operator):
+class Auto_Subtract(AutoBoolean, Operator):
"""Subtract selected object from active object, """ \
"""subtracted object not removed (can handle only two objects at a time)"""
- bl_idname = "btool.direct_subtract"
+ bl_idname = "btool.auto_subtract"
bl_label = "Subtract"
def execute(self, context):
+ self.objects_prepare()
+
obj = context.active_object
obj.select = False
ob = context.selected_objects[0]
self.mesh_selection(obj, 'DESELECT')
self.mesh_selection(ob, 'SELECT')
- self.boolean_mod(obj, ob, 'DIFFERENCE', delete_ob=False)
+ self.boolean_mod(obj, ob, 'DIFFERENCE', ob_delete=False)
return {'FINISHED'}
@@ -885,11 +891,11 @@ class BoolTool_Menu(Menu):
layout = self.layout
layout.label("Auto Boolean:")
- layout.operator(btool.direct_difference, icon="ROTACTIVE")
- layout.operator(btool.direct_union, icon="ROTATECOLLECTION")
- layout.operator(btool.direct_intersect, icon="ROTATECENTER")
- layout.operator(btool.direct_slice, icon="ROTATECENTER")
- layout.operator(btool.direct_subtract, icon="ROTACTIVE")
+ layout.operator(Auto_Difference.bl_idname, icon="ROTACTIVE")
+ layout.operator(Auto_Union.bl_idname, icon="ROTATECOLLECTION")
+ layout.operator(Auto_Intersect.bl_idname, icon="ROTATECENTER")
+ layout.operator(Auto_Slice.bl_idname, icon="ROTATECENTER")
+ layout.operator(Auto_Subtract.bl_idname, icon="ROTACTIVE")
layout.separator()
layout.label("Brush Boolean:")
@@ -934,14 +940,14 @@ class BoolTool_Tools(Panel):
col = layout.column(align=True)
col.label("Auto Boolean:", icon="MODIFIER")
col.separator()
- col.operator(Direct_Difference.bl_idname, icon="ROTACTIVE")
- col.operator(Direct_Union.bl_idname, icon="ROTATECOLLECTION")
- col.operator(Direct_Intersect.bl_idname, icon="ROTATECENTER")
+ col.operator(Auto_Difference.bl_idname, icon="ROTACTIVE")
+ col.operator(Auto_Union.bl_idname, icon="ROTATECOLLECTION")
+ col.operator(Auto_Intersect.bl_idname, icon="ROTATECENTER")
col = layout.column(align=True)
col.enabled = len(context.selected_objects) == 2
- col.operator(Direct_Slice.bl_idname, icon="ROTATECENTER")
- col.operator(Direct_Subtract.bl_idname, icon="ROTACTIVE")
+ col.operator(Auto_Slice.bl_idname, icon="ROTATECENTER")
+ col.operator(Auto_Subtract.bl_idname, icon="ROTACTIVE")
layout.separator()
@@ -1017,7 +1023,6 @@ class BoolTool_Config(Panel):
row = layout.row(True)
row.label("BRUSH", icon=icon)
- # layout.separator()
icon = ""
if actObj["BoolTool_FTransform"] == "True":
@@ -1250,11 +1255,11 @@ class BoolTool_Pref(AddonPreferences):
row = layout.row()
col = row.column()
- col.label("Direct Operators:")
- col.label("Direct Union: Ctrl Shift Num +")
- col.label("Direct Difference: Ctrl Shift Num -")
- col.label("Direct Intersect: Ctrl Shift Num *")
- col.label("Direct Slice: Ctrl Shift Num /")
+ col.label("Auto Operators:")
+ col.label("Difference: Ctrl Shift Num -")
+ col.label("Union: Ctrl Shift Num +")
+ col.label("Intersect: Ctrl Shift Num *")
+ col.label("Slice: Ctrl Shift Num /")
col.label("BTool Brush To Mesh: Ctrl Num Enter")
col.label("BTool All Brush To Mesh: Ctrl Shift Num Enter")
@@ -1267,13 +1272,13 @@ classes = (
BoolTool_Tools,
BoolTool_Config,
BoolTool_BViwer,
- # Direct Booleans
- Direct_Union,
- Direct_Difference,
- Direct_Intersect,
- Direct_Slice,
- Direct_Subtract,
- # Bool Tools
+
+ Auto_Union,
+ Auto_Difference,
+ Auto_Intersect,
+ Auto_Slice,
+ Auto_Subtract,
+
BTool_Union,
BTool_Diff,
BTool_Inters,
@@ -1351,15 +1356,15 @@ def register():
kmi = km.keymap_items.new(BTool_Diff.bl_idname, 'NUMPAD_MINUS', 'PRESS', ctrl=True)
kmi = km.keymap_items.new(BTool_Inters.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', ctrl=True)
kmi = km.keymap_items.new(BTool_Slice.bl_idname, 'NUMPAD_SLASH', 'PRESS', ctrl=True)
-
- # Direct Operators
- kmi = km.keymap_items.new(Direct_Union.bl_idname, 'NUMPAD_PLUS', 'PRESS', ctrl=True, shift=True)
- kmi = km.keymap_items.new(Direct_Difference.bl_idname, 'NUMPAD_MINUS', 'PRESS', ctrl=True, shift=True)
- kmi = km.keymap_items.new(Direct_Intersect.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', ctrl=True, shift=True)
- kmi = km.keymap_items.new(Direct_Slice.bl_idname, 'NUMPAD_SLASH', 'PRESS', ctrl=True, shift=True)
kmi = km.keymap_items.new(BTool_BrushToMesh.bl_idname, 'NUMPAD_ENTER', 'PRESS', ctrl=True)
kmi = km.keymap_items.new(BTool_AllBrushToMesh.bl_idname, 'NUMPAD_ENTER', 'PRESS', ctrl=True, shift=True)
+ # Auto Operators
+ kmi = km.keymap_items.new(Auto_Union.bl_idname, 'NUMPAD_PLUS', 'PRESS', ctrl=True, shift=True)
+ kmi = km.keymap_items.new(Auto_Difference.bl_idname, 'NUMPAD_MINUS', 'PRESS', ctrl=True, shift=True)
+ kmi = km.keymap_items.new(Auto_Intersect.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', ctrl=True, shift=True)
+ kmi = km.keymap_items.new(Auto_Slice.bl_idname, 'NUMPAD_SLASH', 'PRESS', ctrl=True, shift=True)
+
addon_keymaps.append(km)