diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-12-05 23:22:57 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-12-05 23:22:57 +0400 |
commit | f3e9b8354f69b2dffdceb1869628a1df3164aafa (patch) | |
tree | 5e846f5505a4af06578d4477f97e1e318c63044f /io_anim_nuke_chan/__init__.py | |
parent | 27a5698154d13c0986bde99a31a54da76b35ac08 (diff) |
moving Nuke *.chan io camera animation import/export scripts into trunk, this is a very simple foramt and nice to have with tracking release
[[Split portion of a mixed commit.]]
Diffstat (limited to 'io_anim_nuke_chan/__init__.py')
-rw-r--r-- | io_anim_nuke_chan/__init__.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/io_anim_nuke_chan/__init__.py b/io_anim_nuke_chan/__init__.py new file mode 100644 index 00000000..142fb4c7 --- /dev/null +++ b/io_anim_nuke_chan/__init__.py @@ -0,0 +1,143 @@ +# ##### 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": "Nuke Animation Format (.chan)", + "author": "Michael Krupa", + "version": (1, 0), + "blender": (2, 6, 0), + "api": 36079, + "location": "File > Import/Export > Nuke (.chan)", + "description": "Import/Export object's animation with nuke", + "warning": "", + "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/" + "Scripts/Import-Export/Nuke", + "tracker_url": "http://projects.blender.org/tracker/?" + "func=detail&atid=467&aid=28368&group_id=153", + "category": "Import-Export"} + + +# To support reload properly, try to access a package var, +# if it's there, reload everything +if "bpy" in locals(): + import imp + if "import_nuke_chan" in locals(): + imp.reload(import_nuke_chan) + if "export_nuke_chan" in locals(): + imp.reload(export_nuke_chan) + + +import bpy +from bpy.types import Operator +from bpy_extras.io_utils import ImportHelper, ExportHelper +from bpy.props import (StringProperty, + BoolProperty, + EnumProperty) + +# property shared by both operators +rot_ord = EnumProperty( + name="Rotation order", + description="Choose the export rotation order", + items=(('XYZ', "XYZ", "XYZ"), + ('XZY', "XZY", "XZY"), + ('YXZ', "YXZ", "YXZ"), + ('YZX', "YZX", "YZX"), + ('ZXY', "ZXY", "ZXY"), + ('ZYX', "ZYX", "ZYX"), + ), + default='XYZ') + + +class ImportChan(Operator, ImportHelper): + '''Import animation from .chan file, exported from nuke or houdini. ''' \ + '''The importer uses frame numbers from the file''' + bl_idname = "import_scene.import_chan" + bl_label = "Import chan file" + + filename_ext = ".chan" + + filter_glob = StringProperty(default="*.chan", options={'HIDDEN'}) + + rot_ord = rot_ord + z_up = BoolProperty( + name="Make Z up", + description="Switch the Y and Z axis", + default=True) + + @classmethod + def poll(cls, context): + return context.active_object is not None + + def execute(self, context): + from . import import_nuke_chan + return import_nuke_chan.read_chan(context, + self.filepath, + self.z_up, + self.rot_ord) + + +class ExportChan(Operator, ExportHelper): + '''Export the animation to .chan file, readable by nuke and houdini. ''' \ + '''The exporter uses frames from the frames range''' + bl_idname = "export.export_chan" + bl_label = "Export chan file" + + filename_ext = ".chan" + filter_glob = StringProperty(default="*.chan", options={'HIDDEN'}) + y_up = BoolProperty( + name="Make Y up", + description="Switch the Y and Z axis", + default=True) + rot_ord = rot_ord + + @classmethod + def poll(cls, context): + return context.active_object is not None + + def execute(self, context): + from . import export_nuke_chan + return export_nuke_chan.save_chan(context, + self.filepath, + self.y_up, + self.rot_ord) + + +def menu_func_import(self, context): + self.layout.operator(ImportChan.bl_idname, text="Nuke (.chan)") + + +def menu_func_export(self, context): + self.layout.operator(ExportChan.bl_idname, text="Nuke (.chan)") + + +def register(): + bpy.utils.register_class(ImportChan) + bpy.utils.register_class(ExportChan) + bpy.types.INFO_MT_file_import.append(menu_func_import) + bpy.types.INFO_MT_file_export.append(menu_func_export) + + +def unregister(): + bpy.utils.unregister_class(ImportChan) + bpy.utils.unregister_class(ExportChan) + bpy.types.INFO_MT_file_import.remove(menu_func_import) + bpy.types.INFO_MT_file_export.remove(menu_func_export) + + +if __name__ == "__main__": + register() |