Repository navigation
v0.7.0 — Radial leaders, heal_shape history, end-to-end remap test
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-inputModified()/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
pointCloudso it doesn't truncate at 256. - Dimension text overlay — 2D pass in OffscreenRenderer.
Hold-points before SPI submission
Unchanged:
- OCCT 8.0.0 GA + OCCTSwift 1.0
- OCCTSwiftScripts v0.9 tag —
Package.swiftstill usesbranch("main")for that dep