Releases: SecondMouseAU/OCCTSwiftScripts
v1.4.0 — load-brep / import --allow-invalid
load-brep and import gain --allow-invalid (JSON: allowInvalid), threaded to OCCTSwift 1.8.0's Exporter.writeBREP(allowInvalid:). Lets an in-progress reconstruction — a compound of loose analytic faces, possibly invalid — be persisted into a scene manifest and reloaded for measurement (metrics, measure-deviation, graph-validate), instead of being refused by the shape.isValid write gate. Default off preserves the gate. OCCTSwift floor → 1.8.0.
v1.3.0 — occtkit measure-deviation verb + metrics boundingBoxOptimal
Two introspection capabilities, bringing occtkit (and the OCCTMCP Node server that wraps it) to parity with OCCTMCP's Swift in-process tools.
measure-deviation <a.brep> <b.brep> [--deflection D] [--max-samples N]
Directed + symmetric surface deviation (one-sided / symmetric Hausdorff). Unlike measure-distance (minimum gap, ≈0 for overlapping bodies), it samples each shape's tessellated surface and projects onto the other's triangles — the metric for certifying a mesh→analytic reconstruction. Reports {max, rms, mean, worstPoint, samples} per direction + symmetricHausdorff. Exact point-to-triangle; fidelity scales with --deflection (default 0.5% of the a-shape bbox diagonal).
metrics --metrics …,boundingBoxOptimal
Opt-in tight extent (BRepBndLib::AddOptimal); the default Bnd_Box over-reports curved B-spline faces (control-point hull). Default-all set unchanged.
v1.2.0 — graph-select verb + convexity in graph-ml
Adds the BRepGraph selection primitives (on the 1.7.1 floor).
- graph-select verb (closes #54): local adjacency/selection queries — face-neighbors (+ convexity + shared-edge count via the kernel AAG), edge-faces, vertex-edges, face-adjacency (full gAAG), edges-class (boundary|non-manifold|seam|degenerate) — without dumping the whole graph.
- graph-ml now emits a convexity-attributed faceAdjacency block (closes #55), the gAAG edge attribute B-rep GNNs key on.
Built + smoke-tested against OCCTSwift 1.7.1; the rewrap preserved the AAG/adjacency reads. (#56)
v1.1.0 — OCCTSwift 1.7.1 / OCCT 8.0.0p1
Bumps the OCCTSwift floor 1.3.1 → 1.7.1 (= OCCT 8.0.0p1). OCCTSwift 1.7.0 realigned the BRepGraph wrapper to OCCT's redesigned graph model; 1.7.1 made the derived graph reads real again (adjacentFaces/faces(of:)/edges(of:)/sharedEdges, faceSameDomain, faceIsNaturalRestriction) + durable UID/RefUID/ItemUID identity.
The graph verbs (graph-validate/compact/dedup/ml, query-topology) build and run unchanged; smoke-tested on recipes/01. Behaviour changes are confined to the BRepGraph domain (edgeMaxContinuity/setEdgeRegularity now no-ops → Shape.maxContinuity; degenerated/closed/sameParameter/sameRange setters no-op, getters live-derived). Cohort resolves unchanged at existing floors. (#58)
v1.0.5 — iOS platform support
iOS platform support (closes #52)
Declares .iOS(.v18) in the package so the library products — DrawingComposer and ScriptHarness — link into downstream iOS apps (e.g. a SwiftUI app deploying to iPhone). Previously SPM assumed iOS 12 for these targets, so any iOS app pulling them failed resolution against OCCTSwift's iOS-15 floor. v18 matches the sibling cohort (Viewport/Tools/AIS are .iOS(.v18)).
Also in this release
ScriptContextoutput-directory selection is now platform-guarded. macOS behaviour is unchanged (iCloud Drive if present, else~/.occtswift-scripts/output); iOS writes into the app sandbox's Documents directory, sincehomeDirectoryForCurrentUserand the~/Library/Mobile DocumentsiCloud path are unavailable in the iOS sandbox.
Scope
Library products only. The executable targets (occtkit, Script, legacy Graph*) shell out via Foundation.Process and remain macOS-only — SPM never pulls them into an iOS app that links a library product.
Verified
xcodebuild -destination 'generic/platform=iOS'builds bothDrawingComposerandScriptHarness(arm64-apple-ios18.0).swift buildon macOS still links all executables.
Downstream consumers can now move their pin to from: "1.0.5".
v1.0.4 — Assembly general-arrangement drawings
General-arrangement / assembly drawings (#50)
DrawingComposer.Composer.render only took a single Shape. Two new overloads produce one GA sheet that lays out multiple parts together with per-component identity:
render(spec:components:)— lays out[DrawingComponent]in shared views (one scale + placement frame → parts sit in assembled positions), draws a numbered balloon per part, and renders a parts-list (BOM) table. SamepartNumber/namemerge into one BOM row with summed quantity; every instance is still drawn. Optional per-componenttransform(12-elt row-major 3×4) positions a part before projection.render(spec:document:)— flattens an XCAFDocumentto its positioned leaf parts and delegates; leaf names drive the parts list.
Reuses upstream OCCTSwift v0.150 BillOfMaterials + Sheet.renderBOM + DXFWriter primitives. DrawingComposerResult gains componentCount + partsList (both defaulted → source-compatible; the single-shape path and the occtkit CLI are unchanged).
Scope: per-view sections/detailViews/dimensions/manual annotations key to one drawing per named view and are not carried into the GA path; auto centrelines/centermarks are applied per component. No cross-component hidden-line removal (each part's HLR is independent).
Tests
First tests for the DrawingComposer module — new DrawingComposerTests target (3): multi-component BOM merge, empty-throws, placement transform.
🤖 Generated with Claude Code
v1.0.3 — align cohort floors to crash-fixed Viewport 1.0.4
Aligns Scripts to the crash-fixed cohort: OCCTSwiftViewport 1.0.1 → 1.0.4, OCCTSwiftTools 1.0.2 → 1.1.1, OCCTSwiftAIS 1.0.0 → 1.0.2. Render-preview now hard-requires the fixed Viewport (uncatchable quantize() crash #30 + the Viewport↔Tools cycle fix). Pure dep-floor alignment; the occtkit CLI builds and runs.
🤖 Generated with Claude Code
v1.0.2 — bump cohort floors (cosmetic)
Cosmetic floor bumps. OCCTSwift 1.0.1 → 1.0.3, Viewport 1.0.0 → 1.0.1, Tools 1.0.0 → 1.0.2. All three resolved forward to these versions under SemVer's from: semantics already; this matches declared intent to actual cohort. No public API changes. Pin: from: "1.0.2".
v1.0.1 — bump OCCTSwiftViewport floor to 1.0.0
Highlights
Viewport floor bump completing the v1.0 cohort alignment.
Changes
- Bump OCCTSwiftViewport floor to
from: "1.0.0"(closes #45). Viewport graduated to v1.0.0 on 2026-05-08, one day after the rest of the cohort, and v1.0.1 followed the next day. The bump was blocked on OCCTSwiftTools v1.0.2, which widened its own Viewport constraint; that release unblocked this one. - Documentation refresh: README
Requirementsand CLAUDE.mdDependenciesentries updated for the v1.0 cohort. Adds the previously-missing OCCTSwiftAIS and OCCTSwiftIO requirements to the README, and trims pre-1.0 dep narrative from CLAUDE.md (still consultable ingit logif you need to support an older floor).
Resolved cohort
| Package | Floor | Resolves to |
|---|---|---|
| OCCTSwift | 1.0.1 | 1.0.3 |
| OCCTSwiftViewport | 1.0.0 | 1.0.1 |
| OCCTSwiftTools | 1.0.0 | 1.0.2 |
| OCCTSwiftAIS | 1.0.0 | 1.0.0 |
| OCCTSwiftMesh | 1.0.0 | 1.0.0 |
| OCCTSwiftIO | 1.0.0 | 1.0.0 |
Verbs
No new or removed verbs in this release — same 26-verb surface as v1.0.0.
v1.0.0 — graduate alongside OCCTSwift 1.0.x cohort (OCCT 8.0.0 GA)
Dep bump + GA migration fixes to graduate alongside the OCCTSwift v1.0.0 / OCCT 8.0.0 GA cohort: OCCTSwift → 1.0.1, OCCTSwiftTools / AIS / Mesh / IO → 1.0.0, OCCTSwiftViewport floor → 0.55.1. GA migration: drop parentOccurrenceIndex from BREP graph JSON/SQLite exporters (assembly is now Product → Occurrence → Product), extend NodeKind switches with .product / .occurrence cases, add import OCCTSwiftIO for the TopologyGraph.exportForML extension. SemVer-stable from this tag. Pin: from: "1.0.0". Closes #36.