Skip to content

Re-pin to the OCCT 8.0.0p1 cohort (OCCTSwift ≥ 1.7.1) #57

Description

@gsdali

This repo — Tier 2. Current pins: OCCTSwift from: "1.3.1", OCCTSwiftTools from: "1.1.1". Action: bump both to their p1 releases (OCCTSwift from: "1.7.1"), validate, release (DesignLoop/PartsAgent depend on you).


Why this issue

OCCTSwift has moved from the OCCT 8.0.0 GA cohort to OCCT 8.0.0p1, in two releases:

  • v1.7.0 — the OCCT 8.0.0 → 8.0.0p1 dependency upgrade (with a comprehensive BRepGraph rewrap).
  • v1.7.1 — p1 follow-up operations + a corrected (clean-headers) xcframework.

Every ecosystem package needs to validate against and re-pin to the p1 cohort (≥ 1.7.1), in dependency order (see below). This issue documents exactly what changed so you can assess impact.


What changed in OCCTSwift (GA → 8.0.0p1)

Kernel / binary

  • Bundled OCCT bumped 8.0.0 GA → 8.0.0p1 (V8_0_0_p1). Our upstream BRepFill_CompatibleWires loft-SIGSEGV fix (#176) shipped in p1, so the carried source patch was dropped.
  • The v1.7.1 xcframework has clean headers — v1.7.0 accidentally bundled 18 stale GA headers (a CMake install-prefix wasn't cleaned). They had no symbols (harmless) but were misleading; fixed in v1.7.1. Pin ≥ 1.7.1.

Removed / migrated OCCT classes (source-level, may affect you if you call the bridge directly)

  • Approx_BSplineApproxInterp removedBSplineApproxInterp is now backed by GeomAPI_PointsToBSpline. Same Swift API, but nbControlPoints is advisory and interpolatePoint(_:withKink:) is a no-op (the replacement has no per-point exact-interpolation). maxError is computed by projection.
  • GeomFill_GordonBuilder removed; GeomFill_Gordon reworked (source-compatible — Surface Gordon wrapping unchanged).
  • BRepGraph_RepId relocated to the BRepGraphInc subpackage.

⚠️ BRepGraph / TopologyGraph — comprehensively redesigned (the main behavioural change)

OCCT redesigned BRepGraph around 9 separated concerns (see OCCT discussion #1291): topology definitions vs references/usages, geometry reps, mesh reps, products/occurrences, persistent UIDs, metadata layers, modification stamps (not booleans), self-invalidating caches; coedges are first-class; natural-bound faces are normalized; regularity/ownership are layers; locations live on occurrence/child refs. Concretely, in TopologyGraph:

  • Setters for now-derived flags are no-ops (the getters return the live derived value): setEdgeSameParameter/SameRange/Degenerate/IsClosed, setWireIsClosed, setShellIsClosed, setFaceNaturalRestriction. If you relied on setting these, that no longer applies.
  • setEdgeRegularity / edgeMaxContinuity are no-ops — there is no p1 graph-level regularity layer. Use shape-level Shape.maxContinuity (BRep_Tool::MaxContinuity).
  • Per-subshape ref local-location setters are no-ops (locations now live only on occurrence/child assembly refs).
  • SameParameter/SameRange are now per-CoEdge derived properties.
  • Mesh/geometry representations are handle-based; the integer "rep id" API is preserved via an internal registry but the model is now handle-attach.
  • The integer rep ids you may have stored are session-local — for durable identity use the new UID/RefUID/ItemUID accessors (added in v1.7.1).
  • Face/edge adjacency, shared-edges, and same-domain are now derived from first-class reverse relations (results unchanged; implementation rebuilt).

p1 crash fixes (OS-signal null-derefs — you get these for free)

Extrema_ExtElCS line∥cylinder-axis; ShapeUpgrade_WireDivide / ShapeFix_ComposeShell (now set the mandatory ReShape context); Wire.rectangle rejects sub-Precision::Confusion() dimensions.

New in v1.7.1 (additive — opt-in)

  • BRepGraph durable identity: TopologyGraph uid(ofNodeKind:index:) / node(forUID:) / contains(uid:) + ref/item variants + generation.
  • Surface.networkSurface(profiles:guides:tolerance:) (GeomFill_NetworkSurface) and Surface.gordonReport(...) (Gordon status / approximate-fallback).
  • Polygon2D.copy(), PolygonOnTriangulation.copy()/setNodes()/setParameters().
  • BRepGraph vertex-supplement: faceAddVertex/edgeAddInternalVertex/faceRemoveVertex/faceNbVertexRefs (uid/shape-based; were no-op stubs in v1.7.0). Signatures finalizedfaceAddVertex/edgeAddInternalVertex now return the attachment uid; faceRemoveVertex(_:attachmentUID:).

Re-pin checklist for this repo

  1. Wait for your upstream ecosystem deps to release p1-validated versions first (dependency order below).
  2. Bump your OCCTSwift (and ecosystem) dependency minimum to from: "1.7.1".
  3. swift build + run your tests against the p1 cohort. Pay attention if you touch TopologyGraph setters / regularity / rep-ids / BSplineApproxInterp.
  4. Run tests with swift test --no-parallel — the kernel has a pre-existing non-deterministic NCollection arm64 race under parallel execution (unrelated to p1).
  5. Tag a release so your downstreams can re-pin to you.

Ecosystem dependency / release order

  • Tier 1 (depend only on OCCTSwift — release first): OCCTSwiftIO, OCCTSwiftMesh, OCCTSwiftTools, swiftGCS.
  • Tier 2 (depend on Tier 1): OCCTSwiftAIS (→ Tools), OCCTSwiftScripts (→ OCCTSwift + Tools), OCCTMCP (→ OCCTSwift + Mesh).
  • Tier 3 (depend on Tier 2): OCCTSwiftUX (→ OCCTSwift + Tools + AIS), OCCTDesignLoop (→ OCCTSwift + Tools + Scripts), OCCTReconstruct (→ OCCTSwift + swiftGCS), OCCTSwiftPartsAgent (→ OCCTSwift + Scripts).

Staying on OCCT 8.0.0 GA during the transition

Pin OCCTSwift ≤ v1.6.3 — those tags resolve the GA binary from the untouched v1.3.2 release. The v1.7.0/v1.7.1 releases also re-attach OCCT-8.0.0-GA.xcframework.zip for direct use.


Filed as part of the OCCT 8.0.0p1 ecosystem re-pin. OCCTSwift v1.7.1: https://github.com/gsdali/OCCTSwift/releases/tag/v1.7.1 · full detail in CHANGELOG.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions