[Bf-extensions-cvs] [e015d89c] master: Initial commit selectbuffer: T51221

kostex noreply at git.blender.org
Mon Apr 24 14:06:42 CEST 2017


Commit: e015d89c5ad094b52efc2a2d4646312de5b326ee
Author: kostex
Date:   Mon Apr 24 13:05:50 2017 +0100
Branches: master
https://developer.blender.org/rBACe015d89c5ad094b52efc2a2d4646312de5b326ee

Initial commit selectbuffer: T51221

===================================================================

A	mesh_selectbuffer.py

===================================================================

diff --git a/mesh_selectbuffer.py b/mesh_selectbuffer.py
new file mode 100644
index 00000000..070f6606
--- /dev/null
+++ b/mesh_selectbuffer.py
@@ -0,0 +1,125 @@
+# ##### 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 #####
+
+bl_info = {
+    "name": "KTX Selectbuffer",
+    "author": "Roel Koster, @koelooptiemanna, irc:kostex",
+    "version": (1, 3),
+    "blender": (2, 7, 0),
+    "location": "View3D > Properties",
+    "category": "3D View"}
+
+import bpy
+from bpy.types import Panel
+from bpy.props import StringProperty
+
+class Oldbuffer():
+    data = []
+
+class KTX_Selectbuffer_Mutate(bpy.types.Operator):
+    bl_label = "select buffer mutate"
+    bl_idname = "ktx.selectbuffer_mutate"
+    bl_description = ("A.union(B) elements from both A and B\n"
+                      "A.difference(B) elements in A but not in B\n"
+                      "A.symmetric_difference(B) elements in either A or B but not both\n"
+                      "A.intersection(B) elements common to A and B")
+
+    operation = StringProperty()
+    
+    def execute(self, context):
+        old_buffer=bpy.context.scene.ktx_selectbuffer
+        emode = bpy.context.tool_settings.mesh_select_mode
+
+        c_mode=bpy.context.object.mode
+        bpy.ops.object.mode_set(mode='OBJECT')
+
+        if emode[0]==True:
+            all_vefs = bpy.context.object.data.vertices
+        elif emode[1]==True:
+            all_vefs = bpy.context.object.data.edges
+        elif emode[2]==True:
+            all_vefs = bpy.context.object.data.polygons
+
+        selected_vefs = [vef for vef in all_vefs if vef.select]
+        selected_vefs_buffer=[]
+        for vef in selected_vefs:
+            selected_vefs_buffer.append(vef.index)
+        if self.operation == 'union':
+            resulting_vefs = set(old_buffer.data).union(selected_vefs_buffer)
+        elif self.operation == 'difference':
+            resulting_vefs = set(old_buffer.data).difference(selected_vefs_buffer)
+        elif self.operation == 'sym_difference':
+            resulting_vefs = set(old_buffer.data).symmetric_difference(selected_vefs_buffer)
+        elif self.operation == 'intersection':
+            resulting_vefs = set(old_buffer.data).intersection(selected_vefs_buffer)
+        elif self.operation == 'set':
+            resulting_vefs = selected_vefs_buffer
+        elif self.operation == 'clear':
+            resulting_vefs = []
+        old_buffer.data=resulting_vefs
+        bpy.ops.object.mode_set(mode = 'EDIT') 
+        bpy.ops.mesh.select_all(action = 'DESELECT')
+        bpy.ops.object.mode_set(mode = 'OBJECT')         
+        for vef in resulting_vefs:
+             all_vefs[vef].select=True
+        bpy.ops.object.mode_set(mode=c_mode)
+
+        bpy.ops.ed.undo_push()
+
+        return {'FINISHED'}
+
+
+class KTX_Selectbuffer(bpy.types.Panel):
+    bl_label = "KTX Selectbuffer"
+    bl_idname = "ktx.selectbuffer"
+    bl_space_type = 'VIEW_3D'
+    bl_region_type = 'UI'
+
+    def draw(self, context):
+        obj = bpy.context.object
+        layout = self.layout
+        row = layout.row()
+        col = row.column()
+        if obj == None:
+            col.label(text='Select/Create something first')
+        else:
+            if obj.type == 'MESH':
+                c_mode = bpy.context.object.mode
+                if c_mode == 'EDIT':
+                    col.operator("ktx.selectbuffer_mutate", text="Set").operation = 'set'
+                    col.operator("ktx.selectbuffer_mutate", text="Clear").operation = 'clear'
+                    col.operator("ktx.selectbuffer_mutate", text="Union").operation = 'union'
+                    col.operator("ktx.selectbuffer_mutate", text="Difference").operation = 'difference'
+                    col.operator("ktx.selectbuffer_mutate", text="Symmetric Difference").operation = 'sym_difference'
+                    col.operator("ktx.selectbuffer_mutate", text="Intersection").operation = 'intersection'
+                else:
+                    col.label(text='Enter EDIT Mode to use')
+            else:
+                col.label(text='Select a Mesh Object')
+
+
+def register():
+    bpy.utils.register_module(__name__)
+    bpy.types.Scene.ktx_selectbuffer = Oldbuffer()
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    del bpy.types.Scene.ktx_selectbuffer
+
+if __name__ == "__main__":
+    register()



More information about the Bf-extensions-cvs mailing list