"""Door robot arm: the doors' own animation sampled every frame 1-120 (and every quarter frame) -> build/door_path.json, so the fit (dra_fit.py) can run in plain Python. blender -b --factory-startup --python build/dra_door_path.py -- """ import os import sys import json import bpy HERE = os.path.dirname(os.path.abspath(__file__)) ARGS = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [] bpy.ops.wm.open_mainfile(filepath=ARGS[0] if ARGS else os.path.join(os.path.dirname(HERE), "DoorRobotArm.blend")) sf = bpy.data.scenes["DoorArm | Ship fit"] if bpy.context.window_manager.windows: bpy.context.window_manager.windows[0].scene = sf out = {} for key, nm in (("AFT", "Moonpool_Door_Aft"), ("FORE", "Moonpool_Door_Fore")): ob = bpy.data.objects[nm] pts = [] for q in range(4, 120 * 4 + 1): f = q / 4 sf.frame_set(int(f), subframe=f - int(f)) t = ob.matrix_world.translation pts.append([round(f, 2), round(t.x, 6), round(t.y, 6), round(t.z, 6)]) out[key] = pts sf.frame_set(1) with open(os.path.join(HERE, "door_path.json"), "w") as fh: json.dump(out, fh) print("[dp] written", {k: (v[0], v[len(v) // 2], v[-1]) for k, v in out.items()}, flush=True)