diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-03-07 23:41:13 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-03-07 23:41:13 +0300 |
commit | ac48e91b44e15bae81c50b03d838f7eee145f718 (patch) | |
tree | f1bafbd8dab5ed7c0cd3d3c965bb1f4a9400096d | |
parent | bb5ff2b9d56af4fc6e52dbf8bdde1daec5717671 (diff) |
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.
-rw-r--r-- | io_scene_x3d/export_x3d.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py index 8129dc3e..4ae33d5f 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: |