|
20 | 20 | import os |
21 | 21 | import re |
22 | 22 | import sys |
| 23 | +import tempfile |
23 | 24 | import time |
24 | 25 | import traceback |
25 | 26 | import uuid as py_uuid |
|
57 | 58 | from .logging_setup import DMX_Log |
58 | 59 | from .material import get_gobo_material, set_light_nodes |
59 | 60 | from .mdns import DMX_Zeroconf |
60 | | -from .mvr import load_mvr |
| 61 | +from .mvr import load_mvr, export_mvr as mvr_export_mvr |
61 | 62 | from .mvr_objects import DMX_MVR_Class, DMX_MVR_Object |
62 | 63 | from .mvrx_protocol import DMX_MVR_X_Client, DMX_MVR_X_Server, DMX_MVR_X_WS_Client |
63 | 64 | from .mvrxchange.mvr_xchange_blender import ( |
@@ -2226,78 +2227,19 @@ def is_there_universe_zero(self): |
2226 | 2227 | return False |
2227 | 2228 |
|
2228 | 2229 | def export_mvr( |
2229 | | - self, file_name, export_focus_points=True, selected_fixtures_only=False |
| 2230 | + self, |
| 2231 | + file_name, |
| 2232 | + export_focus_points=True, |
| 2233 | + selected_fixtures_only=False, |
| 2234 | + export_fixtures_only=False, |
2230 | 2235 | ): |
2231 | | - start_time = time.time() |
2232 | | - bpy.context.window_manager.dmx.pause_render = ( |
2233 | | - True # this stops the render loop, to prevent slowness and crashes |
| 2236 | + return mvr_export_mvr( |
| 2237 | + self, |
| 2238 | + file_name, |
| 2239 | + export_focus_points=export_focus_points, |
| 2240 | + selected_fixtures_only=selected_fixtures_only, |
| 2241 | + export_fixtures_only=export_fixtures_only, |
2234 | 2242 | ) |
2235 | | - dmx = bpy.context.scene.dmx |
2236 | | - # reset 3D cursor to eliminate offset issues |
2237 | | - bpy.context.scene.cursor.location = (0.0, 0.0, 0.0) |
2238 | | - bpy.context.scene.cursor.rotation_euler = (0.0, 0.0, 0.0) |
2239 | | - |
2240 | | - folder_path = self.get_addon_path() |
2241 | | - folder_path = os.path.join(folder_path, "assets", "profiles") |
2242 | | - universe_add = self.is_there_universe_zero() |
2243 | | - |
2244 | | - try: |
2245 | | - fixtures_list = [] |
2246 | | - mvr = pymvr.GeneralSceneDescriptionWriter() |
2247 | | - mvr.serialize_user_data(pymvr.UserData()) |
2248 | | - |
2249 | | - layers = pymvr.Layers() |
2250 | | - |
2251 | | - for dmx_fixture in dmx.fixtures: |
2252 | | - if selected_fixtures_only and not dmx_fixture.is_selected(): |
2253 | | - continue |
2254 | | - fixture_layer_name = dmx_fixture.get("layer_name", "DMX") |
2255 | | - fixture_layer_uuid = dmx_fixture.get("layer_uuid", None) |
2256 | | - if fixture_layer_uuid is not None: |
2257 | | - use_layer = next( |
2258 | | - (l for l in layers if l.uuid == fixture_layer_uuid), None |
2259 | | - ) |
2260 | | - if not use_layer: |
2261 | | - use_layer = pymvr.Layer( |
2262 | | - name=fixture_layer_name, uuid=fixture_layer_uuid |
2263 | | - ) |
2264 | | - new_child_list = pymvr.ChildList() |
2265 | | - use_layer.child_list = new_child_list |
2266 | | - layers.append(use_layer) |
2267 | | - else: # no layer in fixture |
2268 | | - use_layer = next( |
2269 | | - (l for l in layers if l.name == fixture_layer_name), None |
2270 | | - ) # we should get "DMX" layer if exists |
2271 | | - if not use_layer: # create new DMX layer |
2272 | | - use_layer = pymvr.Layer(name="DMX", uuid=str(py_uuid.uuid4())) |
2273 | | - new_child_list = pymvr.ChildList() |
2274 | | - use_layer.child_list = new_child_list |
2275 | | - layers.append(use_layer) |
2276 | | - |
2277 | | - child_list = use_layer.child_list |
2278 | | - |
2279 | | - fixture_object = dmx_fixture.to_mvr_fixture(universe_add=universe_add) |
2280 | | - focus_point = dmx_fixture.focus_to_mvr_focus_point() |
2281 | | - if export_focus_points and focus_point is not None: |
2282 | | - child_list.focus_points.append(focus_point) |
2283 | | - child_list.fixtures.append(fixture_object) |
2284 | | - if fixture_object.gdtf_spec: |
2285 | | - file_path = os.path.join(folder_path, fixture_object.gdtf_spec) |
2286 | | - fixtures_list.append((file_path, fixture_object.gdtf_spec)) |
2287 | | - |
2288 | | - scene = pymvr.Scene(layers=layers, aux_data=pymvr.AUXData()) |
2289 | | - mvr.serialize_scene(scene) |
2290 | | - mvr.files_list = list(set(fixtures_list)) |
2291 | | - mvr.write_mvr(file_name) |
2292 | | - file_size = Path(file_name).stat().st_size |
2293 | | - |
2294 | | - except Exception as e: |
2295 | | - traceback.print_exception(e) |
2296 | | - return SimpleNamespace(ok=False, error=str(e)) |
2297 | | - |
2298 | | - bpy.context.window_manager.dmx.pause_render = False # re-enable render loop |
2299 | | - print("INFO", "MVR scene exported in %.4f sec." % (time.time() - start_time)) |
2300 | | - return SimpleNamespace(ok=True, file_size=file_size) |
2301 | 2243 |
|
2302 | 2244 | def ensureUniverseExists(self, universe): |
2303 | 2245 | # Allocate universes to be able to control devices |
|
0 commit comments