[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2426] trunk/py/scripts/addons/ io_scene_fbx/export_fbx.py: fix [#28889] FBX only exports action with action groups

Campbell Barton ideasman42 at gmail.com
Thu Oct 13 04:17:00 CEST 2011


Revision: 2426
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2426
Author:   campbellbarton
Date:     2011-10-13 02:16:56 +0000 (Thu, 13 Oct 2011)
Log Message:
-----------
fix [#28889] FBX only exports action with action groups

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-12 20:12:00 UTC (rev 2425)
+++ trunk/py/scripts/addons/io_scene_fbx/export_fbx.py	2011-10-13 02:16:56 UTC (rev 2426)
@@ -131,6 +131,26 @@
     return '%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f' % tuple([f for v in mat for f in v])
 
 
+def action_bone_names(obj, action):
+    from bpy.types import PoseBone
+
+    names = set()
+    path_resolve = obj.path_resolve
+
+    for fcu in action.fcurves:
+        try:
+            prop = path_resolve(fcu.data_path, False)
+        except:
+            prop = None
+
+        if prop is not None:
+            data = prop.data
+            if isinstance(data, PoseBone):
+                names.add(data.name)
+
+    return names
+
+
 # ob must be OB_MESH
 def BPyMesh_meshWeight2List(ob, me):
     ''' Takes a mesh and return its group names and a list of lists, one list per vertex.
@@ -1781,7 +1801,7 @@
                 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:]:
@@ -2576,9 +2596,7 @@
 
                 for action in tmp_actions:
 
-                    action_chan_names = arm_bone_names.intersection(set([g.name for g in action.groups]))
-
-                    if action_chan_names:  # at least one channel matches.
+                    if arm_bone_names.intersection(action_bone_names(my_arm.blenObject, action)):  # at least one channel matches.
                         my_arm.blenActionList.append(action)
                         tagged_actions.append(action.name)
                         tmp_act_count += 1



More information about the Bf-extensions-cvs mailing list