Skip to content

v1.7.5 — threadedRod from a custom profile (#225)

Choose a tag to compare

@gsdali gsdali released this 19 Jun 09:14
· 35 commits to main since this release
0671425

Additive, source-compatible. Builds a smooth worm/screw from a custom radial tooth profile directly — no boolean — closing the actionable part of #225.

Why

helicalSweep a profile then union/subtract it with a coaxial cylinder is invalid (union) or collapses to zero (subtract), and no fuzzyValue / heal pass recovers it — OCCT's BOP can't resolve the coincident/tangent helicoid faces (consistent with #213, #181). The boolean compose path was never the way; the direct build is.

New API

  • Shape.threadedRod(customProfile:nominalDiameter:pitch:cutDepth:length:axisOrigin:axisDirection:leftHanded:) — composes a custom tooth profile with the core by sewing (no boolean) → BRepCheck-valid, analytic (handful of B-spline faces → sub-MB STEP). Returns nil rather than silently producing an invalid boolean.
  • ThreadProfile.supportsSmoothRodBuild — public predicate (real crest flat, ≤ 2 flanks).
  • Shape.helicalSweep(…) doc now warns against the boolean-compose anti-pattern and points to threadedRod.

The issue's worm (root r3, crest r6) via threadedRod: valid, 9 faces, ~0.74 MB STEP (vs the ~6.8 MB faceted fallback).

Docs

New Helical Sweeps cookbook page (helicalSweep helicoids vs. threadedRod worms, and why the boolean compose fails), with rendered figures.

No xcframework change — same binary as v1.7.1. Thread Features 22→23, total 4,288 operations.

📖 Docs & cookbook: https://gsdali.github.io/OCCTSwift/