[Bf-extensions-cvs] [e49606ff] master: initial commit mesh versions: T51177

meta-androcto noreply at git.blender.org
Sat Apr 22 01:58:40 CEST 2017


Commit: e49606ffe0b244989f05b08a04f2405def2bf337
Author: meta-androcto
Date:   Sat Apr 22 09:58:11 2017 +1000
Branches: master
https://developer.blender.org/rBACe49606ffe0b244989f05b08a04f2405def2bf337

initial commit mesh versions: T51177

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

A	object_mesh_versions.py

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

diff --git a/object_mesh_versions.py b/object_mesh_versions.py
new file mode 100644
index 00000000..3ba5b9e6
--- /dev/null
+++ b/object_mesh_versions.py
@@ -0,0 +1,160 @@
+bl_info = {
+    "name": "KTX Mesh Versions",
+    "author": "Roel Koster, @koelooptiemanna, irc:kostex",
+    "version": (1, 4),
+    "blender": (2, 7, 0),
+    "location": "View3D > Properties",
+    "category": "Object"}
+
+import bpy,time
+from datetime import datetime
+from bpy.types import Menu, Panel
+from bpy.props import StringProperty, BoolProperty, IntProperty
+
+class KTX_MeshInit(bpy.types.Operator):
+    bl_label = "Initialise Mesh Versioning"
+    bl_idname = "ktx.meshversions_init"
+    bl_description = "Initialise the current object to support versioning (Rename object/mesh to unique name)"
+        
+    def execute(self, context):
+        c_mode=bpy.context.object.mode
+        if c_mode != 'OBJECT':
+            bpy.ops.object.mode_set(mode='OBJECT')
+        obj = context.object
+        dt = datetime.now().strftime('_%y%m%d%H%M%S')
+        obj.name=obj.name+dt
+        obj.data.name=obj.name
+        bpy.ops.object.mode_set(mode=c_mode)
+        return {'FINISHED'}
+
+
+class KTX_MeshSelect(bpy.types.Operator):
+    bl_label = "select mesh"
+    bl_idname = "ktx.meshversions_select"
+    bl_description = "Change the current mesh to this version"
+    
+    m_index = StringProperty()
+    
+    def execute(self, context):
+        c_mode=bpy.context.object.mode
+        if c_mode != 'OBJECT':
+            bpy.ops.object.mode_set(mode='OBJECT')
+        obj = context.object
+        obj.data = bpy.data.meshes[self.m_index]
+        bpy.ops.object.mode_set(mode=c_mode)
+        return {'FINISHED'}
+
+class KTX_MeshRemove(bpy.types.Operator):
+    bl_label = "remove mesh"
+    bl_idname = "ktx.meshversions_remove"
+    bl_description = "Remove the current mesh"
+    
+    m_index = StringProperty()
+    
+    def execute(self, context):
+        bpy.data.meshes.remove(bpy.data.meshes[self.m_index])
+        return {'FINISHED'}
+
+
+class KTX_MeshFake(bpy.types.Operator):
+    bl_label = "mesh fake user"
+    bl_idname = "ktx.meshversions_fakeuser"
+    bl_description = "If pinned (FAKE_USER=TRUE) this mesh will be saved in the blend file\nIf unpinned (FAKE_USER=FALSE) this mesh will be discarded when saving the blend file"
+    
+    m_index = StringProperty()
+    
+    def execute(self, context):
+        me=bpy.data.meshes
+        if me[self.m_index].use_fake_user:
+            me[self.m_index].use_fake_user=False
+        else:
+            me[self.m_index].use_fake_user=True
+
+        return {'FINISHED'}
+
+
+class KTX_MeshCreate(bpy.types.Operator):
+    bl_label = "Create Mesh Version"
+    bl_idname = "ktx.meshversions_create"
+    bl_description=("Create a copy of the mesh data of the current object\n"
+                    "and set it as active")
+    def execute(self, context):
+        defpin = bpy.context.scene.ktx_defpin
+        obj = context.object
+        if obj.type=='MESH':
+            c_mode=bpy.context.object.mode
+            me=obj.data
+            if c_mode != 'OBJECT':
+                bpy.ops.object.mode_set(mode='OBJECT')
+            new_mesh=me.copy()
+            obj.data=new_mesh
+            obj.data.use_fake_user=defpin
+            bpy.ops.object.mode_set(mode=c_mode)
+
+        return {'FINISHED'}
+
+
+class KTX_Mesh_Versions(bpy.types.Panel):
+    bl_label = "KTX Mesh Versions"
+    bl_idname = "ktx.meshversions"
+    bl_space_type = 'VIEW_3D'
+    bl_region_type = 'UI'
+
+    def draw(self, context):
+        scene = context.scene
+        obj = context.object
+
+        layout = self.layout
+        col = layout.column()
+        if obj == None:
+            col.label('Select/Create something first!')
+        else:
+            if obj.type == 'MESH':
+                if len(obj.name) > 14:
+                    if obj.name[-13] == '_' and obj.name[-12:].isdigit():
+                        col.operator("ktx.meshversions_create")
+                        col.prop(scene, "ktx_defpin")
+                        box = layout.box()
+                        box.label("Versions of Active Object: " + obj.name)
+                        len_obj=len(obj.name)
+                        for m in bpy.data.meshes:
+                            len_m=len(m.name)
+                            if m.name[:len_obj] == obj.name:
+                                row = box.row()
+                                row.operator("ktx.meshversions_select",text=m.name).m_index = m.name
+                                if m.users == 0:
+                                    row.operator("ktx.meshversions_remove",text="",icon="X").m_index = m.name
+                        
+                                if bpy.data.meshes[m.name].use_fake_user:
+                                    row.operator("ktx.meshversions_fakeuser", text="",icon="PINNED").m_index = m.name
+                                else:
+                                    row.operator("ktx.meshversions_fakeuser", text="",icon="UNPINNED").m_index = m.name
+                else:
+                    col.operator("ktx.meshversions_init")
+            else:
+                col.label('Select a Mesh Object in the Scene!')
+                box = layout.box()
+                box.label('Or either remove unwanted or pin important meshes:')
+                for m in bpy.data.meshes:
+                    row = box.row()
+                    row.label(m.name)
+                    if m.users == 0:
+                        row.operator("ktx.meshversions_remove",text="",icon="X").m_index = m.name
+
+                    if bpy.data.meshes[m.name].use_fake_user:
+                        row.operator("ktx.meshversions_fakeuser", text="",icon="PINNED").m_index = m.name
+                    else:
+                        row.operator("ktx.meshversions_fakeuser", text="",icon="UNPINNED").m_index = m.name
+
+
+def register():
+    bpy.types.Scene.ktx_defpin = bpy.props.BoolProperty(name="Auto Pinning", description="When creating a copy set pinning to ON automatically (FAKE_USER=TRUE)", default=False)
+    bpy.utils.register_module(__name__)
+
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    del bpy.types.Scene.ktx_defpin
+
+if __name__ == "__main__":
+    register()



More information about the Bf-extensions-cvs mailing list