X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_scene.py;h=f6776107413955964d0e3e757bc5594e3a69d03f;hp=d51fb4718a0fdf1afda48a9587bf670dcbe3732e;hb=6ee541f;hpb=04c89988c7eda12ea763a9283df0aeba177a11ad diff --git a/blender/io_mspgl/export_scene.py b/blender/io_mspgl/export_scene.py index d51fb471..f6776107 100644 --- a/blender/io_mspgl/export_scene.py +++ b/blender/io_mspgl/export_scene.py @@ -6,14 +6,11 @@ class SceneExporter: self.resource_collection = True self.show_progress = True - def export(self, context, out_file): - objs = context.selected_objects - objs = [o for o in objs if o.type=="MESH" and (not o.compound or o.parent not in objs) and not o.lod_for_parent] + def export_to_file(self, context, out_fn): + objs = [o for o in context.selected_objects if o.type=="MESH" and not o.lod_for_parent] + objs = [o for o in objs if (not o.compound or o.parent not in objs)] - from .outfile import open_output - out_file = open_output(out_file) - - path, base = os.path.split(out_file.filename) + path, base = os.path.split(out_fn) base, ext = os.path.splitext(base) from .export_object import ObjectExporter @@ -46,32 +43,44 @@ class SceneExporter: from .util import Progress progress = Progress(self.show_progress and context) - if self.resource_collection: - res_out = open_output(os.path.join(path, base+"_resources.mdc")) + from .export_object import ObjectExporter + object_export = ObjectExporter() - # TODO Export techniques as separate items in the collection - for i, o in enumerate(unique_objects): - res_out.begin("object", '"{}.object"'.format(o.name)) - progress.push_task_slice(o.name, i, len(objs)) - object_export.export(context, res_out, o, progress) - progress.pop_task() - res_out.end() + from .datafile import Statement + if self.resource_collection: + with open(os.path.join(path, base+"_resources.mdc"), "w") as res_out: + for i, o in enumerate(unique_objects): + progress.push_task_slice(o.name, i, len(unique_objects)) + st = Statement("object", "{}.object".format(o.name)) + st.sub = object_export.export_object(context, o, progress) + st.write_to_file(res_out) + progress.pop_task() else: - object_export.separate_mesh = True - object_export.separate_tech = True res_dir = os.path.join(path, base+"_resources") if not os.path.exists(res_dir): os.makedirs(res_dir) for i, o in enumerate(unique_objects): - obj_out = open_output(os.path.join(res_dir, o.name+".object")) - progress.push_task_slice(o.name, i, len(objs)) - object_export.export(context, obj_out, o, progress) + progress.push_task_slice(o.name, i, len(unique_objects)) + st = object_export.export_object(context, o, progress) + with open(os.path.join(res_dir, o.name+".object"), "w") as obj_out: + for s in st: + s.write_to_file(obj_out) progress.pop_task() + statements = self.export_scene(context, objs, progress, prototypes=object_prototypes) + + with open(out_fn, "w") as out_file: + for s in statements: + s.write_to_file(out_file) + + def export_scene(self, context, objs, progress, *, prototypes=None): + from .datafile import Statement + statements = [] + for o in objs: - out_file.begin("object", '"{}.object"'.format(object_prototypes[o.name].name)) + st = Statement("object", "{}.object".format(prototypes[o.name].name)) # XXX Parent relationships screw up the location and rotation - out_file.write("position", o.location[0], o.location[1], o.location[2]) + st.sub.append(Statement("position", o.location[0], o.location[1], o.location[2])) if o.rotation_mode=="AXIS_ANGLE": angle = o.rotation_axis_angle[0] axis = o.rotation_axis_angle[1:] @@ -82,6 +91,10 @@ class SceneExporter: q = o.rotation_euler.to_quaternion() angle = q.angle axis = q.axis - out_file.write("rotation", angle*180/math.pi, axis[0], axis[1], axis[2]) - out_file.write("scale", o.scale[0], o.scale[1], o.scale[2]) - out_file.end() + st.sub.append(Statement("rotation", angle*180/math.pi, axis[0], axis[1], axis[2])) + st.sub.append(Statement("scale", o.scale[0], o.scale[1], o.scale[2])) + statements.append(st) + + progress.set_progress(1.0) + + return statements