https://github.com/mmalecki/catchnhole
An ergonomic way to create nutcatches, screw holes and countersinks in OpenSCAD.
https://github.com/mmalecki/catchnhole
mechanical-engineering openscad
Last synced: 4 months ago
JSON representation
An ergonomic way to create nutcatches, screw holes and countersinks in OpenSCAD.
- Host: GitHub
- URL: https://github.com/mmalecki/catchnhole
- Owner: mmalecki
- License: mit
- Created: 2022-04-28T13:56:02.000Z (about 4 years ago)
- Default Branch: latest
- Last Pushed: 2023-06-07T13:24:11.000Z (almost 3 years ago)
- Last Synced: 2025-06-04T09:07:45.740Z (12 months ago)
- Topics: mechanical-engineering, openscad
- Language: OpenSCAD
- Homepage:
- Size: 195 KB
- Stars: 43
- Watchers: 5
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# catchnhole
Because `nutsnbolts` was taken.
An ergonomic way to create nutcatches, screw holes and countersinks in OpenSCAD.
.
## Requirements and installation
**`catchnhole` uses OpenSCAD's JSON `import`, which is only present in the [nightly
build](https://github.com/openscad/openscad#building-openscad), and must be
enabled** (`Edit` -> `Preferences` -> `Features` -> `import-function`).
Add a git submodule to your project:
```sh
git submodule add https://github.com/mmalecki/catchnhole catchnhole
```
## Usage
```openscad
use ;
difference () {
translate([-5, -5, 0]) cube([10, 10, 10]);
// Draw a nutcatch parallel to bolt shaft:
nutcatch_parallel("M3");
// Draw a bolt gripping the nutcatch:
bolt("M3", length = 10);
// Or, draw a nutcatch sidecut into the part:
translate([0, 0, 4]) {
nutcatch_sidecut("M3");
// Draw a bolt gripping the nutcatch:
bolt("M3", length = 6);
}
}
```
For more advanced usage, see the [`examples` directory](./examples).
### API
#### `bolt(name, length, kind = "headless", head_diameter_clearance = 0.1, countersink = 0)`
Draw a bolt up the Z axis, with head at the top.
Arguments:
* `name` (string) - name of the bolt, e.g. `"M3"`
* `length` (number) - length of the bolt
* `kind` (string) - the kind of the bolt, available values:
* `"headless"` - no bolt head
* `"socket_head"` - socket head cap (ISO 4762)
* `"countersunk"` - countersunk head (ISO 10642, DIN 7991)
* `"hex_head"` - hex head (ISO 4014)
* `head_diameter_clearance` - how much side clearance to leave for the bolt head, where applicable
* `head_top_clearance` - how much top clearance to leave for the bolt head, where applicable
* `length_clearance` - how much clearance to leave for the bolt past `length` (down the Z axis; useful if your origin point is a nut and your `length` is calculated, or just want to allow for longer bolts)
* `countersink` (number) - how much to "countersink" the bolt - move it down by the `countersink` * bolt head length
#### `bolt_head(name, kind, head_diameter_clearance = 0.1)`
Draw a bolt head up the Z axis.
Arguments:
* `name` (string) - name of the bolt, e.g. `"M3"`
* `kind` (string) - the kind of the bolt, available values:
* `"socket_head"` - socket head cap (ISO 4762)
* `"countersunk"` - countersunk head (ISO 10642)
* `"hex_head"` - hex head (ISO 4014)
* `head_diameter_clearance` - how much side clearance to leave for the bolt head, where applicable
* `head_top_clearance` - how much top clearance to leave for the bolt head, where applicable
#### `nutcatch_parallel(name, height_clearance = 0, width_clearance = 0)`
Draw a nutcatch parallel to the bolt axis.
Arguments:
* `name` (string) - name of the nut, e.g. `"M3"`
* `kind` (string) - the kind of the nut, available values:
* `"hexagon"` - hexagon (ISO 4032)
* `"hexagon_thin"` - thin hexagon (ISO 4035)
* `"hexagon_lock"` - hexagon locknut (ISO 7040)
* `height_clearance` (number) - additional nut height clearance
* `width_clearance` (number) - additional nut width clearance
#### `nutcatch_sidecut(name, height_clearance = 0, width_clearance = 0)`
Draw a nutcatch sidecut into the part:
Arguments:
* `name` (string) - name of the nut, e.g. `"M3"`
* `kind` (string) - the kind of the nut, as noted in `nutcatch_parallel`
* `height_clearance` (number) - additional nut height clearance
* `width_clearance` (number) - additional nut width clearance
## Acknowledgements
* The [authors](https://github.com/boltsparts/boltsparts/graphs/contributors) of the [BOLTS](https://github.com/boltsparts/boltsparts) library