[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4600] Moving to trunk (Woohoo!)
Jason van Gumster
jason at handturkeystudios.com
Tue Jun 25 17:35:03 CEST 2013
Revision: 4600
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4600
Author: thefallenweeble
Date: 2013-06-25 15:35:03 +0000 (Tue, 25 Jun 2013)
Log Message:
-----------
Moving to trunk (Woohoo!)
Added Paths:
-----------
trunk/py/scripts/addons/object_edit_linked.py
Removed Paths:
-------------
contrib/py/scripts/addons/object_edit_linked.py
Deleted: contrib/py/scripts/addons/object_edit_linked.py
===================================================================
--- contrib/py/scripts/addons/object_edit_linked.py 2013-06-25 15:14:11 UTC (rev 4599)
+++ contrib/py/scripts/addons/object_edit_linked.py 2013-06-25 15:35:03 UTC (rev 4600)
@@ -1,266 +0,0 @@
-# ***** 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 LICENCE BLOCK *****
-
-bl_info = {
- "name": "Edit Linked Library",
- "author": "Jason van Gumster (Fweeb), Bassam Kurdali, Pablo Vazquez",
- "version": (0, 7, 4),
- "blender": (2, 65, 0),
- "location": "View3D > Toolshelf > Edit Linked Library",
- "description": "Allows editing of objects linked from a .blend library.",
- "wiki_url": "http://wiki.blender.org/index.php?title=Extensions:2.6/Py/Scripts/Object/Edit_Linked_Library",
- "tracker_url": "http://projects.blender.org/tracker/index.php?func=detail&aid=29630",
- "category": "Object"}
-
-
-import bpy
-from bpy.app.handlers import persistent
-import os, subprocess
-
-settings = {
- "original_file": "",
- "linked_file": "",
- "linked_objects": [],
- }
-
-
- at persistent
-def linked_file_check(context):
- if settings["linked_file"] != "":
- if os.path.samefile(settings["linked_file"], bpy.data.filepath):
- print("Editing a linked library.")
- bpy.ops.object.select_all(action='DESELECT')
- for ob_name in settings["linked_objects"]:
- bpy.data.objects[ob_name].select = True #XXX Assumes selected object is in the active scene
- if len(settings["linked_objects"]) == 1:
- bpy.context.scene.objects.active = bpy.data.objects[settings["linked_objects"][0]]
- else:
- # For some reason, the linked editing session ended
- # (failed to find a file or opened a different file
- # before returning to the originating .blend)
- settings["original_file"] = ""
- settings["linked_file"] = ""
-
-
-class EditLinked(bpy.types.Operator):
- """Edit Linked Library"""
- bl_idname = "object.edit_linked"
- bl_label = "Edit Linked Library"
-
- use_autosave = bpy.props.BoolProperty(
- name="Autosave",
- description="Save the current file before opening the linked library",
- default=True)
- use_instance = bpy.props.BoolProperty(
- name="New Blender Instance",
- description="Open in a new Blender instance",
- default=False)
-
- @classmethod
- def poll(cls, context):
- return settings["original_file"] == "" and (
- (context.active_object.dupli_group and
- context.active_object.dupli_group.library is not None) or
- context.active_object.library is not None)
- #return context.active_object is not None
-
- def execute(self, context):
- #print(bpy.context.active_object.library)
- target = context.active_object
-
- if target.dupli_group and target.dupli_group.library:
- targetpath = target.dupli_group.library.filepath
- settings["linked_objects"].extend({ob.name for ob in target.dupli_group.objects})
- elif target.library:
- targetpath = target.library.filepath
- settings["linked_objects"].append(target.name)
-
- if targetpath:
- print(target.name + " is linked to " + targetpath)
-
- if self.use_autosave:
- bpy.ops.wm.save_mainfile()
-
- settings["original_file"] = bpy.data.filepath
-
- # XXX: need to test for proxied rigs
- settings["linked_file"] = bpy.path.abspath(targetpath)
-
- if self.use_instance:
- try:
- subprocess.Popen([bpy.app.binary_path, settings["linked_file"]])
- except:
- print("Error on the new Blender instance")
- import traceback
- traceback.print_exc()
- else:
- bpy.ops.wm.open_mainfile(filepath=settings["linked_file"])
-
- print("Opened linked file!")
- else:
- self.report({'WARNING'}, target.name + " is not linked")
- print(target.name + " is not linked")
-
- return {'FINISHED'}
-
-
-class ReturnToOriginal(bpy.types.Operator):
- """Load the original file"""
- bl_idname = "wm.return_to_original"
- bl_label = "Return to Original File"
-
- use_autosave = bpy.props.BoolProperty(
- name="Autosave",
- description="Save the current file before opening original file",
- default=True)
-
- @classmethod
- def poll(cls, context):
- return (settings["original_file"] != "")
-
- def execute(self, context):
- if self.use_autosave:
- bpy.ops.wm.save_mainfile()
-
- bpy.ops.wm.open_mainfile(filepath=settings["original_file"])
-
- settings["original_file"] = ""
- settings["linked_objects"] = []
- print("Back to the original!")
- return {'FINISHED'}
-
-
-# UI
-# TODO:Add operators to the File menu?
-# Hide the entire panel for non-linked objects?
-class PanelLinkedEdit(bpy.types.Panel):
- bl_label = "Edit Linked Library"
- bl_space_type = "VIEW_3D"
- bl_region_type = "TOOLS"
-
- def draw(self, context):
- layout = self.layout
- scene = context.scene
- icon = "OUTLINER_DATA_" + context.active_object.type
-
- if settings["original_file"] == "" and (
- (context.active_object.dupli_group and
- context.active_object.dupli_group.library is not None) or
- context.active_object.library is not None):
-
- if (context.active_object.dupli_group is not None):
- props = layout.operator("object.edit_linked", icon="LINK_BLEND",
- text="Edit Library: %s" % context.active_object.dupli_group.name)
- else:
- props = layout.operator("object.edit_linked", icon="LINK_BLEND",
- text="Edit Library: %s" % context.active_object.name)
- props.use_autosave = scene.use_autosave
- props.use_instance = scene.use_instance
-
- layout.prop(scene, "use_autosave")
- layout.prop(scene, "use_instance")
-
- if (context.active_object.dupli_group is not None):
- layout.label(text="Path: %s" %
- context.active_object.dupli_group.library.filepath)
- else:
- layout.label(text="Path: %s" %
- context.active_object.library.filepath)
-
- elif settings["original_file"] != "":
-
- if scene.use_instance:
- layout.operator("wm.return_to_original",
- text="Reload Current File",
- icon="FILE_REFRESH").use_autosave = False
-
- layout.separator()
-
- #XXX - This is for nested linked assets... but it only works
- # when launching a new Blender instance. Nested links don't
- # currently work when using a single instance of Blender.
- props = layout.operator("object.edit_linked",
- text="Edit Library: %s" % context.active_object.dupli_group.name,
- icon="LINK_BLEND")
- props.use_autosave = scene.use_autosave
- props.use_instance = scene.use_instance
- layout.prop(scene, "use_autosave")
- layout.prop(scene, "use_instance")
-
- layout.label(text="Path: %s" %
- context.active_object.dupli_group.library.filepath)
-
- else:
- props = layout.operator("wm.return_to_original", icon="LOOP_BACK")
- props.use_autosave = scene.use_autosave
-
- layout.prop(scene, "use_autosave")
-
- else:
- layout.label(text="%s is not linked" % context.active_object.name,
- icon=icon)
-
-
-addon_keymaps = []
-
-
-def register():
- bpy.app.handlers.load_post.append(linked_file_check)
- bpy.utils.register_class(EditLinked)
- bpy.utils.register_class(ReturnToOriginal)
- bpy.utils.register_class(PanelLinkedEdit)
-
- # Is there a better place to store this properties?
- bpy.types.Scene.use_autosave = bpy.props.BoolProperty(
- name="Autosave",
- description="Save the current file before opening a linked file",
- default=True)
- bpy.types.Scene.use_instance = bpy.props.BoolProperty(
- name="New Blender Instance",
- description="Open in a new Blender instance",
- default=False)
-
- # Keymapping (deactivated by default; activated when a library object is selected)
- kc = bpy.context.window_manager.keyconfigs.addon
- km = kc.keymaps.new(name="3D View", space_type='VIEW_3D')
- kmi = km.keymap_items.new("object.edit_linked", 'NUMPAD_SLASH', 'PRESS', shift=True)
- kmi.active = True
- addon_keymaps.append((km, kmi))
- kmi = km.keymap_items.new("wm.return_to_original", 'NUMPAD_SLASH', 'PRESS', shift=True)
- kmi.active = True
- addon_keymaps.append((km, kmi))
-
-
-def unregister():
- bpy.utils.unregister_class(EditLinked)
- bpy.utils.unregister_class(ReturnToOriginal)
- bpy.utils.unregister_class(PanelLinkedEdit)
- bpy.app.handlers.load_post.remove(linked_file_check)
-
- del bpy.types.Scene.use_autosave
- del bpy.types.Scene.use_instance
-
- # handle the keymap
- for km, kmi in addon_keymaps:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list