diff --git a/CLAUDE.md b/CLAUDE.md index 3138188..ecd1971 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -75,7 +75,7 @@ No tests exist. No linter is configured. The full cohort graduated to v1.0 on 2026-05-07 alongside OCCT 8.0.0 GA. SemVer-stable from these floors — only bump on documented breaking changes. Pre-1.0 dep history (which API landed in which 0.x tag) lives in git log; consult it when you actually need to support an older floor, otherwise treat the v1.0 surface as the contract. -- **OCCTSwift** — `https://github.com/gsdali/OCCTSwift.git` (>= 1.3.1; xcframework built against **OCCT 8.0.0 GA**). The B-Rep kernel: ~400+ methods for parametric CAD, the full ISO drawings stack (Sheet/TitleBlock/ProjectionSymbol/Section2D/Hatch/AutoCentermarks/CuttingPlaneLine/CosmeticThread/SurfaceFinish/GDT/DetailView/DrawingScale), `FeatureReconstructor` for `reconstruct`, the `SheetMetal` namespace for `compose-sheet-metal`, and the XCAF surfaces (`AssemblyNode.labelId`, `Document.node(at:)`) for `inspect-assembly` / `set-metadata`. The functional floor for graph work is v1.0.1 (a `TopologyGraph.NodeKind` raw-value fix where assembly-rooted graphs returned an empty `rootNodes`), but the floor is **v1.3.1** because the `recipes/` cookbook uses the v1.3.1 ergonomics: `Shape.circularPatternCut` (feature-level circular pattern, #169), orientation-normalised `Shape.sweep` + `orientedForward`/`signedVolume` (#170), and `concaveEdges`/`convexEdges`/`edges(where:)` selectors (#171). NB: those landed **only in v1.3.1** — the v1.2.1/v1.3.0 tags pre-date the merge to `main`, so don't trust the CHANGELOG's "v1.2.1" attribution when checking floors. +- **OCCTSwift** — `https://github.com/gsdali/OCCTSwift.git` (>= 1.7.1; xcframework built against **OCCT 8.0.0p1**). The B-Rep kernel: ~400+ methods for parametric CAD, the full ISO drawings stack (Sheet/TitleBlock/ProjectionSymbol/Section2D/Hatch/AutoCentermarks/CuttingPlaneLine/CosmeticThread/SurfaceFinish/GDT/DetailView/DrawingScale), `FeatureReconstructor` for `reconstruct`, the `SheetMetal` namespace for `compose-sheet-metal`, and the XCAF surfaces (`AssemblyNode.labelId`, `Document.node(at:)`) for `inspect-assembly` / `set-metadata`. **Floored at v1.7.1 (= OCCT 8.0.0p1)**: v1.7.0 realigned the BRepGraph wrapper to OCCT's redesigned graph model (definitions vs references/usages, persistent UIDs, controlled layers) and v1.7.1 made the derived graph reads real again — `adjacentFaces`/`faces(of:)`/`edges(of:)`/`sharedEdges`, `faceSameDomain`, `faceIsNaturalRestriction` — plus durable `UID`/`RefUID`/`ItemUID` identity. Our graph verbs (graph-validate/compact/dedup/ml, query-topology) build and run **unchanged** against it. Behaviour changes are **confined to the BRepGraph domain**: `edgeMaxContinuity`/`setEdgeRegularity` are now no-ops (use `Shape.maxContinuity` for continuity); `degenerated`/`closed`/`sameParameter`/`sameRange` setters no-op while their getters return the live derived value. The cookbook ergonomics relied on since v1.3.1 — `Shape.circularPatternCut` (#169), orientation-normalised `Shape.sweep` + `orientedForward`/`signedVolume` (#170), `concaveEdges`/`convexEdges`/`edges(where:)` selectors (#171) — are unchanged. The rest of the cohort still resolves at its existing floors (Viewport 1.0.4 / Tools 1.1.1 / AIS 1.0.2 / Mesh 1.0.0 / IO 1.0.0), all of which compile against 1.7.1. - **OCCTSwiftViewport** — `https://github.com/gsdali/OCCTSwiftViewport.git` (>= 1.0.0). Provides `OffscreenRenderer`, `CameraState`, `DisplayMode`, `ViewportBody` for `render-preview`. Graduated to v1.0.0 on 2026-05-08, one day after the rest of the cohort; floor unblocked by Tools v1.0.2 (closes #45). - **OCCTSwiftTools** — `https://github.com/gsdali/OCCTSwiftTools.git` (>= 1.0.0; resolves to v1.0.2+ for the widened Viewport constraint). Bridge layer between the B-Rep kernel and the Metal viewport. We use `CADFileLoader.shapeToBodyAndMetadata` in `render-preview` for Shape → `ViewportBody` conversion (both input bodies and highlight sub-shapes). Lives in its own repo since Viewport v0.55.0 split. - **OCCTSwiftAIS** — `https://github.com/gsdali/OCCTSwiftAIS.git` (>= 1.0.0). Headless-friendly subset only: `Trihedron` / `WorkPlane` / `Axis` / `PointCloud` scene objects (each emits `[ViewportBody]` via `makeBodies()`) for `render-preview`'s `--show-axes` / `--show-workplane` overlays, plus the SubShape selection vocabulary for `--highlight face[N]/edge[M]/vertex[K]`. Selection / Manipulator / SwiftUI surfaces aren't relevant to a CLI. `Dimension` overlays render via a SwiftUI Canvas inside `MetalViewportView` and so can't reach `OffscreenRenderer` — `--annotate-dimensions` is deferred (filed as OCCTSwiftViewport#26). Note: `OCCTSwiftAIS` re-exports a `DisplayMode` enum (3 cases) that collides with `OCCTSwiftViewport.DisplayMode` (6 cases); fully-qualify in `RenderPreview.swift` as `OCCTSwiftViewport.DisplayMode`. diff --git a/Package.resolved b/Package.resolved index 6e9e863..eee1671 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "c4581223165054bcda8b7587c40122b53e8020b87ffe93e3aaa253e80184a207", + "originHash" : "0e11f021a4d366bad494e92af92839bdf3a2394466e3876a9e1c2182012bd394", "pins" : [ { "identity" : "occtswift", "kind" : "remoteSourceControl", "location" : "https://github.com/gsdali/OCCTSwift.git", "state" : { - "revision" : "a011f4d2920922c6f0a651cde9a3caaf2d87bf9f", - "version" : "1.3.1" + "revision" : "6e3f99603ed14790816cb4857a6df20848bd11ca", + "version" : "1.7.1" } }, { diff --git a/Package.swift b/Package.swift index 682c000..b0e25c7 100644 --- a/Package.swift +++ b/Package.swift @@ -30,16 +30,19 @@ let package = Package( ), ], dependencies: [ - // OCCTSwift v1.0.0 pins to OCCT 8.0.0 GA (2026-05-07). v1.0.1 ships - // the TopologyGraph.NodeKind fix (Product/Occurrence raw values were - // missing, so rootNodes silently returned [] for any graph with - // assembly roots). Floored at v1.3.1, which adds the cookbook-driven - // ergonomics used by recipes/: Shape.circularPatternCut (feature-level - // circular pattern, #169), orientation-normalised Shape.sweep + - // orientedForward/signedVolume (#170), and concaveEdges/convexEdges/ - // edges(where:) selectors (#171). NB these landed only in v1.3.1 — the - // v1.2.1/v1.3.0 tags pre-date the merge. SemVer-stable from this floor. - .package(url: "https://github.com/gsdali/OCCTSwift.git", from: "1.3.1"), + // Floored at v1.7.1 = OCCT 8.0.0p1. v1.7.0 realigned BRepGraph to OCCT's + // redesigned graph model (definitions vs references/usages, persistent + // UIDs, controlled layers); v1.7.1 made the derived graph reads real + // again — `adjacentFaces`/`faces(of:)`/`edges(of:)`/`sharedEdges`, + // `faceSameDomain`, `faceIsNaturalRestriction` — plus durable + // UID/RefUID/ItemUID accessors. Behaviour changes vs the old model are + // confined to the BRepGraph domain (see OCCTSwift docs/CHANGELOG v1.7.0): + // edgeMaxContinuity/setEdgeRegularity are now no-ops (use + // Shape.maxContinuity); SameParameter/SameRange/Degenerated/IsClosed + // setters no-op but getters return the live derived value. The cookbook + // ergonomics relied on since v1.3.1 (circularPatternCut #169, sweep + // orientation #170, concave/convex/edges(where:) #171) are unchanged. + .package(url: "https://github.com/gsdali/OCCTSwift.git", from: "1.7.1"), // RenderPreview rasterizes through Viewport's OffscreenRenderer. // Floored at v1.0.4: v1.0.3 fixes an uncatchable quantize() crash on // body load (Viewport #30) and v1.0.4 makes the published Viewport