66 lines
2.4 KiB
Python
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()
|