[Bf-extensions-cvs] [90a1962] master: Fix T40091: FBX Export: Python error with dupligroups
Bastien Montagne
noreply at git.blender.org
Thu May 8 11:46:24 CEST 2014
Commit: 90a19622339e1c56c8c2e27962a4a6878d2f0adf
Author: Bastien Montagne
Date: Thu May 8 11:45:09 2014 +0200
https://developer.blender.org/rBA90a19622339e1c56c8c2e27962a4a6878d2f0adf
Fix T40091: FBX Export: Python error with dupligroups
===================================================================
M io_scene_fbx/export_fbx_bin.py
===================================================================
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index e91c596..272a283 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -274,7 +274,8 @@ def get_blender_empty_key(obj):
def get_blender_dupli_key(dup):
"""Return dupli's key (Model only)."""
- return "|".join((get_blenderID_key(dup.object), "Dupli", "".join(str(i) for i in dup.persistent_id)))
+ return "|".join((get_blenderID_key(dup.id_data), get_blenderID_key(dup.object), "Dupli",
+ "".join(str(i) for i in dup.persistent_id)))
def get_blender_bone_key(armature, bone):
@@ -1017,6 +1018,9 @@ def dupli_list_create(obj, scene, settings='PREVIEW'):
except:
pass
+def gen_dupli_key(dup):
+ return (dup.id_data,) + tuple(dup.persistent_id)
+
def has_valid_parent(scene_data, obj):
if isinstance(obj, PoseBone):
@@ -1937,7 +1941,7 @@ def fbx_data_object_elements(root, obj, scene_data):
obj_type = b"Null" # default, sort of empty...
tobj = obj
if isinstance(obj, DupliObject):
- obj_key = scene_data.objects[tuple(obj.persistent_id)][0]
+ obj_key = scene_data.objects[gen_dupli_key(obj)][0]
obj = obj.object
else:
obj_key = scene_data.objects[obj]
@@ -2248,7 +2252,10 @@ def fbx_animations_objects_do(scene_data, ref_id, f_start, f_end, start_zero, ob
if obj.type == 'ARMATURE':
objects |= set(obj.data.bones)
dupli_list_create(obj, scene, 'RENDER')
- objects |= {tuple(dup.persistent_id) for dup in obj.dupli_list if tuple(dup.persistent_id) in scene_data.objects}
+ for dup in obj.dupli_list:
+ dup_key = gen_dupli_key(dup)
+ if dup_key in scene_data.objects:
+ objects.add(dup_key)
obj.dupli_list_clear()
else:
objects = scene_data.objects.keys()
@@ -2275,7 +2282,7 @@ def fbx_animations_objects_do(scene_data, ref_id, f_start, f_end, start_zero, ob
if not isinstance(obj, Object):
continue
dupli_list_create(obj, scene, 'RENDER')
- duplis.update((tuple(dup.persistent_id), dup) for dup in obj.dupli_list if tuple(dup.persistent_id) in objects)
+ duplis.update((gen_dupli_key(dup), dup) for dup in obj.dupli_list if gen_dupli_key(dup) in objects)
for obj in objects:
# Get PoseBone from bone...
if isinstance(obj, Bone):
@@ -2522,7 +2529,7 @@ def fbx_data_from_scene(scene, settings):
for obj in tuple(objects.keys()):
dupli_list_create(obj, scene, 'RENDER')
for dup in obj.dupli_list:
- objects[tuple(dup.persistent_id)] = (get_blender_dupli_key(dup), dup.object, obj)
+ objects[gen_dupli_key(dup)] = (get_blender_dupli_key(dup), dup.object, obj)
obj.dupli_list_clear()
# Armatures!
@@ -2736,7 +2743,7 @@ def fbx_data_from_scene(scene, settings):
cam_key = data_cameras[obj]
connections.append((b"OO", get_fbxuid_from_key(cam_key), get_fbxuid_from_key(obj_key), None))
elif obj.type == 'EMPTY':
- empty_key = data_empties[obj.data]
+ empty_key = data_empties[obj]
connections.append((b"OO", get_fbxuid_from_key(empty_key), get_fbxuid_from_key(obj_key), None))
elif obj.type in BLENDER_OBJECT_TYPES_MESHLIKE:
mesh_key, _me, _free = data_meshes[obj]
@@ -3019,7 +3026,8 @@ def fbx_objects_elements(root, scene_data):
if isinstance(obj, Object):
dupli_list_create(obj, scene_data.scene, 'RENDER')
for dup in obj.dupli_list:
- if tuple(dup.persistent_id) not in scene_data.objects:
+ dup_key = gen_dupli_key(dup)
+ if dup_key not in scene_data.objects:
continue
fbx_data_object_elements(objects, dup, scene_data)
obj.dupli_list_clear()
More information about the Bf-extensions-cvs
mailing list