Files
2026-07-22 13:48:46 +08:00

40 lines
1.2 KiB
Python

"""Record a replayable model graph, export model JSON, then replay it.
Run from the repository root with:
uv run python examples/02_graph_replay.py
"""
from pathlib import Path
import simplecadapi as scad
from simplecadapi import ql as Q
OUT = Path("examples/out")
OUT.mkdir(parents=True, exist_ok=True)
with scad.GraphSession() as session:
body = scad.make_box_rsolid(40.0, 24.0, 10.0, bottom_face_center=(0.0, 0.0, 0.0))
cutter = scad.make_cylinder_rsolid(4.0, 16.0, bottom_face_center=(0.0, 0.0, -3.0))
drilled = scad.cut_rsolid(body, cutter)
# Use a serializable QL selector instead of relying on OCC edge iteration order.
bottom_circle = (
Q.edges()
.where(Q.curve_type("circle"))
.order_by(Q.center_axis("z"))
.take(1)
.exactly(1)
)
final = scad.chamfer_rsolid(drilled, bottom_circle, 0.6)
model_json = scad.export_model_json(session)
(OUT / "graph_replay.model.json").write_text(model_json, encoding="utf-8")
rebuilt = scad.replay_model_json(model_json)
print("recorded_nodes", session.graph.node_count)
print("replayed_outputs", len(rebuilt))
print("replayed_type", type(rebuilt[0]).__name__ if rebuilt else "none")
print("wrote", OUT / "graph_replay.model.json")