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: "0.4.1")
Then, import Helical where it's needed:
import HelicalHelical 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 M8x30 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:
let thread = ScrewThread( handedness: .left, starts: 2, pitch: 1.5, majorDiameter: 6.2, minorDiameter: 5.3, form: .trapezoidal(angle: 90°, crestWidth: 0.25) ) let customBolt = Bolt( thread: thread, length: 15, unthreadedLength: 3, unthreadedDiameter: 5, headShape: .countersunk(angle: 80°, topDiameter: 10, boltDiameter: 5), socket: .slotted(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(recessedHead: true) }
As is making a threaded hole for a particular thread:
Box(13) .aligned(at: .centerXY) .subtracting { ThreadedHole(thread: thread, depth: 13) }
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.