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.
then added code to calculate default values based on a percentage of the root circle radius. This helps generate a valid
gear when the only parameter specified is the pitch (diametral or circular).
specified. Previous method of testing for false value did not work because circular_pitch is reassigned and becomes undef
when diametral_pitch is false.