[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