"""Shared fixtures. Inc 0 binds no modelling API, so shapes for the tests are built the long way: a compound assembled through BRep_Builder, and shapes read back from the committed .brep fixtures (tests/data), which were produced by the *stock* wheel — see tools/gen_fixtures.py. """ from __future__ import annotations import io import json import pathlib import pytest from OCP.BinTools import BinTools from OCP.TopoDS import TopoDS_Shape DATA = pathlib.Path(__file__).parent / "data" def load_brep(path: pathlib.Path) -> TopoDS_Shape: shape = TopoDS_Shape() with path.open("rb") as fh: BinTools.Read_s(shape, io.BytesIO(fh.read())) return shape @pytest.fixture(scope="session") def manifest() -> dict: path = DATA / "manifest.json" if not path.exists(): pytest.skip("fixtures not generated — run tools/gen_fixtures.py") return json.loads(path.read_text()) @pytest.fixture(scope="session") def fixture_shapes(manifest) -> dict[str, TopoDS_Shape]: return {name: load_brep(DATA / f"{name}.brep") for name in manifest["shapes"]} @pytest.fixture def a_face(fixture_shapes): """First face of the meshed box fixture.""" from OCP.TopAbs import TopAbs_FACE from OCP.TopExp import TopExp from OCP.TopTools import TopTools_IndexedMapOfShape faces = TopTools_IndexedMapOfShape() TopExp.MapShapes_s(fixture_shapes["box_meshed"], TopAbs_FACE, faces) return faces.FindKey(1)