Skip to content

Releases: SecondMouseAU/OCCTSwiftAIS

v1.0.3 — re-pin OCCT 8.0.0p1 cohort

18 Jun 21:32

Choose a tag to compare

Bumps OCCTSwiftTools floor to 1.1.2, transitively pinning OCCTSwift 1.7.1, OCCTSwiftIO 1.0.1, OCCTSwiftViewport 1.1.20. No API changes; 158 tests pass.

v1.0.2 — raise Tools floor to 1.1.1

26 May 06:28
dcb814b

Choose a tag to compare

Raises the OCCTSwiftTools floor 1.0.21.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

09 May 09:18
550f789

Choose a tag to compare

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)

08 May 12:19
1c18da5

Choose a tag to compare

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

06 May 21:52
b84a6b8

Choose a tag to compare

Housekeeping floor bump + comment fix. No behaviour change.

  • Package.swift: OCCTSwiftTools floor raised from 0.5.0 to 0.6.0. Tools v0.6.0 splits file-I/O concerns into the new OCCTSwiftIO sibling and @_exported imports it, so AIS's existing OCCTSwiftTools.X references still resolve unchanged. Closes #17.
  • Dimension.swift:233: stray comment naming OCCTSwiftTools.ShapeMeasurements.faceCentroids updated to point at the kernel-hoisted ShapeMeasurements.faceCentroids in OCCTSwift (OCCTSwift v0.170.1 / Tools v0.5.1). Comment-only — the bbox-centroid heuristic in resolveFace is unchanged. Closes #16.
  • Install snippets in README.md and docs/getting-started.md refreshed to from: "0.7.2".

Tests: 158 across 14 suites, all green. No new tests.

v0.7.1 — Cutter-simulation invariant tests

03 May 10:02
6354a97

Choose a tag to compare

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 has isCircle == false (pure rectangular block).
  • t_wipFile_hasCircularEdgesFromCutterPath — every WIP file has at least one circular edge from the cutter's footprint.
  • t_wipFile_radialDimensionOnCutterFootprint_resolvesRadialDimension on the first circular edge of each WIP resolves to a finite positive radius, the label has the R prefix, and viewport.measurements carries the .radius variant.

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

03 May 09:32
c0eb09a

Choose a tag to compare

Real-shape STEP integration tests. The end-to-end pipeline (CADFileLoader.loadInteractiveContext.display → synthetic PickResultSelection) now runs against actual machined-part geometry, not just OCCT primitives.

New

  • Tests/OCCTSwiftAISTests/Fixtures/ — three small (~16 KB) committed stock STEP files. Wired through Package.swift via resources: [.copy("Fixtures")] and accessed via Bundle.module.url(forResource:withExtension:subdirectory:).
  • STEPIntegrationTests.swift adds 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, remap preserving identical topology.
    • WIP suite (.serialized, skip-on-missing): same shape on multi-MB machined-part WIP files in test_files/ (gitignored). Silently passes when the files are absent — CI without them stays green; devs with them get extended coverage.
  • .gitignore excludes test_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

03 May 08:01
ad8e1f5

Choose a tag to compare

Documentation polish. No code or test changes — drop-in upgrade.

  • README.md rewritten 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 + InteractiveContext setup, display, selection modes + derived Selection accessors, presentation styles, translate + rotate manipulators, .attachManipulator(_:) SwiftUI integration, dimensions (linear / angular / radial), standard scene objects, remap across Shape mutation, and a recipe for synthesising a PickResult in 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)

03 May 07:51
062f6a7

Choose a tag to compare

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

03 May 06:56
b65be18

Choose a tag to compare

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 with depthCompareFunction = .lessEqual — no more silhouette flicker, no more body-count blow-up on multi-face selection.
  • ctx.bodies count 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.
  • setHighlightStyle rewrites triangleStyles in place.
  • display() no longer needs the "keep overlays trailing" pass.

Removed

  • InteractiveContext.makeFaceOverlay(...) and computeOverlayEpsilon(...) 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
  • clearSelection empties triangleStyles
  • setHighlightStyle updates 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.