X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport.py;h=6db2c81c6cbb9f718ebec222227182e9e8d7e96b;hb=5b19e93f2eb5db3c97a17d63250716c26a01b53f;hp=f36cc4df6c1d774d8b66d6604f3ab2ac9440ca3e;hpb=976d2564de7c4e6394b3499b30a53a736771c808;p=libs%2Fgl.git diff --git a/blender/io_mspgl/export.py b/blender/io_mspgl/export.py index f36cc4df..6db2c81c 100644 --- a/blender/io_mspgl/export.py +++ b/blender/io_mspgl/export.py @@ -1,11 +1,8 @@ import os +import itertools class DataExporter: - def __init__(self): - self.collection = False - self.shared_resources = True - - def export_to_file(self, context, out_fn): + def export_to_file(self, context, out_fn, *, collection=False, shared_resources=False): from .util import Progress progress = Progress(context) @@ -20,7 +17,7 @@ class DataExporter: base, ext = os.path.splitext(base) refs = dummy_res.collect_references() - if not self.shared_resources: + if not shared_resources: numbers = {} for r in refs: res_ext = os.path.splitext(r.name)[1] @@ -31,7 +28,7 @@ class DataExporter: r.name = base+res_ext numbers[res_ext] = n+1 - if self.collection: + if collection: dummy_res.write_collection(out_fn, exclude_self=True) else: for r in refs: @@ -44,6 +41,7 @@ class DataExporter: object_exporter = None camera_exporter = None armature_exporter = None + light_exporter = None from .datafile import Resource dummy_res = Resource("dummy", "dummy") @@ -74,6 +72,13 @@ class DataExporter: from .export_armature import ArmatureExporter armature_exporter = ArmatureExporter() res = armature_exporter.export_armature(context, obj) + elif obj.type=='LIGHT': + res_name = obj.name+".light" + if res_name not in resources: + if not light_exporter: + from .export_light import LightExporter + light_exporter = LightExporter() + res = light_exporter.export_light(obj) if res: resources[res_name] = res @@ -82,3 +87,68 @@ class DataExporter: progress.pop_task() return dummy_res + +class ProjectExporter: + def export_to_directory(self, context, out_dir): + from .util import Progress + progress = Progress(context) + + from .scene import create_scene_chain + + scenes = {} + sequences = [] + for s in context.blend_data.scenes: + if s.export_disposition=='IGNORE': + continue + + if s.export_disposition=='SEQUENCE': + scene = create_scene_chain(s, scenes) + sequences.append(scene) + elif s.name not in scenes: + scene = create_scene(s) + if s.export_disposition=='SCENE': + scenes[scene.name] = scene + + all_objects = [] + for s in scenes.values(): + all_objects += s.prototypes + all_objects += s.lights + if s.camera: + all_objects.append(s.camera) + + scene_queue = list(scenes.values()) + ordered_scenes = [] + while scene_queue: + s = scene_queue.pop(0) + if not s.background_set or s.background_set in ordered_scenes: + ordered_scenes.append(s) + else: + scene_queue.append(s) + + from .util import make_unique + all_objects = make_unique(all_objects) + + from .export_scene import SceneExporter + scene_exporter = SceneExporter() + data_exporter = DataExporter() + + resources = {} + dummy_res = data_exporter.export_resources(context, all_objects, resources, None, progress) + for s in ordered_scenes: + scene_name = s.name+".scene" + if scene_name not in resources: + scene_res = scene_exporter.export_scene(s, resources) + resources[scene_name] = scene_res + dummy_res.create_reference_statement("ref", scene_res) + + for s in sequences: + seq_name = s.name+".seq" + if seq_name not in resources: + scene_exporter.export_sequence_resources(s, resources) + seq_res = scene_exporter.export_sequence(s, resources) + resources[seq_name] = seq_res + dummy_res.create_reference_statement("ref", seq_res) + + refs = dummy_res.collect_references() + for r in refs: + r.write_to_file(os.path.join(out_dir, r.name))