This PR adds a rack() module to the involute_gears() module. It is basically a
section of the rim of a gear of infinite teeth.
It has a subset or the gear() arguments:
- number_of_teeth: will affect the length of the rack.
circular_pitch or diametral_pitch: must match that of the gear.
- pressure_angle: must match that of the gear.
- rim_thickness: there is no disk or hub so this is the only thickness.
- rim_width: width of the flat ribbon behind the teeth.
- clearance
- flat
The other ones do not make much sense for a rack.
A rack and a gear will match if they have the same pitch and pressure angle. The
origin point or a rack is set to the middle point of the "pitch line", so to
align it with a gear, just move it to the pitch circle of the gear.
I've added a small rack to the test_gears() module, but feel free to change of
remove it if it is not appropriate.