From f1b4acba3fc8b56bf3232cd5c05b8266a6af899e Mon Sep 17 00:00:00 2001
From: Campbell Barton <ideasman42@gmail.com>
Date: Sun, 11 Dec 2011 16:26:36 +0000
Subject: [PATCH] fix [#29262] X3D exporter does not export ok for obj_type !=
 'MESH'

this is a patch submission but fix in a different way
---
 io_scene_x3d/export_x3d.py | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index 6cc1fb2b0..7ef39af38 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -266,6 +266,9 @@ def export(file,
     # store files to copy
     copy_set = set()
 
+    # store names of newly cerated meshes, so we dont overlap
+    mesh_name_set = set()
+
     fw = file.write
     base_src = os.path.dirname(bpy.data.filepath)
     base_dst = os.path.dirname(file.name)
@@ -1377,14 +1380,30 @@ def export(file,
                         me = obj.to_mesh(scene, use_apply_modifiers, 'PREVIEW')
                     except:
                         me = None
+                    do_remove = True
                 else:
                     me = obj.data
+                    do_remove = False
 
                 if me is not None:
+                    # ensure unique name, we could also do this by
+                    # postponing mesh removal, but clearing data - TODO
+                    if do_remove:
+                        me.name = obj.name.rstrip("1234567890").rstrip(".")
+                        me_name_new = me_name_org = me.name
+                        count = 0
+                        while me_name_new in mesh_name_set:
+                            me.name = "%.17s.%03d" % (me_name_org, count)
+                            me_name_new = me.name
+                            count += 1
+                        mesh_name_set.add(me_name_new)
+                        del me_name_new, me_name_org, count
+                    # done
+
                     writeIndexedFaceSet(ident, obj, me, obj_matrix, world)
 
                     # free mesh created with create_mesh()
-                    if me != obj.data:
+                    if do_remove:
                         bpy.data.meshes.remove(me)
 
             elif obj_type == 'LAMP':
@@ -1466,7 +1485,7 @@ def export(file,
         bpy.data.materials.remove(gpu_shader_dummy_mat)
 
     # copy all collected files.
-    print(copy_set)
+    # print(copy_set)
     bpy_extras.io_utils.path_reference_copy(copy_set)
 
     print('Info: finished X3D export to %r' % file.name)
-- 
GitLab