Releases: SecondMouseAU/OCCTSwiftAIS
v1.0.3 — re-pin OCCT 8.0.0p1 cohort
v1.0.2 — raise Tools floor to 1.1.1
Raises the OCCTSwiftTools floor 1.0.2 → 1.1.1, so AIS transitively hard-requires the fixed Viewport (v1.0.4: uncatchable quantize() crash fix #30 + the Viewport↔Tools cycle fix). Pure dep-floor bump; no API change. 158 tests pass.
🤖 Generated with Claude Code
v1.0.1 — bump OCCTSwiftTools to 1.0.2
Cosmetic floor bump for cohort consistency. Tools 1.0.0 already resolved forward to 1.0.2 under SemVer; this matches the declared floor to actual intent. Transitively pulls Viewport 1.0.1 and OCCTSwift 1.0.3. No public API changes. Pin: from: "1.0.1".
v1.0.0 — graduate alongside OCCTSwift 1.0.x cohort (OCCT 8.0.0 GA)
Dep bump to graduate alongside OCCTSwiftTools v1.0.0 (transitively pulls OCCTSwift v1.0.1). Required collateral so OCCTSwiftCADKit / OCCTSwiftScripts can resolve Tools 1.0.0. SemVer-stable from this tag. Pin: from: "1.0.0".
v0.7.2: OCCTSwiftTools floor → 0.6.0, ShapeMeasurements comment fix
Housekeeping floor bump + comment fix. No behaviour change.
Package.swift:OCCTSwiftToolsfloor raised from0.5.0to0.6.0. Tools v0.6.0 splits file-I/O concerns into the new OCCTSwiftIO sibling and@_exported imports it, so AIS's existingOCCTSwiftTools.Xreferences still resolve unchanged. Closes #17.Dimension.swift:233: stray comment namingOCCTSwiftTools.ShapeMeasurements.faceCentroidsupdated to point at the kernel-hoistedShapeMeasurements.faceCentroidsin OCCTSwift (OCCTSwiftv0.170.1 / Tools v0.5.1). Comment-only — the bbox-centroid heuristic inresolveFaceis unchanged. Closes #16.- Install snippets in
README.mdanddocs/getting-started.mdrefreshed tofrom: "0.7.2".
Tests: 158 across 14 suites, all green. No new tests.
v0.7.1 — Cutter-simulation invariant tests
Three new STEP integration tests exploit the provenance of the fixtures (CAM outputs from a 6 mm milling cutter):
t_stockHasNoCircularEdges— every stock-file edge hasisCircle == false(pure rectangular block).t_wipFile_hasCircularEdgesFromCutterPath— every WIP file has at least one circular edge from the cutter's footprint.t_wipFile_radialDimensionOnCutterFootprint_resolves—RadialDimensionon the first circular edge of each WIP resolves to a finite positive radius, the label has theRprefix, andviewport.measurementscarries the.radiusvariant.
Stock cases run always; WIP cases stay skip-on-missing.
Tests
158 across 14 suites, all green. Stock suite is sub-second; WIP suite ~40 s on the three multi-MB files when present locally. Run with OCCT_SERIAL=1 swift test --parallel --num-workers 1.
Dependencies
Unchanged from v0.7.0.
v0.7.0 — Real-shape STEP integration tests
Real-shape STEP integration tests. The end-to-end pipeline (CADFileLoader.load → InteractiveContext.display → synthetic PickResult → Selection) now runs against actual machined-part geometry, not just OCCT primitives.
New
Tests/OCCTSwiftAISTests/Fixtures/— three small (~16 KB) committed stock STEP files. Wired throughPackage.swiftviaresources: [.copy("Fixtures")]and accessed viaBundle.module.url(forResource:withExtension:subdirectory:).STEPIntegrationTests.swiftadds two suites:- Stock suite (
.serialized,@MainActor): 7 parametrised tests × 3 fixtures = 21 cases covering load, six-face / twelve-edge / eight-vertex topology, non-degenerate bounds, mesh tessellation, edge / vertex pick buffer population, face + vertex pick round-trips, linear dimension across opposite parallel faces matching a bbox extent,remappreserving identical topology. - WIP suite (
.serialized, skip-on-missing): same shape on multi-MB machined-part WIP files intest_files/(gitignored). Silently passes when the files are absent — CI without them stays green; devs with them get extended coverage.
- Stock suite (
.gitignoreexcludestest_files/so the committed fixtures stay small (~48 KB total).
Notes
.serialized is required on both suites — the OCCT NCollection arm64 race triggers SIGSEGV under Swift Testing's intra-process parallelism even with --num-workers 1 (which controls processes, not in-process tasks). Existing AIS test suites that don't touch real STEP geometry don't need it; only suites that go through CADFileLoader do.
Tests
155 across 14 suites, all green. Stock suite is sub-second; WIP suite ~15 s on three multi-MB files (when present locally).
Dependencies
Unchanged from v0.6.3.
v0.6.3 — Documentation polish
Documentation polish. No code or test changes — drop-in upgrade.
README.mdrewritten as a compact landing — features at a glance, install snippet, 30-second example, link to the new walkthrough.- New
docs/getting-started.md— walkthrough exercising the full public API in narrative order:ViewportController+InteractiveContextsetup,display, selection modes + derivedSelectionaccessors, presentation styles, translate + rotate manipulators,.attachManipulator(_:)SwiftUI integration, dimensions (linear / angular / radial), standard scene objects,remapacrossShapemutation, and a recipe for synthesising aPickResultin tests.
Every snippet references public symbols that exist on the v0.6.2 source tree.
Tests
Unchanged — 146 across 12 suites. Run with OCCT_SERIAL=1 swift test --parallel --num-workers 1.
Dependencies
Unchanged from v0.6.2.
v0.6.2 — Drop edge/vertex workaround (Tools 0.5.0)
Drops the populateEdgeVertexPickArrays workaround — OCCTSwiftTools v0.5.0 now populates body.vertices / vertexIndices / edgeIndices on the source-shape convention, so AIS no longer has to override Tools' output. Closes OCCTSwiftTools#10.
InteractiveContext.display(_:) is back to a thin wrapper around CADFileLoader.shapeToBodyAndMetadata. ~30 lines removed; the round-trip from a vertex pick's primitiveIndex to Selection.vertices (via shape.vertex(at: idx)) keeps working because the data is now identical between Tools' output and what AIS used to write.
Dependencies
Floor raised to OCCTSwiftTools ≥ 0.5.0 (transitively OCCTSwiftViewport ≥ 0.55.1, OCCTSwift ≥ 0.168.0).
Tests
146 across 12 suites, all green. No new tests; the existing EdgeVertexSelection round-trips now exercise Tools' implementation rather than AIS's override. Run with OCCT_SERIAL=1 swift test --parallel --num-workers 1.
v0.6.1 — Renderer-backed per-triangle highlight overlay
Adopts the renderer-backed per-triangle highlight overlay shipped in OCCTSwiftViewport v0.55.1 — closes #25. The v0.1 cheap-route normal-offset overlay is gone; InteractiveContext.updateSelectionVisuals now writes per-triangle TriangleStyle entries directly into the source body's triangleStyles array.
Behaviour changes (no public API change)
- Face-level selection no longer spawns
ais.overlay.sel.<UUID>overlay bodies. The renderer composites the highlight in a dedicated pass withdepthCompareFunction = .lessEqual— no more silhouette flicker, no more body-count blow-up on multi-face selection. ctx.bodiescount after a face selection is now N (just source bodies), not 2N (source + overlay) as in v0.1 → v0.6. Consumers asserting body counts will see this drop.setHighlightStylerewritestriangleStylesin place.display()no longer needs the "keep overlays trailing" pass.
Removed
InteractiveContext.makeFaceOverlay(...)andcomputeOverlayEpsilon(...)static helpers.overlayBodyIDs: Set<String>private state.
Tools v0.4.1 coordination
OCCTSwiftTools v0.4.1 (between v0.6.0 and this release) populates body.vertices from polyline endpoints and leaves vertexIndices empty. AIS overrides both with shape.vertices() source-vertex positions so a vertex pick's primitiveIndex round-trips to a TopoDS_Vertex via Selection.vertices (shape.vertex(at: idx)). Tracked as OCCTSwiftTools#10 — once the conventions converge the AIS-side override drops.
Tests
HighlightOverlay suite renamed to FaceHighlight and rewritten in place. All assertions now check body.triangleStyles rather than overlay-body presence:
- highlighted triangles match the selected face
- no
ais.overlay.*bodies spawn - multi-face / multi-body selections write styles on the right source bodies
clearSelectionemptiestriangleStylessetHighlightStyleupdates colors live
Total: 146 across 12 suites (count unchanged; tests rewritten not added). Run with OCCT_SERIAL=1 swift test --parallel --num-workers 1.
Dependencies
Transitively pulls OCCTSwiftViewport ≥ 0.55.1 via OCCTSwiftTools ≥ 0.4.0; SPM resolves to the latest available.