"""Read browser Main and independently create the same cube in desktop Blender.""" import json import pathlib import sys import bpy def vector(values): return [round(float(value), 6) + 0.0 for value in values] def summary(): bpy.context.view_layer.update() return [{"name": obj.name, "type": obj.type, "location": vector(obj.location), "vertices": sorted(vector(v.co) for v in obj.data.vertices) if obj.type == "MESH" else [], "faces": len(obj.data.polygons) if obj.type == "MESH" else 0} for obj in sorted(bpy.data.objects, key=lambda obj: obj.name)] 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)) states[blend.stem] = summary() bpy.ops.wm.open_mainfile(filepath=str(directory / "before.blend")) primitive = json.loads((directory / "primitive.json").read_text())["primitive"] operator = getattr(bpy.ops.mesh, "primitive_" + primitive + "_add") assert operator(size=2, location=(0, 0, 0)) == {"FINISHED"} bpy.context.active_object.name = "BridgePrimitive" states["expected"] = summary() (directory / "native.json").write_text(json.dumps(states, sort_keys=True, indent=2) + "\n")