[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1964] trunk/py/scripts/addons: axis conversion for X3D and OBJ operators

Campbell Barton ideasman42 at gmail.com
Wed May 25 00:20:55 CEST 2011


Revision: 1964
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1964
Author:   campbellbarton
Date:     2011-05-24 22:20:54 +0000 (Tue, 24 May 2011)
Log Message:
-----------
axis conversion for X3D and OBJ operators

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_fbx/__init__.py
    trunk/py/scripts/addons/io_scene_obj/__init__.py
    trunk/py/scripts/addons/io_scene_obj/export_obj.py
    trunk/py/scripts/addons/io_scene_obj/import_obj.py
    trunk/py/scripts/addons/io_scene_x3d/__init__.py
    trunk/py/scripts/addons/io_scene_x3d/export_x3d.py
    trunk/py/scripts/addons/io_scene_x3d/import_x3d.py

Modified: trunk/py/scripts/addons/io_scene_fbx/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_scene_fbx/__init__.py	2011-05-24 16:46:55 UTC (rev 1963)
+++ trunk/py/scripts/addons/io_scene_fbx/__init__.py	2011-05-24 22:20:54 UTC (rev 1964)
@@ -144,7 +144,7 @@
 
         keywords = self.as_keywords(ignore=("global_axis_forward", "global_axis_up", "global_scale", "check_existing", "filter_glob"))
         keywords["GLOBAL_MATRIX"] = GLOBAL_MATRIX
-        print(GLOBAL_MATRIX)
+
         from . import export_fbx
         return export_fbx.save(self, context, **keywords)
 

Modified: trunk/py/scripts/addons/io_scene_obj/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_scene_obj/__init__.py	2011-05-24 16:46:55 UTC (rev 1963)
+++ trunk/py/scripts/addons/io_scene_obj/__init__.py	2011-05-24 22:20:54 UTC (rev 1964)
@@ -43,7 +43,7 @@
 
 import bpy
 from bpy.props import BoolProperty, FloatProperty, StringProperty, EnumProperty
-from bpy_extras.io_utils import ExportHelper, ImportHelper, path_reference_mode
+from bpy_extras.io_utils import ExportHelper, ImportHelper, path_reference_mode, axis_conversion
 
 
 class ImportOBJ(bpy.types.Operator, ImportHelper):
@@ -64,8 +64,6 @@
 
     use_groups_as_vgroups = BoolProperty(name="Poly Groups", description="Import OBJ groups as vertex groups.", default=False)
 
-    use_rotate_x90 = BoolProperty(name="-X90", description="Rotate X 90.", default=True)
-    global_clamp_size = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0)
     use_image_search = BoolProperty(name="Image Search", description="Search subdirs for any assosiated images (Warning, may be slow)", default=True)
 
     split_mode = EnumProperty(
@@ -75,12 +73,38 @@
                    ),
             )
 
+    global_clamp_size = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0)
+    global_axis_forward = EnumProperty(
+            name="Forward",
+            items=(('X', "X Forward", ""),
+                   ('Y', "Y Forward", ""),
+                   ('Z', "Z Forward", ""),
+                   ('-X', "-X Forward", ""),
+                   ('-Y', "-Y Forward", ""),
+                   ('-Z', "-Z Forward", ""),
+                   ),
+            default='-Z',
+            )
+
+    global_axis_up = EnumProperty(
+            name="Up",
+            items=(('X', "X Up", ""),
+                   ('Y', "Y Up", ""),
+                   ('Z', "Z Up", ""),
+                   ('-X', "-X Up", ""),
+                   ('-Y', "-Y Up", ""),
+                   ('-Z', "-Z Up", ""),
+                   ),
+            default='Y',
+            )
+
     # 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 execute(self, context):
         # print("Selected: " + context.active_object.name)
         from . import import_obj
+        from mathutils import Matrix
 
         if self.split_mode == 'OFF':
             self.use_split_objects = False
