Files
workinf_Blender_Wasm/web/tests/fixtures/io-route-main-snapshots.py
mes123456 f3e21c6b98
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-10 11:18:01 +08:00

46 lines
1.7 KiB
Python

"""Read browser-produced blend files and independently import OBJ using Blender."""
import json
import pathlib
import sys
import bpy
def vector(values):
return [round(float(value), 5) for value in values]
def summary():
bpy.context.view_layer.update()
return sorted([{
"name": obj.name, "type": obj.type,
"location": vector(obj.location), "rotation": vector(obj.rotation_euler),
"scale": vector(obj.scale),
"vertices": [vector(vertex.co) for vertex in obj.data.vertices] if obj.type == "MESH" else [],
"faces": [list(face.vertices) for face in obj.data.polygons] if obj.type == "MESH" else [],
} for obj in bpy.data.objects], key=lambda item: item["name"])
def geometry():
bpy.context.view_layer.update()
return sorted([{
"vertices": sorted(vector(obj.matrix_world @ vertex.co) for vertex in obj.data.vertices),
"faces": len(obj.data.polygons),
} for obj in bpy.data.objects if obj.type == "MESH"], key=lambda item: json.dumps(item, sort_keys=True))
directory, fixture, source = sys.argv[sys.argv.index("--") + 1:]
directory = pathlib.Path(directory)
states = {}
for blend in sorted(directory.glob("*.blend")):
bpy.ops.wm.open_mainfile(filepath=str(blend))
states[blend.stem] = summary()
if blend.stem == "after":
states["afterGeometry"] = geometry()
bpy.ops.wm.open_mainfile(filepath=fixture)
assert bpy.ops.wm.obj_import(filepath=source) == {"FINISHED"}
states["desktopExpected"] = summary()
bpy.ops.wm.read_factory_settings(use_empty=True)
assert bpy.ops.wm.obj_import(filepath=str(directory / "exported.obj")) == {"FINISHED"}
states["exportedGeometry"] = geometry()
(directory / "native.json").write_text(json.dumps(states, sort_keys=True, indent=2) + "\n")