update addons (for 5.2)
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
import bpy
|
||||
from .. import __package__ as base_package
|
||||
|
||||
from ..functions.canvas import (
|
||||
is_canvas,
|
||||
)
|
||||
|
||||
from .common import (
|
||||
get_modifier_from_list_index,
|
||||
boolean_extras_menu,
|
||||
)
|
||||
|
||||
|
||||
#### ------------------------------ PANELS ------------------------------ ####
|
||||
|
||||
# Boolean Operators Panel
|
||||
class VIEW3D_PT_boolean(bpy.types.Panel):
|
||||
bl_label = "Boolean"
|
||||
bl_space_type = "VIEW_3D"
|
||||
bl_region_type = "UI"
|
||||
bl_category = "Edit"
|
||||
bl_context = "objectmode"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
prefs = context.preferences.addons[base_package].preferences
|
||||
return prefs.show_in_sidebar
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.operator_context = 'INVOKE_DEFAULT'
|
||||
col = layout.column(align=True)
|
||||
|
||||
col.label(text="Auto Boolean")
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_auto_difference", text="Difference", icon='SELECT_SUBTRACT')
|
||||
row.operator("object.boolean_auto_difference", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_auto_union", text="Union", icon='SELECT_EXTEND')
|
||||
row.operator("object.boolean_auto_union", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_auto_intersect", text="Intersect", icon='SELECT_INTERSECT')
|
||||
row.operator("object.boolean_auto_intersect", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_auto_slice", text="Slice", icon='SELECT_DIFFERENCE')
|
||||
row.operator("object.boolean_auto_slice", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
|
||||
col.separator()
|
||||
col.label(text="Brush Boolean")
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_brush_difference", text="Difference", icon='SELECT_SUBTRACT')
|
||||
row.operator("object.boolean_brush_difference", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_brush_union", text="Union", icon='SELECT_EXTEND')
|
||||
row.operator("object.boolean_brush_union", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_brush_intersect", text="Intersect", icon='SELECT_INTERSECT')
|
||||
row.operator("object.boolean_brush_intersect", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
row = col.row(align=False)
|
||||
row.operator("object.boolean_brush_slice", text="Slice", icon='SELECT_DIFFERENCE')
|
||||
row.operator("object.boolean_brush_slice", text="", icon='UV_SYNC_SELECT').flip=True
|
||||
|
||||
|
||||
# Cutters Panel
|
||||
class VIEW3D_PT_boolean_cutters(bpy.types.Panel):
|
||||
bl_label = "Cutters"
|
||||
bl_space_type = "VIEW_3D"
|
||||
bl_region_type = "UI"
|
||||
bl_category = "Edit"
|
||||
bl_context = "objectmode"
|
||||
bl_parent_id = "VIEW3D_PT_boolean"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
prefs = context.preferences.addons[base_package].preferences
|
||||
if prefs.show_in_sidebar:
|
||||
if context.active_object:
|
||||
if is_canvas(context.active_object):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
canvas = context.active_object
|
||||
|
||||
# Cutters List
|
||||
row = layout.row()
|
||||
col = row.column()
|
||||
col.template_list(
|
||||
"VIEW3D_UL_boolean_cutters",
|
||||
"",
|
||||
canvas, "modifiers",
|
||||
canvas.booleans, "modifiers_list_index",
|
||||
rows=5,
|
||||
)
|
||||
|
||||
# Filter & Operators
|
||||
col = row.column(align=True)
|
||||
cutters_list_index = canvas.booleans.modifiers_list_index
|
||||
mod = get_modifier_from_list_index(canvas, cutters_list_index)
|
||||
sub = col.column(align=True)
|
||||
|
||||
# Apply Cutter
|
||||
op_apply = sub.operator("object.boolean_apply_cutter", text="", icon='CHECKMARK')
|
||||
op_apply.method = 'SPECIFIED'
|
||||
op_apply.specified_cutter = mod.object.name if mod else ""
|
||||
op_apply.specified_canvas = canvas.name
|
||||
|
||||
# Remove Cutter
|
||||
op_remove = sub.operator("object.boolean_remove_cutter", text="", icon='X')
|
||||
op_remove.method = 'SPECIFIED'
|
||||
op_remove.specified_cutter = mod.object.name if mod else ""
|
||||
op_remove.specified_canvas = canvas.name
|
||||
op_remove.specified_modifier = mod.name if mod else ""
|
||||
|
||||
if cutters_list_index < 0 or not mod:
|
||||
sub.enabled = False
|
||||
|
||||
col.separator()
|
||||
col.menu("VIEW3D_MT_boolean_specials", icon='DOWNARROW_HLT', text="")
|
||||
|
||||
|
||||
# Helpers Panel
|
||||
class VIEW3D_PT_boolean_helpers(bpy.types.Panel):
|
||||
bl_label = "Helpers"
|
||||
bl_space_type = "VIEW_3D"
|
||||
bl_region_type = "UI"
|
||||
bl_category = "Edit"
|
||||
bl_context = "objectmode"
|
||||
bl_parent_id = "VIEW3D_PT_boolean"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
prefs = context.preferences.addons[base_package].preferences
|
||||
if not prefs.show_in_sidebar:
|
||||
return False
|
||||
if not context.active_object:
|
||||
return False
|
||||
if context.active_object.booleans.cutter:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def draw(self, context):
|
||||
boolean_extras_menu(self, context, cutter_only=True)
|
||||
|
||||
|
||||
|
||||
#### ------------------------------ MENUS ------------------------------ ####
|
||||
|
||||
# Specials
|
||||
class VIEW3D_MT_boolean_specials(bpy.types.Menu):
|
||||
bl_label = "Boolean Operators"
|
||||
bl_idname = "VIEW3D_MT_boolean_specials"
|
||||
|
||||
def draw(self, context):
|
||||
boolean_extras_menu(self, context)
|
||||
|
||||
|
||||
|
||||
#### ------------------------------ REGISTRATION ------------------------------ ####
|
||||
|
||||
classes = (
|
||||
VIEW3D_PT_boolean,
|
||||
VIEW3D_PT_boolean_cutters,
|
||||
VIEW3D_PT_boolean_helpers,
|
||||
VIEW3D_MT_boolean_specials,
|
||||
)
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
def unregister():
|
||||
for cls in reversed(classes):
|
||||
bpy.utils.unregister_class(cls)
|
||||
Reference in New Issue
Block a user