[Bf-extensions-cvs] [7d4c474] master: FBX export: do not embed a same file more than once!
Bastien Montagne
noreply at git.blender.org
Fri May 22 22:25:41 CEST 2015
Commit: 7d4c4744b1134af469f8ef6d95c6a3781eed50e3
Author: Bastien Montagne
Date: Fri May 22 22:06:56 2015 +0200
Branches: master
https://developer.blender.org/rBA7d4c4744b1134af469f8ef6d95c6a3781eed50e3
FBX export: do not embed a same file more than once!
===================================================================
M io_scene_fbx/export_fbx_bin.py
M io_scene_fbx/fbx_utils.py
===================================================================
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index 076fc1d..98ac6ca 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -1347,6 +1347,8 @@ def fbx_data_video_elements(root, vid, scene_data):
"""
Write the actual image data block.
"""
+ msetts = scene_data.settings.media_settings
+
vid_key, _texs = scene_data.data_videos[vid]
fname_abs, fname_rel = _gen_vid_path(vid, scene_data)
@@ -1368,15 +1370,21 @@ def fbx_data_video_elements(root, vid, scene_data):
if scene_data.settings.media_settings.embed_textures:
if vid.packed_file is not None:
- elem_data_single_bytes(fbx_vid, b"Content", vid.packed_file.data)
+ # We only ever embed a given file once!
+ if fname_abs not in msetts.embedded_set:
+ elem_data_single_bytes(fbx_vid, b"Content", vid.packed_file.data)
+ msetts.embedded_set.add(fname_abs)
else:
filepath = bpy.path.abspath(vid.filepath)
- try:
- with open(filepath, 'br') as f:
- elem_data_single_bytes(fbx_vid, b"Content", f.read())
- except Exception as e:
- print("WARNING: embedding file {} failed ({})".format(filepath, e))
- elem_data_single_bytes(fbx_vid, b"Content", b"")
+ # We only ever embed a given file once!
+ if filepath not in msetts.embedded_set:
+ try:
+ with open(filepath, 'br') as f:
+ elem_data_single_bytes(fbx_vid, b"Content", f.read())
+ except Exception as e:
+ print("WARNING: embedding file {} failed ({})".format(filepath, e))
+ elem_data_single_bytes(fbx_vid, b"Content", b"")
+ msetts.embedded_set.add(filepath)
# Looks like we'd rather not write any 'Content' element in this case (see T44442).
# Sounds suspect, but let's try it!
#~ else:
@@ -2860,6 +2868,7 @@ def save_single(operator, scene, filepath="",
os.path.splitext(os.path.basename(filepath))[0] + ".fbm", # subdir
embed_textures,
set(), # copy_set
+ set(), # embedded_set
)
settings = FBXExportSettings(
diff --git a/io_scene_fbx/fbx_utils.py b/io_scene_fbx/fbx_utils.py
index e6cab6b..4cf46ff 100644
--- a/io_scene_fbx/fbx_utils.py
+++ b/io_scene_fbx/fbx_utils.py
@@ -1181,7 +1181,7 @@ def fbx_name_class(name, cls):
# Helper sub-container gathering all exporter settings related to media (texture files).
FBXExportSettingsMedia = namedtuple("FBXExportSettingsMedia", (
"path_mode", "base_src", "base_dst", "subdir",
- "embed_textures", "copy_set",
+ "embed_textures", "copy_set", "embedded_set",
))
# Helper container gathering all exporter settings.
More information about the Bf-extensions-cvs
mailing list