@@ -88,8 +112,13 @@
         else:
             self.use_groups_as_vgroups = False
 
-        return import_obj.load(self, context, **self.as_keywords(ignore=("filter_glob", "split_mode")))
+        keywords = self.as_keywords(ignore=("global_axis_forward", "global_axis_up", "filter_glob", "split_mode"))
 
+        global_matrix = axis_conversion(from_forward=self.global_axis_forward, from_up=self.global_axis_up).to_4x4()
+        keywords["global_matrix"] = global_matrix
+
+        return import_obj.load(self, context, **keywords)
+
     def draw(self, context):
         layout = self.layout
 
@@ -113,7 +142,8 @@
 
         row = layout.split(percentage=0.67)
         row.prop(self, "global_clamp_size")
-        row.prop(self, "use_rotate_x90")
+        layout.prop(self, "global_axis_forward")
+        layout.prop(self, "global_axis_up")
 
         layout.prop(self, "use_image_search")
 
@@ -138,7 +168,6 @@
 
     # object group
     use_apply_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers (preview resolution)", default=True)
-    use_rotate_x90 = BoolProperty(name="Rotate X90", description="", default=True)
 
     # extra data group
     use_edges = BoolProperty(name="Edges", description="", default=True)
@@ -157,13 +186,47 @@
     group_by_material = BoolProperty(name="Material Groups", description="", default=False)
     keep_vertex_order = BoolProperty(name="Keep Vertex Order", description="", default=False)
 
+    global_scale = FloatProperty(name="Scale", description="Scale all data, (Note! some imports dont support scaled armatures)", min=0.01, max=1000.0, soft_min=0.01, soft_max=1000.0, default=1.0)
+
+    global_axis_forward = EnumProperty(
+            name="Forward",
+            items=(('X', "X Forward", ""),
+                   ('Y', "Y Forward", ""),
+                   ('Z', "Z Forward", ""),
+                   ('-X', "-X Forward", ""),
+                   ('-Y', "-Y Forward", ""),
+                   ('-Z', "-Z Forward", ""),
+                   ),
+            default='-Z',
+            )
+
+    global_axis_up = EnumProperty(
+            name="Up",
+            items=(('X', "X Up", ""),
+                   ('Y', "Y Up", ""),
+                   ('Z', "Z Up", ""),
+                   ('-X', "-X Up", ""),
+                   ('-Y', "-Y Up", ""),
+                   ('-Z', "-Z Up", ""),
+                   ),
+            default='Y',
+            )
+
     path_mode = path_reference_mode
 
     def execute(self, context):
         from . import export_obj
-        return export_obj.save(self, context, **self.as_keywords(ignore=("check_existing", "filter_glob")))
 
+        from mathutils import Matrix
+        keywords = self.as_keywords(ignore=("global_axis_forward", "global_axis_up", "global_scale", "check_existing", "filter_glob"))
 
+        global_matrix = Matrix()
+        global_matrix[0][0] = global_matrix[1][1] = global_matrix[2][2] = self.global_scale
+        global_matrix = global_matrix * axis_conversion(to_forward=self.global_axis_forward, to_up=self.global_axis_up).to_4x4()
+        keywords["global_matrix"] = global_matrix
+        return export_obj.save(self, context, **keywords)
+
+
 def menu_func_import(self, context):
     self.layout.operator(ImportOBJ.bl_idname, text="Wavefront (.obj)")
 

Modified: trunk/py/scripts/addons/io_scene_obj/export_obj.py
===================================================================
--- trunk/py/scripts/addons/io_scene_obj/export_obj.py	2011-05-24 16:46:55 UTC (rev 1963)
+++ trunk/py/scripts/addons/io_scene_obj/export_obj.py	2011-05-24 22:20:54 UTC (rev 1964)
@@ -236,13 +236,13 @@
                EXPORT_UV=True,
                EXPORT_MTL=True,
                EXPORT_APPLY_MODIFIERS=True,
