import json import pathlib import sys import bpy def vector(value): return [round(float(component), 6) for component in value] directory = pathlib.Path(sys.argv[sys.argv.index("--") + 1]) states = {} for blend in sorted(directory.glob("*.blend")): bpy.ops.wm.open_mainfile(filepath=str(blend)) bpy.context.view_layer.update() states[blend.stem] = { "objects": sorted(({ "name": obj.name, "type": obj.type, "dataType": obj.data.bl_rna.identifier if obj.data else None, "dataName": obj.data.name if obj.data else None, "location": vector(obj.location), "rotation": vector(obj.rotation_euler), "scale": vector(obj.scale), "selected": obj.select_get(), "hideViewport": obj.hide_viewport, "hideRender": obj.hide_render, "visible": obj.visible_get(), "collections": sorted(collection.name for collection in obj.users_collection), } for obj in bpy.data.objects), key=lambda obj: obj["name"]), "collections": sorted(({ "name": collection.name, "hideViewport": collection.hide_viewport, "hideRender": collection.hide_render, "objects": sorted(obj.name for obj in collection.objects), } for collection in bpy.data.collections), key=lambda collection: collection["name"]), "active": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, "dataBlocks": { "cameras": sorted(data.name for data in bpy.data.cameras), "lights": sorted(data.name for data in bpy.data.lights), "armatures": sorted(data.name for data in bpy.data.armatures), "meshes": sorted(data.name for data in bpy.data.meshes), }, } (directory / "native-object-editor-snapshots.json").write_text( json.dumps(states, indent=2, sort_keys=True) + "\n")