Helical is a library for Cadova that simplifies the creation of threaded components and related parts. It supports widely-used metric threads, bolts, and nuts, as well as the ability to customize these components to fit specific requirements.

Bolts demo · Nuts and washers demo
Integrate Helical into your project with the Swift Package Manager by adding it as a dependency in your Package.swift file:
.package(url:"https://github.com/tomasf/Helical.git", from:"1.0.0")Then, import Helical where it's needed:
import Helical
Helical simplifies the process of creating threaded shapes, making it easier to incorporate threaded holes into your models. It also provides a selection of standard bolts, nuts, and corresponding holes. Creating a typical M8x20 hex head bolt is simple:
Bolt.hexHead(.m8, length:20, unthreadedLength:5)This generates a standard DIN 931 bolt, as expected.

Beyond the standard offerings, Helical allows for modifications to fit unique requirements:
Bolt.hexHead(.isoMetric(.m8, pitch:0.75),
headWidth:15,
headHeight:6.5,
length:20)Or fully customize parts to your specific needs:

letthread=ScrewThread(
handedness:.left,
starts:2,
pitch:1.5,
majorDiameter:6.2,
minorDiameter:5.3,
form:.trapezoidal(angle:90°, crestWidth:0.25))letcustomBolt=Bolt(
thread: thread,
length:15,
unthreadedLength:3,
unthreadedDiameter:5,
headShape:.countersunk(angle:80°, topDiameter:10, boltDiameter:5),
socket:.slot(length:10, width:1, depth:1.4))
Creating a matching countersunk clearance hole for a bolt is straightforward:
Box(13).aligned(at:.centerXY).subtracting{
customBolt.clearanceHole(entry:.recessedHead)}As is making a threaded hole for a particular thread:

Box(13).aligned(at:.centerXY).subtracting{ThreadedHole(thread: thread, depth:13, leadIns:.both)}LeadIn and LeadInEnds provide a unified way to add thread-entry chamfers to screws, threaded holes, and nuts. Size can be specified relative to thread depth, pitch, or cone angle, or as explicit dimensions:
Screw(thread:.isoMetric(.m6), length:20, leadIns:.both(.standard))Nut(thread:.isoMetric(.m6), shape: body, leadIns:.both(.angle(120°)))
Helical uses Cadova's tolerance environment setting to increase the diameter of holes and decrease the diameter of bolts. Clearance holes can create overhang-safe shapes. Specify a circular overhang method (circularOverhangMethod) to enable this.
.withCircularOverhangMethod(.bridge).withTolerance(0.5)We welcome contributions. Feel free to open issues for feedback or suggestions and submit pull requests for improvements to the codebase.