[Bf-extensions-cvs] [1833798] master: Add object_boolean_tools.py to release. re: T48309
meta-androcto
noreply at git.blender.org
Sun Jul 31 11:18:01 CEST 2016
Commit: 1833798d7d71abe8099ec01d2bdf38d2099f0fd5
Author: meta-androcto
Date: Sun Jul 31 19:17:19 2016 +1000
Branches: master
https://developer.blender.org/rBA1833798d7d71abe8099ec01d2bdf38d2099f0fd5
Add object_boolean_tools.py to release. re: T48309
===================================================================
A object_boolean_tools.py
===================================================================
diff --git a/object_boolean_tools.py b/object_boolean_tools.py
new file mode 100644
index 0000000..6e857ce
--- /dev/null
+++ b/object_boolean_tools.py
@@ -0,0 +1,1371 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+bl_info = {
+ "name": "Bool Tool",
+ "author": "Vitor Balbio, Mikhail Rachinskiy, TynkaTopi, Meta-Androcto",
+ "version": (0, 3, 3),
+ "blender": (2, 77, 0),
+ "location": "View3D > Toolshelf > BoolTool",
+ "description": "Bool Tools Hotkey: Ctrl Shift B",
+ "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Object/BoolTool",
+ "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
+ "category": "Object",
+ }
+
+import bpy
+from bpy.app.handlers import persistent
+from bpy.types import (
+ Operator,
+ Panel,
+ )
+
+
+# ------------------- Bool Tool FUNCTIONS------------------------------
+# Utils:
+
+# Hide boolean objects
+def update_BoolHide(self, context):
+ ao = context.scene.objects.active
+ objs = [i.object for i in ao.modifiers if i.type == 'BOOLEAN']
+ hide_state = context.scene.BoolHide
+
+ for o in objs:
+ o.hide = hide_state
+
+# Object is a Canvas
+
+
+def isCanvas(_obj):
+ try:
+ if _obj["BoolToolRoot"]:
+ return True
+ except:
+ return False
+
+
+# Object is a Brush Tool Bool
+def isBrush(_obj):
+ try:
+ if _obj["BoolToolBrush"]:
+ return True
+ except:
+ return False
+
+
+# Object is a Poly Brush Tool Bool collection
+def isPolyBrush(_obj):
+ try:
+ if _obj["BoolToolPolyBrush"]:
+ return True
+ except:
+ return False
+
+
+def BT_ObjectByName(obj):
+ for ob in bpy.context.scene.objects:
+ if isCanvas(ob) or isBrush(ob):
+ if ob.name == obj:
+ return ob
+
+
+def FindCanvas(obj):
+ for ob in bpy.context.scene.objects:
+ if isCanvas(ob):
+ for mod in ob.modifiers:
+ if ("BTool_" in mod.name):
+ if (obj.name in mod.name):
+ return ob
+
+
+def isFTransf():
+ user_preferences = bpy.context.user_preferences
+ addons = user_preferences.addons
+ addon_prefs = addons[__name__].preferences
+ if addon_prefs.fast_transform:
+ return True
+ else:
+ return False
+
+
+"""
+# EXPERIMENTAL FEATURES
+def isMakeVertexGroup():
+ user_preferences = bpy.context.user_preferences
+ addon_prefs = user_preferences.addons[__name__].preferences
+ if addon_prefs.make_vertex_groups:
+ return True
+ else:
+ return False
+
+def isMakeBoundary():
+ user_preferences = bpy.context.user_preferences
+ addon_prefs = user_preferences.addons[__name__].preferences
+ if addon_prefs.make_boundary:
+ return True
+ else:
+ return False
+"""
+
+
+def ConvertToMesh(obj):
+ act = bpy.context.scene.objects.active
+ bpy.context.scene.objects.active = obj
+ bpy.ops.object.convert(target="MESH")
+ bpy.context.scene.objects.active = act
+
+
+# Do the Union, Difference and Intersection Operations with a Brush
+def Operation(context, _operation):
+
+ useWire = bpy.context.user_preferences.addons[__name__].preferences.use_wire
+
+ for selObj in bpy.context.selected_objects:
+ if selObj != context.active_object and (selObj.type == "MESH" or selObj.type == "CURVE"):
+ if selObj.type == "CURVE":
+ ConvertToMesh(selObj)
+ actObj = context.active_object
+ selObj.hide_render = True
+ cyclesVis = selObj.cycles_visibility
+ # for obj in bpy.context.scene.objects:
+ # if isCanvas(obj):
+ # for mod in obj.modifiers:
+ # if(mod.name == "BTool_" + selObj.name):
+ # obj.modifiers.remove(mod)
+
+ if useWire:
+ selObj.draw_type = "WIRE"
+ else:
+ selObj.draw_type = "BOUNDS"
+
+ cyclesVis.camera = False
+ cyclesVis.diffuse = False
+ cyclesVis.glossy = False
+ cyclesVis.shadow = False
+ cyclesVis.transmission = False
+ if _operation == "SLICE":
+ # copies dupli_group property(empty), but group property is empty (users_group = None)
+ clone = context.active_object.copy()
+ # clone.select=True
+ context.scene.objects.link(clone)
+ sliceMod = clone.modifiers.new("BTool_" + selObj.name, "BOOLEAN") # add mod to clone obj
+ sliceMod.object = selObj
+ sliceMod.operation = "DIFFERENCE"
+ clone["BoolToolRoot"] = True
+ newMod = actObj.modifiers.new("BTool_" + selObj.name, "BOOLEAN")
+ newMod.object = selObj
+ if _operation == "SLICE":
+ newMod.operation = "INTERSECT"
+ else:
+ newMod.operation = _operation
+
+ actObj["BoolToolRoot"] = True
+ selObj["BoolToolBrush"] = _operation
+ selObj["BoolTool_FTransform"] = "False"
+
+
+# Do Direct Union, Difference and Intersection Operations
+def Operation_Direct(context, _operation):
+ actObj = context.active_object
+
+ useWire = bpy.context.user_preferences.addons[__name__].preferences.use_wire
+ for selObj in bpy.context.selected_objects:
+ if selObj != context.active_object and (selObj.type == "MESH" or selObj.type == "CURVE"):
+ if selObj.type == "CURVE":
+ ConvertToMesh(selObj)
+ actObj = context.active_object
+ if useWire:
+ selObj.draw_type = "WIRE"
+ else:
+ selObj.draw_type = "BOUNDS"
+ if _operation == "SLICE":
+ # copies dupli_group property(empty), but group property is empty (users_group = None)
+ clone = context.active_object.copy()
+ # clone.select=True
+ clone.data = context.active_object.data.copy()
+ context.scene.objects.link(clone)
+ sliceMod = clone.modifiers.new("BTool_" + selObj.name, "BOOLEAN") # add mod to clone obj
+ sliceMod.object = selObj
+ sliceMod.operation = "DIFFERENCE"
+
+ bpy.ops.object.modifier_apply(modifier=sliceMod.name)
+
+ newMod = actObj.modifiers.new("BTool_" + selObj.name, "BOOLEAN")
+ if _operation == "SLICE":
+ newMod.operation = "INTERSECT"
+ else:
+ newMod.operation = _operation
+ newMod.object = selObj
+ bpy.ops.object.modifier_apply(modifier=newMod.name)
+ bpy.ops.object.select_all(action='DESELECT')
+ # selObj.select = True
+ # bpy.ops.object.delete()
+
+
+# Remove Obejcts form the BoolTool System
+def Remove(context, thisObj_name, Prop):
+ # Find the Brush pointed in the Tree View and Restore it, active is the Canvas
+ actObj = context.active_object
+
+ # Restore the Brush
+ def RemoveThis(_thisObj_name):
+ for obj in bpy.context.scene.objects:
+ # if it's the brush object
+ if obj.name == _thisObj_name:
+ cyclesVis = obj.cycles_visibility
+ obj.draw_type = "TEXTURED"
+ del obj["BoolToolBrush"]
+ del obj["BoolTool_FTransform"]
+ cyclesVis.camera = True
+ cyclesVis.diffuse = True
+ cyclesVis.glossy = True
+ cyclesVis.shadow = True
+ cyclesVis.transmission = True
+
+ # Remove it from the Canvas
+ for mod in actObj.modifiers:
+ if ("BTool_" in mod.name):
+ if (_thisObj_name in mod.name):
+ actObj.modifiers.remove(mod)
+
+ if Prop == "THIS":
+ RemoveThis(thisObj_name)
+
+ # If the remove was called from the Properties:
+ else:
+ # Remove the Brush Property
+ if Prop == "BRUSH":
+ Canvas = FindCanvas(actObj)
+ for mod in Canvas.modifiers:
+ if ("BTool_" in mod.name):
+ if (actObj.name in mod.name):
+ Canvas.modifiers.remove(mod)
+ cyclesVis = actObj.cycles_visibility
+ actObj.draw_type = "TEXTURED"
+ del actObj["BoolToolBrush"]
+ del actObj["BoolTool_FTransform"]
+ cyclesVis.camera = True
+ cyclesVis.diffuse = True
+ cyclesVis.glossy = True
+ cyclesVis.shadow = True
+ cyclesVis.transmission = True
+
+ if Prop == "CANVAS":
+ for mod in actObj.modifiers:
+ if ("BTool_" in mod.name):
+ RemoveThis(mod.object.name)
+
+
+# Tooble the Enable the Brush Object Propertie
+def EnableBrush(context, objList, canvas):
+ for obj in objList:
+ for mod in canvas.modifiers:
+ if ("BTool_" in mod.name and mod.object.name == obj):
+
+ if (mod.show_viewport):
+ mod.show_viewport = False
+ mod.show_render = False
+ else:
+ mod.show_viewport = True
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list