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_to_file(self, context, out_fn):
29 obj = context.active_object
31 from .util import Progress
33 progress = Progress(self.show_progress and context)
34 progress.push_task("", 0.0, 0.95)
35 resource = self.export_mesh(context, obj, progress)
37 resource.write_to_file(out_fn)
39 def export_mesh(self, context, mesh_or_obj, progress):
40 from .mesh import Mesh, create_mesh_from_object
42 if type(mesh_or_obj)==Mesh:
45 progress.push_task("", 0.0, 0.9)
46 mesh = create_mesh_from_object(context, mesh_or_obj, progress)
49 from .datafile import Resource, Statement, Token
50 resource = Resource(mesh.name+".mesh", "mesh")
51 statements = resource.statements
53 st = Statement("vertices", Token("NORMAL3"))
55 for u in mesh.uv_layers:
56 size = str(len(u.uvs[0]))
58 st.append(Token("TEXCOORD"+size))
60 st.append(Token("TEXCOORD{}_{}".format(size, u.unit)))
62 st.append(Token("TANGENT3"))
63 st.append(Token("BINORMAL3"))
64 if mesh.vertex_groups:
65 st.append(Token("ATTRIB{}_5".format(mesh.max_groups_per_vertex*2)))
66 st.append(Token("VERTEX3"))
69 uvs = [None]*len(mesh.uv_layers)
73 for v in mesh.vertices:
75 st.sub.append(Statement("normal", *v.normal))
77 for i, u in enumerate(mesh.uv_layers):
80 st.sub.append(Statement("texcoord", *v.uvs[i]))
82 st.sub.append(Statement("multitexcoord", u.unit, *v.uvs[i]))
86 st.sub.append(Statement("tangent", *v.tan))
89 st.sub.append(Statement("binormal", *v.bino))
91 if mesh.vertex_groups:
92 group_attr = [(group_index_map[g.group], g.weight*v.group_weight_scale) for g in v.groups[:mesh.max_groups_per_vertex]]
93 while len(group_attr)<mesh.max_groups_per_vertex:
94 group_attr.append((0, 0.0))
95 group_attr = list(itertools.chain(*group_attr))
97 st.sub.append(Statement("attrib", 5, *group_attr))
99 st.sub.append(Statement("vertex", *v.co))
101 statements.append(st)
104 strips = mesh.vertex_sequence
105 if self.use_degen_tris:
106 strips = [self.join_strips(strips)]
109 st = Statement("batch", Token("TRIANGLE_STRIP"))
110 for i in range(0, len(s), 32):
111 st.sub.append(Statement("indices", *(v.index for v in s[i:i+32])))
112 statements.append(st)
114 st = Statement("batch", Token('TRIANGLES'))
116 st.sub.append(Statement("indices", *(v.index for v in f.vertices)))
117 statements.append(st)
120 st = Statement("batch", Token('LINES'))
122 st.sub.append(Statement("indices", *(v.index for v in l.vertices)))
123 statements.append(st)
125 if mesh.winding_test:
126 statements.append(Statement("winding", Token('COUNTERCLOCKWISE')))
128 progress.set_progress(1.0)