From 34680d1f7b31f59cacb10f3782fd100bbf503b3d Mon Sep 17 00:00:00 2001 From: Campbell Barton <ideasman42@gmail.com> Date: Mon, 18 Jul 2011 05:09:07 +0000 Subject: [PATCH] fix for invalid axis being allowed on import/export --- io_anim_bvh/export_bvh.py | 30 +++++++++++++++--------------- io_scene_3ds/__init__.py | 13 ++++++++++++- io_scene_fbx/__init__.py | 10 +++++++++- io_scene_map/__init__.py | 5 +++++ io_scene_obj/__init__.py | 14 +++++++++++++- io_scene_x3d/__init__.py | 13 ++++++++++++- 6 files changed, 66 insertions(+), 19 deletions(-) diff --git a/io_anim_bvh/export_bvh.py b/io_anim_bvh/export_bvh.py index 6ee688be6..c6173b6a0 100644 --- a/io_anim_bvh/export_bvh.py +++ b/io_anim_bvh/export_bvh.py @@ -141,21 +141,21 @@ def write_armature(context, # so we can write motion class DecoratedBone(object): - __slots__ = (\ - "name", # bone name, used as key in many places - "parent", # decorated bone parent, set in a later loop - "rest_bone", # blender armature bone - "pose_bone", # blender pose bone - "pose_mat", # blender pose matrix - "rest_arm_mat", # blender rest matrix (armature space) - "rest_local_mat", # blender rest batrix (local space) - "pose_imat", # pose_mat inverted - "rest_arm_imat", # rest_arm_mat inverted - "rest_local_imat", # rest_local_mat inverted - "prev_euler", # last used euler to preserve euler compability in between keyframes - "connected", # is the bone connected to the parent bone? - "rot_order", - "rot_order_str", + __slots__ = ( + "name", # bone name, used as key in many places + "parent", # decorated bone parent, set in a later loop + "rest_bone", # blender armature bone + "pose_bone", # blender pose bone + "pose_mat", # blender pose matrix + "rest_arm_mat", # blender rest matrix (armature space) + "rest_local_mat", # blender rest batrix (local space) + "pose_imat", # pose_mat inverted + "rest_arm_imat", # rest_arm_mat inverted + "rest_local_imat", # rest_local_mat inverted + "prev_euler", # last used euler to preserve euler compability in between keyframes + "connected", # is the bone connected to the parent bone? + "rot_order", + "rot_order_str", ) _eul_order_lookup = { diff --git a/io_scene_3ds/__init__.py b/io_scene_3ds/__init__.py index e7934afc8..2206c20dd 100644 --- a/io_scene_3ds/__init__.py +++ b/io_scene_3ds/__init__.py @@ -43,7 +43,12 @@ if "bpy" in locals(): import bpy from bpy.props import StringProperty, FloatProperty, BoolProperty, EnumProperty -from bpy_extras.io_utils import ImportHelper, ExportHelper, axis_conversion + +from bpy_extras.io_utils import (ImportHelper, + ExportHelper, + axis_conversion, + axis_conversion_ensure, + ) class Import3DS(bpy.types.Operator, ImportHelper): @@ -82,6 +87,9 @@ class Import3DS(bpy.types.Operator, ImportHelper): default='Z', ) + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from . import import_3ds @@ -127,6 +135,9 @@ class Export3DS(bpy.types.Operator, ExportHelper): default='Z', ) + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from . import export_3ds diff --git a/io_scene_fbx/__init__.py b/io_scene_fbx/__init__.py index a805f7134..d17e2dd56 100644 --- a/io_scene_fbx/__init__.py +++ b/io_scene_fbx/__init__.py @@ -41,7 +41,12 @@ if "bpy" in locals(): import bpy from bpy.props import StringProperty, BoolProperty, FloatProperty, EnumProperty -from bpy_extras.io_utils import ExportHelper, path_reference_mode, axis_conversion + +from bpy_extras.io_utils import (ExportHelper, + path_reference_mode, + axis_conversion, + axis_conversion_ensure, + ) class ExportFBX(bpy.types.Operator, ExportHelper): @@ -132,6 +137,9 @@ class ExportFBX(bpy.types.Operator, ExportHelper): def check_extension(self): return self.batch_mode == 'OFF' + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from mathutils import Matrix if not self.filepath: diff --git a/io_scene_map/__init__.py b/io_scene_map/__init__.py index d32959988..a9610ef5c 100644 --- a/io_scene_map/__init__.py +++ b/io_scene_map/__init__.py @@ -53,6 +53,11 @@ class ExportMAP(bpy.types.Operator, ExportHelper): filename_ext = ".map" filter_glob = StringProperty(default="*.map", options={'HIDDEN'}) + ''' + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + ''' + def execute(self, context): # import math # from mathutils import Matrix diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py index 694c618da..cd8a855d6 100644 --- a/io_scene_obj/__init__.py +++ b/io_scene_obj/__init__.py @@ -43,7 +43,13 @@ if "bpy" in locals(): import bpy from bpy.props import BoolProperty, FloatProperty, StringProperty, EnumProperty -from bpy_extras.io_utils import ExportHelper, ImportHelper, path_reference_mode, axis_conversion + +from bpy_extras.io_utils import (ExportHelper, + ImportHelper, + path_reference_mode, + axis_conversion, + axis_conversion_ensure, + ) class ImportOBJ(bpy.types.Operator, ImportHelper): @@ -101,6 +107,9 @@ class ImportOBJ(bpy.types.Operator, ImportHelper): # fake prop, only disables split. # keep_vertex_order = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True) + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): # print("Selected: " + context.active_object.name) from . import import_obj @@ -213,6 +222,9 @@ class ExportOBJ(bpy.types.Operator, ExportHelper): path_mode = path_reference_mode + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from . import export_obj diff --git a/io_scene_x3d/__init__.py b/io_scene_x3d/__init__.py index c49a86a88..1d0841e00 100644 --- a/io_scene_x3d/__init__.py +++ b/io_scene_x3d/__init__.py @@ -41,7 +41,12 @@ if "bpy" in locals(): import bpy from bpy.props import StringProperty, BoolProperty, EnumProperty -from bpy_extras.io_utils import ImportHelper, ExportHelper, axis_conversion, path_reference_mode +from bpy_extras.io_utils import (ImportHelper, + ExportHelper, + axis_conversion, + axis_conversion_ensure, + path_reference_mode, + ) class ImportX3D(bpy.types.Operator, ImportHelper): @@ -76,6 +81,9 @@ class ImportX3D(bpy.types.Operator, ImportHelper): default='Y', ) + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from . import import_x3d @@ -128,6 +136,9 @@ class ExportX3D(bpy.types.Operator, ExportHelper): path_mode = path_reference_mode + def check(self, context): + return axis_conversion_ensure(self, "axis_forward", "axis_up") + def execute(self, context): from . import export_x3d -- GitLab