[Bf-extensions-cvs] [ac48e91] master: Correct X3D export logic

Campbell Barton noreply at git.blender.org
Mon Mar 7 21:51:59 CET 2016


Commit: ac48e91b44e15bae81c50b03d838f7eee145f718
Author: Campbell Barton
Date:   Tue Mar 8 07:41:13 2016 +1100
Branches: master
https://developer.blender.org/rBAac48e91b44e15bae81c50b03d838f7eee145f718

Correct X3D export logic

- Wasn't breaking out of loop when vertex color was set to false.
- No need to use dictionary for vertex colors, use list instead.

===================================================================

M	io_scene_x3d/export_x3d.py

===================================================================

diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index 8129dc3..4ae33d5 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -599,17 +599,22 @@ def export(file,
             # Check if vertex colors can be exported in per-vertex mode.
             # Do we have just one color per vertex in every face that uses the vertex?
             if is_col: 
-                is_col_per_vertex = True
-                vert_color = dict()
-                for i, face in enumerate(mesh_faces):
-                    fcol = mesh_faces_col[i]
-                    face_colors = (fcol.color1, fcol.color2, fcol.color3, fcol.color4)
-                    for j, vert_index in enumerate(face.vertices):
-                        if vert_index not in vert_color:
-                            vert_color[vert_index] = face_colors[j]
-                        elif vert_color[vert_index] != face_colors[j]:
-                            is_col_per_vertex = False
-                            break
+                def calc_vertex_color():
+                    vert_color = [None] * len(mesh.vertices)
+
+                    for i, face in enumerate(mesh_faces):
+                        fcol = mesh_faces_col[i]
+                        face_colors = (fcol.color1, fcol.color2, fcol.color3, fcol.color4)
+                        for j, vert_index in enumerate(face.vertices):
+                            if vert_color[vert_index] is None:
+                                vert_color[vert_index] = face_colors[j][:]
+                            elif vert_color[vert_index] != face_colors[j][:]:
+                                return False, ()
+
+                    return True, vert_color
+
+                is_col_per_vertex, vert_color = calc_vertex_color()
+                del calc_vertex_color
 
             for (material_index, image), face_group in face_groups_items:  # face_groups.items()
                 if face_group:
@@ -934,7 +939,7 @@ def export(file,
                             fw('%s<Color color="' % ident)
                             if is_col_per_vertex:
                                 for i in range(len(mesh.vertices)):
-                                    fw('%.3f %.3f %.3f ' % (vert_color[i][:] if i in vert_color else (0,0,0)))
+                                    fw('%.3f %.3f %.3f ' % (vert_color[i] or (0.0, 0.0, 0.0)))
                             else: # Export as colors per face. 
                                 # TODO: average them rather than using the first one!
                                 for i in face_group:



More information about the Bf-extensions-cvs mailing list