[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2392] trunk/py/scripts/addons/ io_scene_fbx/export_fbx.py: shape key support for FBX

Campbell Barton ideasman42 at gmail.com
Wed Oct 5 06:51:47 CEST 2011


Revision: 2392
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2392
Author:   campbellbarton
Date:     2011-10-05 04:51:43 +0000 (Wed, 05 Oct 2011)
Log Message:
-----------
shape key support for FBX

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_fbx/export_fbx.py

Modified: trunk/py/scripts/addons/io_scene_fbx/export_fbx.py
===================================================================
--- trunk/py/scripts/addons/io_scene_fbx/export_fbx.py	2011-10-04 22:01:58 UTC (rev 2391)
+++ trunk/py/scripts/addons/io_scene_fbx/export_fbx.py	2011-10-05 04:51:43 UTC (rev 2392)
@@ -1320,6 +1320,7 @@
         do_materials = bool(my_mesh.blenMaterials)
         do_textures = bool(my_mesh.blenTextures)
         do_uvs = bool(me.uv_textures)
+        do_shapekeys = bool(my_mesh.blenObject.data.shape_keys and len(my_mesh.blenObject.data.vertices) == len(me.vertices))
 
         fw('\n\tModel: "Model::%s", "Mesh" {' % my_mesh.fbxName)
         fw('\n\t\tVersion: 232')  # newline is added in write_object_props
@@ -1332,6 +1333,10 @@
         poseMatrix = write_object_props(my_mesh.blenObject, None, my_mesh.parRelMatrix())[3]
         pose_items.append((my_mesh.fbxName, poseMatrix))
 
+        if do_shapekeys:
+            for kb in my_mesh.blenObject.data.shape_keys.key_blocks[1:]:
+                fw('\n\t\t\tProperty: "%s", "Number", "AN",0' % kb.name)
+
         fw('\n\t\t}')
 
         fw('\n\t\tMultiLayer: 0'
@@ -1774,6 +1779,67 @@
                 fw('\n\t\t\t\tTypedIndex: %i' % i)
                 fw('\n\t\t\t}')
                 fw('\n\t\t}')
+        
+        if do_shapekeys:
+            key_blocks = my_mesh.blenObject.data.shape_keys.key_blocks[:]
+            for kb in key_blocks[1:]:
+
+                fw('\n\t\tShape: "%s" {' % kb.name)
+                fw('\n\t\t\tIndexes: ')
+
+                basis_verts = key_blocks[0].data
+                range_verts = []
+                delta_verts = []
+                i = -1
+                for j, kv in enumerate(kb.data):
+                    delta = kv.co - basis_verts[j].co
+                    if delta.length > 0.000001:
+                        if i == -1:
+                            fw('%d' % j)
+                        else:
+                            if i == 7:
+                                fw('\n\t\t\t')
+                                i = 0
+                            fw(',%d' % j)
+                        delta_verts.append(delta[:])
+                        i += 1
+
+                fw('\n\t\t\tVertices: ')
+                i = -1
+                for dv in delta_verts:
+                    if i == -1:
+                        fw("%g,%g,%g" % dv)
+                    else:
+                        if i == 4:
+                            fw('\n\t\t\t')
+                            i = 0
+                        fw(",%g,%g,%g" % dv)
+                    i += 1
+
+                # all zero, why? - campbell
+                fw('\n\t\t\tNormals: ')
+                for j in range(len(delta_verts)):
+                    if i == -1:
+                        fw("0,0,0")
+                    else:
+                        if i == 4:
+                            fw('\n\t\t\t')
+                            i = 0
+                        fw(",0,0,0")
+                    i += 1
+                fw('\n\t\t}')
+
+        for v in me_vertices:
+            if i == -1:
+                fw('%.6f,%.6f,%.6f' % v.co[:])
+                i = 0
+            else:
+                if i == 7:
+                    fw('\n\t\t')
+                    i = 0
+                fw(',%.6f,%.6f,%.6f' % v.co[:])
+            i += 1
+        
         fw('\n\t}')
 
     def write_group(name):



More information about the Bf-extensions-cvs mailing list