Skip to content

v0.7.0 — Radial leaders, heal_shape history, end-to-end remap test

Choose a tag to compare

@gsdali gsdali released this 03 May 11:25
· 289 commits to main since this release
d7ec3d0

What's new

Three quality improvements on top of v0.6's history foundation. Same 45 tools — pure quality / coverage release.

Radial dimensions now render properly

Was: a marker sphere at the geometric centre.
Now: a centre→rim leader cylinder + arrow cap + centre marker, with the radius computed exactly from geometry rather than arcLength / 2π.

select_topology captures circleCenter for circular edges via Edge.centerOfCurvature(at: midpoint); add_dimension(radial) uses it; AnnotationsRenderer.dimension(radial) draws the leader.

heal_shape opts into history-based remap

HistoryRegistry.recordIdentityHistoryIfTopologyPreserved only records when pre/post face/edge/vertex counts match. The typical heal (tighten tolerances, merge duplicate vertices) preserves topology, so selectionIds survive. When heal rewires geometry the helper returns false and a warning surfaces in the response — remap_selection falls back to the centroid heuristic naturally.

End-to-end stdio test for the history remap path

New historyRemapPreservesAcrossTransform synthesises a real cylinder BREP at runtime via Shape.cylinder, drives select_topology → transform_body → remap_selection through the spawned binary, and asserts fate: preserved + confidenceMm: 0. Validates v0.6's history wiring + v0.7's select_topology upgrade end-to-end.

Counts

  • 45 tools (unchanged from v0.4)
  • 20 swift-testing cases across 4 suites (was 19)

Deferred to v0.8

  • History opt-in for boolean_op / apply_feature / mirror_or_pattern — needs OCCTSwift to expose per-input Modified() / Generated() mappings. Today's surface is too shallow (BooleanResult.modifiedFaces, BooleanHistoryResult.has* flags) for per-subshape remap. Tracking upstream.
  • Upstream points pipeline — instanced rendering for pointCloud so it doesn't truncate at 256.
  • Dimension text overlay — 2D pass in OffscreenRenderer.

Hold-points before SPI submission

Unchanged:

  1. OCCT 8.0.0 GA + OCCTSwift 1.0
  2. OCCTSwiftScripts v0.9 tag — Package.swift still uses branch("main") for that dep