X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_mesh.py;h=cae0e5894b97fa05f6f9fa21bd3c2f2b6bdc03b9;hb=af4769679fc41cfd95bb12777423f7672ba5f661;hp=18ae856a927ce8f28b70a45c51ab4ed5b9cfda00;hpb=820d8ff86b911f1119b8cde03839687176b9b1ee;p=libs%2Fgl.git diff --git a/blender/io_mspgl/export_mesh.py b/blender/io_mspgl/export_mesh.py index 18ae856a..cae0e589 100644 --- a/blender/io_mspgl/export_mesh.py +++ b/blender/io_mspgl/export_mesh.py @@ -34,12 +34,13 @@ class VertexCache: class MeshExporter: def __init__(self): + self.show_progress = True self.use_strips = True - self.use_degen_tris = True + self.use_degen_tris = False self.max_strip_len = 1024 - self.optimize_cache = False + self.optimize_cache = True self.cache_size = 64 - self.export_lines = True + self.export_lines = False self.export_uv = "UNIT0" self.tbn_vecs = False self.tbn_uvtex = "" @@ -49,7 +50,7 @@ class MeshExporter: self.export_groups = False self.max_groups = 2 - def stripify(self, mesh, progress = None): + def stripify(self, mesh, progress=None): for f in mesh.faces: f.flag = False @@ -191,10 +192,20 @@ class MeshExporter: return strips, loose - def export(self, context, out_file): + def export(self, context, out_file, objs=None, progress=None): if self.compound: - objs = context.selected_objects - else: + if objs is None: + objs = context.selected_objects + check = objs + while check: + children = [] + for o in check: + for c in o.children: + if c.compound: + children.append(c) + objs += children + check = children + elif objs is None: objs = [context.active_object] if not objs: @@ -206,8 +217,12 @@ class MeshExporter: from .mesh import Mesh from .util import Progress - progress = Progress(context) - progress.set_task("Preparing", 0.0, 0.0) + if self.show_progress: + if not progress: + progress = Progress(context) + progress.set_task("Preparing", 0.0, 0.0) + else: + progress = None mesh = None bmeshes = [] @@ -219,7 +234,8 @@ class MeshExporter: else: mesh.splice(Mesh(bmesh)) - progress.set_task("Smoothing", 0.05, 0.35) + if progress: + progress.set_task("Smoothing", 0.05, 0.35) if self.smoothing=="NONE": mesh.flatten_faces() mesh.split_smooth(progress) @@ -270,7 +286,8 @@ class MeshExporter: texunits.insert(0, unit) for i, u in texunits: - progress.set_task("Splitting UVs", 0.35+0.3*i/len(texunits), 0.35+0.3*(i+1)/len(texunits)) + if progress: + progress.set_task("Splitting UVs", 0.35+0.3*i/len(texunits), 0.35+0.3*(i+1)/len(texunits)) mesh.split_uv(i, progress) if self.tbn_vecs and u.name==self.tbn_uvtex: mesh.compute_uv() @@ -281,10 +298,12 @@ class MeshExporter: strips = [] loose = mesh.faces if self.use_strips: - progress.set_task("Creating strips", 0.65, 0.95) + if progress: + progress.set_task("Creating strips", 0.65, 0.95) strips, loose = self.stripify(mesh, progress) - progress.set_task("Writing file", 0.95, 1.0) + if progress: + progress.set_task("Writing file", 0.95, 1.0) from .outfile import open_output out_file = open_output(out_file) @@ -303,7 +322,7 @@ class MeshExporter: fmt.append("VERTEX3") out_file.begin("vertices", *fmt) normal = None - uvs = [None]*(max(u[0] for u in texunits)+1) + uvs = {} tan = None bino = None group = None @@ -312,7 +331,7 @@ class MeshExporter: out_file.write("normal3", *v.normal) normal = v.normal for i, u in texunits: - if v.uvs[i]!=uvs[i]: + if v.uvs[i]!=uvs.get(i): if u.unit==0 or force_unit0: out_file.write("texcoord2", *v.uvs[i]) else: @@ -356,12 +375,13 @@ class MeshExporter: out_file.end() if self.export_lines and mesh.lines: - out_file.write("batch", "LINES") + out_file.begin("batch", "LINES") for l in mesh.lines: out_file.write("indices", l.vertices[0].index, l.vertices[1].index) out_file.end() - progress.set_task("Done", 1.0, 1.0) + if progress: + progress.set_task("Done", 1.0, 1.0) for m in bmeshes: bpy.data.meshes.remove(m)