Files
workinf_Blender_Wasm/tools/web/generate-grease-pencil-reorder-golden.py
mes123456 0fe8d2bb56
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
Advance M8-M11 parity workflows
2026-08-17 04:37:07 -04:00

66 lines
2.4 KiB
Python

import hashlib
import json
import os
import sys
import tempfile
import bpy
def layer_state(grease_pencil):
return {
"layerOrder": [layer.name for layer in grease_pencil.layers],
"framesByLayer": {
layer.name: sorted(frame.frame_number for frame in layer.frames)
for layer in grease_pencil.layers
},
}
def main():
arguments = sys.argv[sys.argv.index("--") + 1 :] if "--" in sys.argv else []
if len(arguments) != 2:
raise SystemExit("usage: blender -b fixture.blend --python generate-grease-pencil-reorder-golden.py -- fixture.blend output.json")
fixture = os.path.abspath(arguments[0])
output = os.path.abspath(arguments[1])
grease_pencil = bpy.data.grease_pencils.get("GreasePencilData")
if grease_pencil is None or len(grease_pencil.layers) != 1:
raise RuntimeError("GreasePencilData fixture must contain exactly one source layer")
source = layer_state(grease_pencil)
layer = grease_pencil.layers.new("Web Drafts", set_active=True)
layer.frames.new(1)
before = layer_state(grease_pencil)
grease_pencil.layers.move(layer, "DOWN")
moved = layer.frames.move(1, 12)
if moved is None:
raise RuntimeError("Blender refused the Grease Pencil frame move")
after = layer_state(grease_pencil)
with tempfile.TemporaryDirectory(prefix="m9-08-grease-pencil-reorder-") as temporary:
saved = os.path.join(temporary, "grease-pencil-reorder.blend")
bpy.ops.wm.save_as_mainfile(filepath=saved, check_existing=False)
bpy.ops.wm.open_mainfile(filepath=saved)
reopened = layer_state(bpy.data.grease_pencils["GreasePencilData"])
with open(fixture, "rb") as source_file:
fixture_sha256 = hashlib.sha256(source_file.read()).hexdigest()
payload = {
"schemaVersion": 1,
"fixture": "tests/files/web/modifier_grease_pencil_scene.blend",
"fixtureSha256": fixture_sha256,
"blenderVersion": ".".join(str(value) for value in bpy.app.version),
"greasePencilName": "GreasePencilData",
"source": source,
"beforeReorder": before,
"afterReorder": after,
"reopened": reopened,
}
with open(output, "w", encoding="utf-8") as destination:
json.dump(payload, destination, indent=2, sort_keys=True)
destination.write("\n")
if __name__ == "__main__":
main()