A hold for rock climbing with a bore for a bolt.
Rock diameter, shape, thickness, bore diameter and counter-sink diameter are all customizable.
If using this code off-line, there is a debugging mode which is faster and allows more experimentation before rendering.
The code works by creating n spheres randomly placed inside a cylinder with maximum dimensions. The spheres have radii which are a gaussian function of the distance from the center of the cylinder. A hull() function wraps around all the spheres to make a rock. The bottom of the rock is then sliced off, how much depending on the difficulty selected. A bore and counter-sink are made for attaching to a rock wall with a bolt, and socket wrench.
Future edits might include:
1) making an array of holds
2) being able to more finely tune the countersink depth
3) center the bore in the hold
4) Mold mode, so you can make them by filling a mold with epoxy and sand (or whatever)
For number 2 and 3, OpenSCAD's current lack of runtime variables makes this very difficult to do.