diff --git a/object_mesh_versions.py b/object_mesh_versions.py index 9fa45884847012fa0f8a8d2593512415743f7147..a764c85cebdcb6fb76faedc9281d58c568489c92 100644 --- a/object_mesh_versions.py +++ b/object_mesh_versions.py @@ -16,18 +16,21 @@ # # ##### END GPL LICENSE BLOCK ##### +import bpy +import time +from datetime import datetime +from bpy.types import Menu, Panel +from bpy.props import StringProperty, BoolProperty + + bl_info = { "name": "KTX Mesh Versions", "author": "Roel Koster, @koelooptiemanna, irc:kostex", - "version": (1, 4, 2), + "version": (1, 4, 3), "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 class KTX_MeshInit(bpy.types.Operator): bl_label = "Initialise Mesh Versioning" @@ -35,19 +38,20 @@ class KTX_MeshInit(bpy.types.Operator): bl_description = "Initialise the current object to support versioning" def execute(self, context): - unique_id=str(time.time()) - context.object.data.ktx_mesh_id=context.object.ktx_object_id=unique_id + unique_id = str(time.time()) + context.object.data.ktx_mesh_id = context.object.ktx_object_id = unique_id return {'FINISHED'} + class KTX_MeshSelect(bpy.types.Operator): bl_label = "Select Mesh" bl_idname = "ktx.meshversions_select" bl_description = "Link the selected mesh to the current object" - + m_index = StringProperty() - + def execute(self, context): - c_mode=bpy.context.object.mode + c_mode = bpy.context.object.mode if c_mode != 'OBJECT': bpy.ops.object.mode_set(mode='OBJECT') obj = context.object @@ -55,37 +59,52 @@ class KTX_MeshSelect(bpy.types.Operator): 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/Delete the selected mesh" - + m_index = StringProperty() - + def execute(self, context): bpy.data.meshes.remove(bpy.data.meshes[self.m_index]) return {'FINISHED'} + +class KTX_Cleanup(bpy.types.Operator): + bl_label = "Cleanup Mode" + bl_idname = "ktx.cleanup" + bl_description = "Cleanup Mode" + + def execute(self, context): + for o in bpy.data.objects: + o.select = False + context.scene.objects.active = None + 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") + 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 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 + 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" @@ -96,45 +115,54 @@ class KTX_Mesh_Versions(bpy.types.Panel): scene = context.scene obj = context.object layout = self.layout - if obj == None: - layout.label('No Object Selected') - else: - if obj.type == 'MESH': - if obj.ktx_object_id != '' and (obj.data.ktx_mesh_id == obj.ktx_object_id): - icon='PINNED' if scene.ktx_defpin else 'UNPINNED' - row=layout.row(align=True) - row.prop(scene, "ktx_defpin",text="", icon=icon) - row.operator("ktx.meshversions_create") - box = layout.box() - box.scale_y=0.65 - box.label("Currently active mesh: " + obj.data.name) - for m in bpy.data.meshes: - if m.ktx_mesh_id == obj.ktx_object_id: - mesh_name=m.name - row = box.row(align=True) - row.operator("ktx.meshversions_select",text="",icon='RIGHTARROW').m_index = mesh_name - row.prop(m,"name",text="",icon='MESH_DATA') - if m.users == 0: - row.operator("ktx.meshversions_remove",text="",icon="X").m_index = mesh_name - icon='PINNED' if m.use_fake_user else 'UNPINNED' - row.prop(m,"use_fake_user", text="", icon=icon) - box.label() + + meshes_exist = bool(bpy.data.meshes.items() != []) + if meshes_exist: + if obj != None: + if obj.type == 'MESH': + if obj.ktx_object_id != '' and (obj.data.ktx_mesh_id == obj.ktx_object_id): + icon = 'PINNED' if scene.ktx_defpin else 'UNPINNED' + row = layout.row(align=True) + row.prop(scene, "ktx_defpin", text="", icon=icon) + row.operator("ktx.meshversions_create") + box = layout.box() + box.scale_y = 0.65 + box.label("Currently active mesh: " + obj.data.name) + for m in bpy.data.meshes: + if m.ktx_mesh_id == obj.ktx_object_id: + mesh_name = m.name + row = box.row(align=True) + row.operator("ktx.meshversions_select", text="", icon='RIGHTARROW').m_index = mesh_name + row.prop(m, "name", text="", icon='MESH_DATA') + if m.users == 0: + row.operator("ktx.meshversions_remove", text="", icon="X").m_index = mesh_name + icon = 'PINNED' if m.use_fake_user else 'UNPINNED' + row.prop(m, "use_fake_user", text="", icon=icon) + box.label() + row = layout.row(align=True) + row.operator("ktx.cleanup", text="Cleanup Mode") + else: + layout.operator("ktx.meshversions_init") else: - layout.operator("ktx.meshversions_init") + layout.label("Select a Mesh Object") + layout.operator("ktx.cleanup", text="Cleanup Mode") + else: - if bpy.data.meshes.items() != []: - layout.label('All Meshes (Cleanup/Pin):') - box = layout.box() - box.scale_y=0.65 - for m in bpy.data.meshes: - mesh_name=m.name - row = box.row(align=True) - row.prop(m,"name",text="",icon='MESH_DATA') - if m.users == 0: - row.operator("ktx.meshversions_remove",text="",icon="X").m_index = mesh_name - icon='PINNED' if m.use_fake_user else 'UNPINNED' - row.prop(m,"use_fake_user", text="", icon=icon) - box.label() + layout.label('All Meshes (Cleanup/Pin):') + box = layout.box() + box.scale_y = 0.65 + for m in bpy.data.meshes: + mesh_name = m.name + row = box.row(align=True) + row.prop(m, "name", text="", icon='MESH_DATA') + if m.users == 0: + row.operator("ktx.meshversions_remove", text="", icon="X").m_index = mesh_name + icon = 'PINNED' if m.use_fake_user else 'UNPINNED' + row.prop(m, "use_fake_user", text="", icon=icon) + box.label() + else: + layout.label("No Meshes Exist") + def register(): bpy.types.Object.ktx_object_id = bpy.props.StringProperty(name="KTX Object ID", description="Unique ID to 'link' one object to multiple meshes") @@ -149,5 +177,6 @@ def unregister(): del bpy.types.Object.ktx_object_id del bpy.types.Scene.ktx_defpin + if __name__ == "__main__": register()