Newer
Older
EnableIcon = "RESTRICT_VIEW_OFF"
Enable = row.operator(BTool_EnableBrush.bl_idname, icon=EnableIcon, emboss=False)
Enable.thisObj = mod.object.name
Remove = row.operator("btool.remove", text="", icon="X", emboss=False)
Remove.thisObj = mod.object.name
Remove.Prop = "THIS"
else:
row.label(text=mod.name)
Up = row.operator("btool.move_stack", icon="TRIA_UP", emboss=False)
Up.modif = mod.name
Up.direction = "UP"
Dw = row.operator("btool.move_stack", icon="TRIA_DOWN", emboss=False)
Dw.modif = mod.name
Dw.direction = "DOWN"
# ------------------ BOOL TOOL ADD-ON PREFERENCES ----------------------------
shortcut_list = (
("3D View", None),
("Menu", "Ctrl Shift B"),
("Auto Operators", None),
("Difference", "Ctrl Shift Num -"),
("Union", "Ctrl Shift Num +"),
("Intersect", "Ctrl Shift Num *"),
("Slice", "Ctrl Shift Num /"),
("Brush Operators", None),
("Difference", "Ctrl Num -"),
("Union", "Ctrl Num +"),
("Intersect", "Ctrl Num *"),
("Slice", "Ctrl Num /"),
("Brush To Mesh", "Ctrl Num Enter"),
("All Brushes To Mesh", "Ctrl Shift Num Enter"),
)
def UpdateBoolTool_Pref(self, context):
if self.fast_transform:
RegisterFastT()
else:
UnRegisterFastT()
# Define Panel classes for updating
panels = (
VIEW3D_PT_booltool_tools,
VIEW3D_PT_booltool_config,
VIEW3D_PT_booltool_bviewer,
def update_panels(self, context):
for panel in panels:
if "bl_rna" in panel.__dict__:
bpy.utils.unregister_class(panel)
for panel in panels:
panel.bl_category = context.preferences.addons[
__name__
].preferences.category
bpy.utils.register_class(panel)
except Exception as e:
message = "Bool Tool: Updating Panel locations has failed"
print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e))
def icon_tria(prop):
if prop:
return "TRIA_DOWN"
return "TRIA_RIGHT"
class PREFS_BoolTool_Props(AddonPreferences):
bl_idname = __name__
fast_transform: BoolProperty(
name="Fast Transformations",
update=UpdateBoolTool_Pref,
description="Replace the Transform HotKeys (G,R,S)\n"
"for a custom version that can optimize the visualization of Brushes",
)
use_wire: BoolProperty(
description="Display brush as wireframe instead of bounding box",
)
category: StringProperty(
name="Tab Name",
description="Set sidebar tab name",
default="Edit",
update=update_panels,
)
show_shortcuts: BoolProperty(name="Shortcuts")
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False
col = layout.column()
col.prop(self, "category")
col.prop(self, "fast_transform")
col.prop(self, "use_wire")
col = layout.column()
col.scale_y = 1.2
col.use_property_split = False
col.prop(self, "show_shortcuts", icon=icon_tria(self.show_shortcuts))
if self.show_shortcuts:
col = layout.column()
for key_name, key_comb in shortcut_list:
if key_comb is None:
col.separator()
col.label(text=key_name)
else:
row = col.row(align=True)
row.scale_y = 0.7
row.box().label(text=key_name)
row.box().label(text=key_comb)
# ------------------- Class List ------------------------------------------------
PREFS_BoolTool_Props,
VIEW3D_MT_booltool_menu,
VIEW3D_PT_booltool_tools,
VIEW3D_PT_booltool_config,
VIEW3D_PT_booltool_bviewer,
OBJECT_OT_BoolTool_Auto_Union,
OBJECT_OT_BoolTool_Auto_Difference,
OBJECT_OT_BoolTool_Auto_Intersect,
OBJECT_OT_BoolTool_Auto_Slice,
BTool_Union,
BTool_Diff,
BTool_Inters,
BTool_Slice,
BTool_Remove,
BTool_AllBrushToMesh,
BTool_BrushToMesh,
BTool_FindBrush,
BTool_MoveStack,
BTool_EnableBrush,
BTool_EnableThisBrush,
BTool_EnableFTransform,
BTool_FastTransform,
# ------------------- REGISTER ------------------------------------------------
addon_keymaps = []
addon_keymapsFastT = []
# Fast Transform HotKeys Register
def RegisterFastT():
wm = bpy.context.window_manager
km = wm.keyconfigs.addon.keymaps.new(name="Object Mode", space_type="EMPTY")
kmi = km.keymap_items.new(BTool_FastTransform.bl_idname, "G", "PRESS")
kmi.properties.operator = "Translate"
addon_keymapsFastT.append((km, kmi))
kmi = km.keymap_items.new(BTool_FastTransform.bl_idname, "R", "PRESS")
kmi.properties.operator = "Rotate"
addon_keymapsFastT.append((km, kmi))
kmi = km.keymap_items.new(BTool_FastTransform.bl_idname, "S", "PRESS")
kmi.properties.operator = "Scale"
addon_keymapsFastT.append((km, kmi))
# Fast Transform HotKeys UnRegister
def UnRegisterFastT():
wm = bpy.context.window_manager
kc = wm.keyconfigs.addon
if kc:
for km, kmi in addon_keymapsFastT:
km.keymap_items.remove(kmi)
addon_keymapsFastT.clear()
def register():
for cls in classes:
bpy.utils.register_class(cls)
update_panels(None, bpy.context)
bpy.types.Scene.BoolHide = BoolProperty(
default=False,
description="Hide boolean objects",
update=update_BoolHide,
)
bpy.types.VIEW3D_MT_object.append(VIEW3D_BoolTool_Menu)
kc = wm.keyconfigs.addon
# create the boolean menu hotkey
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
if kc is not None:
km = kc.keymaps.new(name="Object Mode")
kmi = km.keymap_items.new("wm.call_menu", "B", "PRESS", ctrl=True, shift=True)
kmi.properties.name = "VIEW3D_MT_booltool_menu"
addon_keymaps.append((km, kmi))
# Brush Operators
kmi = km.keymap_items.new(BTool_Union.bl_idname, "NUMPAD_PLUS", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(BTool_Diff.bl_idname, "NUMPAD_MINUS", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(BTool_Inters.bl_idname, "NUMPAD_ASTERIX", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(BTool_Slice.bl_idname, "NUMPAD_SLASH", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(BTool_BrushToMesh.bl_idname, "NUMPAD_ENTER", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(
BTool_AllBrushToMesh.bl_idname,
"NUMPAD_ENTER",
"PRESS",
ctrl=True,
shift=True,
)
addon_keymaps.append((km, kmi))
# Auto Operators
kmi = km.keymap_items.new(
OBJECT_OT_BoolTool_Auto_Union.bl_idname,
"NUMPAD_PLUS",
"PRESS",
ctrl=True,
shift=True,
)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(
OBJECT_OT_BoolTool_Auto_Difference.bl_idname,
"NUMPAD_MINUS",
"PRESS",
ctrl=True,
shift=True,
)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(
OBJECT_OT_BoolTool_Auto_Intersect.bl_idname,
"NUMPAD_ASTERIX",
"PRESS",
ctrl=True,
shift=True,
)
addon_keymaps.append((km, kmi))
kmi = km.keymap_items.new(
OBJECT_OT_BoolTool_Auto_Slice.bl_idname,
"NUMPAD_SLASH",
"PRESS",
ctrl=True,
shift=True,
)
addon_keymaps.append((km, kmi))
def unregister():
# Keymapping
# remove keymaps when add-on is deactivated
wm = bpy.context.window_manager
kc = wm.keyconfigs.addon
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
UnRegisterFastT()
bpy.types.VIEW3D_MT_object.remove(VIEW3D_BoolTool_Menu)
del bpy.types.Scene.BoolHide
for cls in classes:
bpy.utils.unregister_class(cls)
if __name__ == "__main__":