-               EXPORT_ROTX90=True,
                EXPORT_BLEN_OBS=True,
                EXPORT_GROUP_BY_OB=False,
                EXPORT_GROUP_BY_MAT=False,
                EXPORT_KEEP_VERT_ORDER=False,
                EXPORT_POLYGROUPS=False,
                EXPORT_CURVE_AS_NURBS=True,
+               EXPORT_GLOBAL_MATRIX=None,
                EXPORT_PATH_MODE='AUTO',
                ):
     '''
@@ -252,6 +252,9 @@
     write( 'c:\\test\\foobar.obj', Blender.Object.GetSelected() ) # Using default options.
     '''
 
+    if EXPORT_GLOBAL_MATRIX is None:
+        EXPORT_GLOBAL_MATRIX = mathutils.Matrix()
+
     # XXX
     import math
 
@@ -303,9 +306,6 @@
         mtlfilepath = os.path.splitext(filepath)[0] + ".mtl"
         file.write('mtllib %s\n' % repr(os.path.basename(mtlfilepath))[1:-1])  # filepath can contain non utf8 chars, use repr
 
-    if EXPORT_ROTX90:
-        mat_xrot90 = mathutils.Matrix.Rotation(-math.pi / 2.0, 4, 'X')
-
     # Initialize totals, these are updated each object
     totverts = totuvco = totno = 1
 
@@ -345,8 +345,7 @@
 
             # Nurbs curve support
             if EXPORT_CURVE_AS_NURBS and test_nurbs_compat(ob):
-                if EXPORT_ROTX90:
-                    ob_mat = ob_mat * mat_xrot90
+                ob_mat = ob_mat * EXPORT_GLOBAL_MATRIX
                 totverts += write_nurb(file, ob, ob_mat)
                 continue
             # END NURBS
@@ -355,12 +354,8 @@
                 continue
 
             me = ob.to_mesh(scene, EXPORT_APPLY_MODIFIERS, 'PREVIEW')
+            me.transform(ob_mat * EXPORT_GLOBAL_MATRIX)
 
-            if EXPORT_ROTX90:
-                me.transform(mat_xrot90 * ob_mat)
-            else:
-                me.transform(ob_mat)
-
 #           # Will work for non meshes now! :)
 #           me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, EXPORT_POLYGROUPS, scn)
 #           if not me:
@@ -670,7 +665,6 @@
               EXPORT_UV,  # ok
               EXPORT_MTL,
               EXPORT_APPLY_MODIFIERS,  # ok
-              EXPORT_ROTX90,  # wrong
               EXPORT_BLEN_OBS,
               EXPORT_GROUP_BY_OB,
               EXPORT_GROUP_BY_MAT,
@@ -680,6 +674,7 @@
               EXPORT_SEL_ONLY,  # ok
               EXPORT_ALL_SCENES,  # XXX not working atm
               EXPORT_ANIMATION,
+              EXPORT_GLOBAL_MATRIX,
               EXPORT_PATH_MODE,
               ):  # Not used
 
@@ -739,13 +734,13 @@
                        EXPORT_UV,
                        EXPORT_MTL,
                        EXPORT_APPLY_MODIFIERS,
-                       EXPORT_ROTX90,
                        EXPORT_BLEN_OBS,
                        EXPORT_GROUP_BY_OB,
                        EXPORT_GROUP_BY_MAT,
                        EXPORT_KEEP_VERT_ORDER,
                        EXPORT_POLYGROUPS,
                        EXPORT_CURVE_AS_NURBS,
+                       EXPORT_GLOBAL_MATRIX,
                        EXPORT_PATH_MODE,
                        )
 
@@ -771,7 +766,6 @@
          use_uvs=True,
          use_materials=True,
          use_apply_modifiers=True,
-         use_rotate_x90=True,
          use_blen_objects=True,
          group_by_object=False,
          group_by_material=False,
@@ -781,6 +775,7 @@
          use_selection=True,
          use_all_scenes=False,
          use_animation=False,

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list