Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2014-10-03 16:47:22 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-10-03 16:47:22 +0400
commitc210f87f12929bbd0884db7bf76baa3f1eed7b02 (patch)
treeff7fb4b7674db1b82af2c00aace6c2b960bd5ea6
parent5be03a4071edc59968e2cd58ab241c0e2e79ba52 (diff)
Fix T41931: FBX export: 'Group' batch export was using default scene unit scale.v2.72
Now, find the scene most 'used' by exported group elements, and use its unit settings!
-rw-r--r--io_scene_fbx/export_fbx_bin.py17
-rw-r--r--io_scene_fbx_experimental/export_fbx_bin.py17
2 files changed, 34 insertions, 0 deletions
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index 01713255..4f50fa0b 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -2800,9 +2800,26 @@ def save(operator, context,
scene = bpy.data.scenes.new(name="FBX_Temp")
scene.layers = [True] * 20
# bpy.data.scenes.active = scene # XXX, cant switch
+ src_scenes = {} # Count how much each 'source' scenes are used.
for ob_base in data.objects:
+ for src_sce in ob_base.users_scene:
+ if src_sce not in src_scenes:
+ src_scenes[src_sce] = 0
+ src_scenes[src_sce] += 1
scene.objects.link(ob_base)
+ # Find the 'most used' source scene, and use its unit settings. This is somewhat weak, but should work
+ # fine in most cases, and avoids stupid issues like T41931.
+ best_src_scene = None
+ best_src_scene_users = 0
+ for sce, nbr_users in src_scenes.items():
+ if (nbr_users) > best_src_scene_users:
+ best_src_scene_users = nbr_users
+ best_src_scene = sce
+ scene.unit_settings.system = best_src_scene.unit_settings.system
+ scene.unit_settings.system_rotation = best_src_scene.unit_settings.system_rotation
+ scene.unit_settings.scale_length = best_src_scene.unit_settings.scale_length
+
scene.update()
# TODO - BUMMER! Armatures not in the group wont animate the mesh
else:
diff --git a/io_scene_fbx_experimental/export_fbx_bin.py b/io_scene_fbx_experimental/export_fbx_bin.py
index f3a7dd5f..5e59fabe 100644
--- a/io_scene_fbx_experimental/export_fbx_bin.py
+++ b/io_scene_fbx_experimental/export_fbx_bin.py
@@ -2926,9 +2926,26 @@ def save(operator, context,
scene = bpy.data.scenes.new(name="FBX_Temp")
scene.layers = [True] * 20
# bpy.data.scenes.active = scene # XXX, cant switch
+ src_scenes = {} # Count how much each 'source' scenes are used.
for ob_base in data.objects:
+ for src_sce in ob_base.users_scene:
+ if src_sce not in src_scenes:
+ src_scenes[src_sce] = 0
+ src_scenes[src_sce] += 1
scene.objects.link(ob_base)
+ # Find the 'most used' source scene, and use its unit settings. This is somewhat weak, but should work
+ # fine in most cases, and avoids stupid issues like T41931.
+ best_src_scene = None
+ best_src_scene_users = 0
+ for sce, nbr_users in src_scenes.items():
+ if (nbr_users) > best_src_scene_users:
+ best_src_scene_users = nbr_users
+ best_src_scene = sce
+ scene.unit_settings.system = best_src_scene.unit_settings.system
+ scene.unit_settings.system_rotation = best_src_scene.unit_settings.system_rotation
+ scene.unit_settings.scale_length = best_src_scene.unit_settings.scale_length
+
scene.update()
# TODO - BUMMER! Armatures not in the group wont animate the mesh
else: