7 self.show_progress = True
9 self.use_degen_tris = False
11 def join_strips(self, strips):
16 # Generate glue elements, ensuring that the next strip begins at
18 glue = [big_strip[-1], s[0]]
28 def export(self, context, out_file, obj=None, progress=None):
30 obj = context.active_object
32 from .mesh import create_mesh_from_object
33 from .util import Progress
36 progress = Progress(self.show_progress and context)
37 progress.push_task("", 0.0, 0.9)
39 mesh = create_mesh_from_object(context, obj, progress)
44 strips = mesh.vertex_sequence
45 if self.use_degen_tris:
46 strips = [self.join_strips(strips)]
49 progress.set_task("Writing file", 0.9, 1.0)
51 from .outfile import open_output
52 out_file = open_output(out_file)
56 for u in mesh.uv_layers:
57 size = str(len(u.uvs[0]))
59 fmt.append("TEXCOORD"+size)
61 fmt.append("TEXCOORD%s_%d"%(size, u.unit))
63 fmt += ["TANGENT3", "BINORMAL3"]
64 if mesh.vertex_groups:
65 fmt.append("ATTRIB%d_5"%(mesh.max_groups_per_vertex*2))
67 out_file.begin("vertices", *fmt)
73 for v in mesh.vertices:
75 out_file.write("normal3", *v.normal)
77 for i, u in enumerate(mesh.uv_layers):
78 if v.uvs[i]!=uvs.get(i):
79 size = str(len(v.uvs[i]))
81 out_file.write("texcoord"+size, *v.uvs[i])
83 out_file.write("multitexcoord"+size, u.unit, *v.uvs[i])
87 out_file.write("tangent3", *v.tan)
90 out_file.write("binormal3", *v.bino)
92 if mesh.vertex_groups:
93 group_attr = [(group_index_map[g.group], g.weight*v.group_weight_scale) for g in v.groups[:mesh.max_groups_per_vertex]]
94 while len(group_attr)<mesh.max_groups_per_vertex:
95 group_attr.append((0, 0.0))
96 group_attr = list(itertools.chain(*group_attr))
98 out_file.write("attrib%d"%len(group_attr), 5, *group_attr)
100 out_file.write("vertex3", *v.co)
103 out_file.begin("batch", "TRIANGLE_STRIP")
107 indices.append(v.index)
109 out_file.write("indices", *indices)
112 out_file.write("indices", *indices)
116 out_file.begin("batch", "TRIANGLES")
118 for i in range(2, len(f.vertices)):
119 out_file.write("indices", f.vertices[0].index, f.vertices[i-1].index, f.vertices[i].index)
123 out_file.begin("batch", "LINES")
125 out_file.write("indices", l.vertices[0].index, l.vertices[1].index)
128 if mesh.winding_test:
129 out_file.write("winding", "COUNTERCLOCKWISE")