mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2025-01-04 03:09:45 +00:00
Merge pull request #1208 from BelfrySCAD/revarbat_dev
Added rounding= to rack2d()
This commit is contained in:
commit
88c912c9bb
1 changed files with 272 additions and 105 deletions
377
gears.scad
377
gears.scad
|
@ -37,11 +37,13 @@ function _inherit_gear_param(name, val, pval, dflt, invert=false) =
|
||||||
: (invert?-1:1)*val;
|
: (invert?-1:1)*val;
|
||||||
|
|
||||||
|
|
||||||
function _inherit_gear_pitch(pitch,circ_pitch,diam_pitch,mod) =
|
function _inherit_gear_pitch(fname,pitch,circ_pitch,diam_pitch,mod,warn=true) =
|
||||||
pitch != undef?
|
pitch != undef?
|
||||||
echo("WARNING: The use of the argument pitch= in gear code is deprecated. Please use circ_pitch= instead.")
|
|
||||||
assert(is_finite(pitch) && pitch>0)
|
assert(is_finite(pitch) && pitch>0)
|
||||||
pitch :
|
warn? echo(str(
|
||||||
|
"WARNING: The use of the argument pitch= in ", fname,
|
||||||
|
" is deprecated. Please use circ_pitch= instead."
|
||||||
|
)) pitch : pitch :
|
||||||
circ_pitch != undef?
|
circ_pitch != undef?
|
||||||
assert(is_finite(circ_pitch) && circ_pitch>0)
|
assert(is_finite(circ_pitch) && circ_pitch>0)
|
||||||
circ_pitch :
|
circ_pitch :
|
||||||
|
@ -260,7 +262,7 @@ function _inherit_gear_thickness(thickness) =
|
||||||
|
|
||||||
function spur_gear(
|
function spur_gear(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth=11,
|
teeth,
|
||||||
thickness,
|
thickness,
|
||||||
shaft_diam = 0,
|
shaft_diam = 0,
|
||||||
hide = 0,
|
hide = 0,
|
||||||
|
@ -284,11 +286,25 @@ function spur_gear(
|
||||||
let(
|
let(
|
||||||
dummy = !is_undef(interior) ? echo("In spur_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
dummy = !is_undef(interior) ? echo("In spur_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
||||||
internal = first_defined([internal,interior,false]),
|
internal = first_defined([internal,interior,false]),
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
circ_pitch = _inherit_gear_pitch("spur_gear()", pitch, circ_pitch, diam_pitch, mod),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
helical = _inherit_gear_helical(helical, invert=!internal),
|
helical = _inherit_gear_helical(helical, invert=!internal),
|
||||||
thickness = _inherit_gear_thickness(thickness),
|
thickness = _inherit_gear_thickness(thickness),
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA)),
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA))
|
||||||
|
)
|
||||||
|
assert(is_integer(teeth) && teeth>3)
|
||||||
|
assert(is_finite(thickness) && thickness>0)
|
||||||
|
assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(is_integer(hide) && hide>=0 && hide<teeth)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_bool(herringbone))
|
||||||
|
assert(slices==undef || (is_integer(slices) && slices>0))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_spin))
|
||||||
|
let(
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical),
|
pr = pitch_radius(circ_pitch, teeth, helical),
|
||||||
circum = 2 * PI * pr,
|
circum = 2 * PI * pr,
|
||||||
twist = 360*thickness*tan(helical)/circum,
|
twist = 360*thickness*tan(helical)/circum,
|
||||||
|
@ -303,7 +319,7 @@ function spur_gear(
|
||||||
backlash = backlash,
|
backlash = backlash,
|
||||||
internal = internal,
|
internal = internal,
|
||||||
profile_shift = profile_shift,
|
profile_shift = profile_shift,
|
||||||
hub_diam = shaft_diam
|
shaft_diam = shaft_diam
|
||||||
),
|
),
|
||||||
rvnf = herringbone
|
rvnf = herringbone
|
||||||
? zrot(twist/2, p=linear_sweep(rgn, height=thickness, twist=twist, slices=slices, center=true))
|
? zrot(twist/2, p=linear_sweep(rgn, height=thickness, twist=twist, slices=slices, center=true))
|
||||||
|
@ -321,7 +337,7 @@ function spur_gear(
|
||||||
|
|
||||||
module spur_gear(
|
module spur_gear(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth=11,
|
teeth,
|
||||||
thickness,
|
thickness,
|
||||||
shaft_diam = 0,
|
shaft_diam = 0,
|
||||||
hide = 0,
|
hide = 0,
|
||||||
|
@ -344,11 +360,24 @@ module spur_gear(
|
||||||
) {
|
) {
|
||||||
dummy = !is_undef(interior) ? echo("In spur_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
dummy = !is_undef(interior) ? echo("In spur_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
||||||
internal = first_defined([internal,interior,false]);
|
internal = first_defined([internal,interior,false]);
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("spur_gear()", pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical, invert=!internal);
|
helical = _inherit_gear_helical(helical, invert=!internal);
|
||||||
thickness = _inherit_gear_thickness(thickness);
|
thickness = _inherit_gear_thickness(thickness);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>3)
|
||||||
|
assert(is_finite(thickness) && thickness>0)
|
||||||
|
assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(is_integer(hide) && hide>=0 && hide<teeth)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_bool(herringbone))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(slices==undef || (is_integer(slices) && slices>0))
|
||||||
|
assert(is_finite(gear_spin));
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical);
|
pr = pitch_radius(circ_pitch, teeth, helical);
|
||||||
circum = 2 * PI * pr;
|
circum = 2 * PI * pr;
|
||||||
twist = 360*thickness*tan(helical)/circum;
|
twist = 360*thickness*tan(helical)/circum;
|
||||||
|
@ -373,7 +402,7 @@ module spur_gear(
|
||||||
backlash = backlash,
|
backlash = backlash,
|
||||||
internal = internal,
|
internal = internal,
|
||||||
profile_shift = profile_shift,
|
profile_shift = profile_shift,
|
||||||
hub_diam = shaft_diam
|
shaft_diam = shaft_diam
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -393,7 +422,7 @@ module spur_gear(
|
||||||
backlash = backlash,
|
backlash = backlash,
|
||||||
internal = internal,
|
internal = internal,
|
||||||
profile_shift = profile_shift,
|
profile_shift = profile_shift,
|
||||||
hub_diam = shaft_diam
|
shaft_diam = shaft_diam
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,17 +469,17 @@ module spur_gear(
|
||||||
// helical = The angle of the rack teeth away from perpendicular to the gear axis of rotation. Stretches out the tooth shapes. Used to match helical spur gear pinions. Default: 0
|
// helical = The angle of the rack teeth away from perpendicular to the gear axis of rotation. Stretches out the tooth shapes. Used to match helical spur gear pinions. Default: 0
|
||||||
// internal = If true, create a mask for difference()ing from something else.
|
// internal = If true, create a mask for difference()ing from something else.
|
||||||
// profile_shift = Profile shift factor x.
|
// profile_shift = Profile shift factor x.
|
||||||
// hub_diam = If given, the diameter of the central hub hole.
|
// shaft_diam = If given, the diameter of the central shaft hole.
|
||||||
// diam_pitch = The diametral pitch, or number of teeth per inch of pitch diameter. Note that the diametral pitch is a completely different thing than the pitch diameter.
|
// diam_pitch = The diametral pitch, or number of teeth per inch of pitch diameter. Note that the diametral pitch is a completely different thing than the pitch diameter.
|
||||||
// mod = The metric module/modulus of the gear, or mm of pitch diameter per tooth.
|
// mod = The metric module/modulus of the gear, or mm of pitch diameter per tooth.
|
||||||
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
|
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
|
||||||
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
|
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
|
||||||
// Example(2D): Typical Gear Shape
|
// Example(2D): Typical Gear Shape
|
||||||
// spur_gear2d(circ_pitch=5, teeth=20, hub_diam=5);
|
// spur_gear2d(circ_pitch=5, teeth=20, shaft_diam=5);
|
||||||
// Example(2D): By Metric Module
|
// Example(2D): By Metric Module
|
||||||
// spur_gear2d(mod=2, teeth=20, hub_diam=5);
|
// spur_gear2d(mod=2, teeth=20, shaft_diam=5);
|
||||||
// Example(2D): By Imperial Gear Pitch
|
// Example(2D): By Imperial Gear Pitch
|
||||||
// spur_gear2d(diam_pitch=10, teeth=20, hub_diam=5);
|
// spur_gear2d(diam_pitch=10, teeth=20, shaft_diam=5);
|
||||||
// Example(2D): Lower Pressure Angle
|
// Example(2D): Lower Pressure Angle
|
||||||
// spur_gear2d(circ_pitch=5, teeth=20, pressure_angle=14);
|
// spur_gear2d(circ_pitch=5, teeth=20, pressure_angle=14);
|
||||||
// Example(2D): Partial Gear
|
// Example(2D): Partial Gear
|
||||||
|
@ -462,7 +491,7 @@ module spur_gear(
|
||||||
// pr = pitch_radius(circ_pitch,teeth);
|
// pr = pitch_radius(circ_pitch,teeth);
|
||||||
// mr = mesh_radius(circ_pitch,teeth,profile_shift=profile_shift);
|
// mr = mesh_radius(circ_pitch,teeth,profile_shift=profile_shift);
|
||||||
// back(mr) {
|
// back(mr) {
|
||||||
// spur_gear2d(circ_pitch, teeth, hub_diam=shaft, profile_shift=profile_shift);
|
// spur_gear2d(circ_pitch, teeth, shaft_diam=shaft, profile_shift=profile_shift);
|
||||||
// up(0.1) color("black")
|
// up(0.1) color("black")
|
||||||
// dashed_stroke(circle(r=pr), width=strokewidth, closed=true);
|
// dashed_stroke(circle(r=pr), width=strokewidth, closed=true);
|
||||||
// }
|
// }
|
||||||
|
@ -500,12 +529,12 @@ module spur_gear(
|
||||||
// teeth=cteeth,
|
// teeth=cteeth,
|
||||||
// pressure_angle=pa);
|
// pressure_angle=pa);
|
||||||
// Example(2D): Called as a Function
|
// Example(2D): Called as a Function
|
||||||
// rgn = spur_gear2d(circ_pitch=8, teeth=16, hub_diam=5);
|
// rgn = spur_gear2d(circ_pitch=8, teeth=16, shaft_diam=5);
|
||||||
// region(rgn);
|
// region(rgn);
|
||||||
|
|
||||||
function spur_gear2d(
|
function spur_gear2d(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 11,
|
teeth,
|
||||||
hide = 0,
|
hide = 0,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
clearance,
|
clearance,
|
||||||
|
@ -514,7 +543,7 @@ function spur_gear2d(
|
||||||
interior,
|
interior,
|
||||||
profile_shift,
|
profile_shift,
|
||||||
helical,
|
helical,
|
||||||
hub_diam,
|
shaft_diam = 0,
|
||||||
pitch,
|
pitch,
|
||||||
diam_pitch,
|
diam_pitch,
|
||||||
mod,
|
mod,
|
||||||
|
@ -522,39 +551,50 @@ function spur_gear2d(
|
||||||
anchor = CENTER,
|
anchor = CENTER,
|
||||||
spin = 0
|
spin = 0
|
||||||
) = let(
|
) = let(
|
||||||
dummy = !is_undef(interior) ? echo("In spur_gear2d(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
dummy = !is_undef(interior) ? echo("In spur_gear2d(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
||||||
internal = first_defined([internal,interior,false]),
|
internal = first_defined([internal,interior,false]),
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
circ_pitch = _inherit_gear_pitch("spur_gear2d()", pitch, circ_pitch, diam_pitch, mod),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
helical = _inherit_gear_helical(helical, invert=!internal),
|
helical = _inherit_gear_helical(helical, invert=!internal),
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA)),
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA))
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical=helical),
|
)
|
||||||
tooth = _gear_tooth_profile(
|
assert(is_integer(teeth) && teeth>3)
|
||||||
circ_pitch=circ_pitch,
|
assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
teeth=teeth,
|
assert(is_integer(hide) && hide>=0 && hide<teeth)
|
||||||
pressure_angle=PA,
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
clearance=clearance,
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
backlash=backlash,
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
profile_shift=profile_shift,
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
helical=helical,
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
internal=internal
|
assert(is_finite(gear_spin))
|
||||||
),
|
let(
|
||||||
perim = [
|
pr = pitch_radius(circ_pitch, teeth, helical=helical),
|
||||||
for (i = [0:1:teeth-1-hide])
|
tooth = _gear_tooth_profile(
|
||||||
each zrot(-i*360/teeth+gear_spin, p=tooth),
|
circ_pitch=circ_pitch,
|
||||||
if (hide>0) [0,0],
|
teeth=teeth,
|
||||||
],
|
pressure_angle=PA,
|
||||||
rgn = [
|
clearance=clearance,
|
||||||
list_unwrap(deduplicate(perim)),
|
backlash=backlash,
|
||||||
if (is_finite(hub_diam) && hub_diam>0 && !hide)
|
profile_shift=profile_shift,
|
||||||
reverse(circle(d=hub_diam)),
|
helical=helical,
|
||||||
]
|
internal=internal
|
||||||
) reorient(anchor,spin, two_d=true, r=pr, p=rgn);
|
),
|
||||||
|
perim = [
|
||||||
|
for (i = [0:1:teeth-1-hide])
|
||||||
|
each zrot(-i*360/teeth+gear_spin, p=tooth),
|
||||||
|
if (hide>0) [0,0],
|
||||||
|
],
|
||||||
|
rgn = [
|
||||||
|
list_unwrap(deduplicate(perim)),
|
||||||
|
if (shaft_diam>0 && !hide)
|
||||||
|
reverse(circle(d=shaft_diam)),
|
||||||
|
]
|
||||||
|
) reorient(anchor,spin, two_d=true, r=pr, p=rgn);
|
||||||
|
|
||||||
|
|
||||||
module spur_gear2d(
|
module spur_gear2d(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 11,
|
teeth,
|
||||||
hide = 0,
|
hide = 0,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
clearance,
|
clearance,
|
||||||
|
@ -563,7 +603,7 @@ module spur_gear2d(
|
||||||
interior,
|
interior,
|
||||||
profile_shift,
|
profile_shift,
|
||||||
helical,
|
helical,
|
||||||
hub_diam=0,
|
shaft_diam = 0,
|
||||||
pitch,
|
pitch,
|
||||||
diam_pitch,
|
diam_pitch,
|
||||||
mod,
|
mod,
|
||||||
|
@ -573,10 +613,20 @@ module spur_gear2d(
|
||||||
) {
|
) {
|
||||||
dummy = !is_undef(interior) ? echo("In spur_gear2d(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
dummy = !is_undef(interior) ? echo("In spur_gear2d(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
||||||
internal = first_defined([internal,interior,false]);
|
internal = first_defined([internal,interior,false]);
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("spur_gear2d()", pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical, invert=!internal);
|
helical = _inherit_gear_helical(helical, invert=!internal);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>3)
|
||||||
|
assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(is_integer(hide) && hide>=0 && hide<teeth)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_finite(gear_spin));
|
||||||
rgn = spur_gear2d(
|
rgn = spur_gear2d(
|
||||||
circ_pitch = circ_pitch,
|
circ_pitch = circ_pitch,
|
||||||
teeth = teeth,
|
teeth = teeth,
|
||||||
|
@ -587,7 +637,7 @@ module spur_gear2d(
|
||||||
backlash = backlash,
|
backlash = backlash,
|
||||||
profile_shift = profile_shift,
|
profile_shift = profile_shift,
|
||||||
internal = internal,
|
internal = internal,
|
||||||
hub_diam = hub_diam
|
shaft_diam = shaft_diam
|
||||||
);
|
);
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
||||||
attachable(anchor,spin, two_d=true, r=pr) {
|
attachable(anchor,spin, two_d=true, r=pr) {
|
||||||
|
@ -651,7 +701,7 @@ module spur_gear2d(
|
||||||
|
|
||||||
module ring_gear(
|
module ring_gear(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 50,
|
teeth,
|
||||||
thickness = 10,
|
thickness = 10,
|
||||||
backing = 10,
|
backing = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
|
@ -669,11 +719,23 @@ module ring_gear(
|
||||||
spin = 0,
|
spin = 0,
|
||||||
orient = UP
|
orient = UP
|
||||||
) {
|
) {
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("ring_gear()",pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical);
|
helical = _inherit_gear_helical(helical);
|
||||||
thickness = _inherit_gear_thickness(thickness);
|
thickness = _inherit_gear_thickness(thickness);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>3)
|
||||||
|
assert(is_finite(thickness) && thickness>0)
|
||||||
|
assert(is_finite(backing) && backing>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_bool(herringbone))
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(slices==undef || (is_integer(slices) && slices>0))
|
||||||
|
assert(is_finite(gear_spin));
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
||||||
ar = outer_radius(circ_pitch, teeth, helical=helical, profile_shift=profile_shift, internal=true);
|
ar = outer_radius(circ_pitch, teeth, helical=helical, profile_shift=profile_shift, internal=true);
|
||||||
circum = 2 * PI * pr;
|
circum = 2 * PI * pr;
|
||||||
|
@ -757,7 +819,7 @@ module ring_gear(
|
||||||
// back(pr1-pr2) spur_gear2d(circ_pitch=circ_pitch, teeth=teeth2);
|
// back(pr1-pr2) spur_gear2d(circ_pitch=circ_pitch, teeth=teeth2);
|
||||||
module ring_gear2d(
|
module ring_gear2d(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 50,
|
teeth,
|
||||||
backing = 10,
|
backing = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
helical,
|
helical,
|
||||||
|
@ -771,10 +833,19 @@ module ring_gear2d(
|
||||||
anchor = CENTER,
|
anchor = CENTER,
|
||||||
spin = 0
|
spin = 0
|
||||||
) {
|
) {
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("ring_gear2d()",pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical);
|
helical = _inherit_gear_helical(helical);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>3)
|
||||||
|
assert(is_finite(backing) && backing>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_spin));
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
pr = pitch_radius(circ_pitch, teeth, helical=helical);
|
||||||
ar = outer_radius(circ_pitch, teeth, helical=helical, profile_shift=profile_shift, internal=true);
|
ar = outer_radius(circ_pitch, teeth, helical=helical, profile_shift=profile_shift, internal=true);
|
||||||
attachable(anchor,spin, two_d=true, r=pr) {
|
attachable(anchor,spin, two_d=true, r=pr) {
|
||||||
|
@ -865,7 +936,7 @@ module ring_gear2d(
|
||||||
|
|
||||||
module rack(
|
module rack(
|
||||||
pitch,
|
pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
thickness,
|
thickness,
|
||||||
height = 10,
|
height = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
|
@ -881,10 +952,21 @@ module rack(
|
||||||
spin = 0,
|
spin = 0,
|
||||||
orient = UP
|
orient = UP
|
||||||
) {
|
) {
|
||||||
pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
pitch = _inherit_gear_pitch("rack()",pitch, circ_pitch, diam_pitch, mod, warn=false);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical);
|
helical = _inherit_gear_helical(helical);
|
||||||
thickness = _inherit_gear_thickness(thickness);
|
thickness = _inherit_gear_thickness(thickness);
|
||||||
|
checks=
|
||||||
|
assert(is_integer(teeth) && teeth>0)
|
||||||
|
assert(is_finite(thickness) && thickness>0)
|
||||||
|
assert(is_finite(height) && height>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
//assert(is_bool(herringbone))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_travel));
|
||||||
trans_pitch = pitch / cos(helical);
|
trans_pitch = pitch / cos(helical);
|
||||||
a = _adendum(pitch, profile_shift);
|
a = _adendum(pitch, profile_shift);
|
||||||
d = _dedendum(pitch, clearance, profile_shift);
|
d = _dedendum(pitch, clearance, profile_shift);
|
||||||
|
@ -925,7 +1007,7 @@ module rack(
|
||||||
|
|
||||||
function rack(
|
function rack(
|
||||||
pitch,
|
pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
thickness,
|
thickness,
|
||||||
height = 10,
|
height = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
|
@ -942,10 +1024,22 @@ function rack(
|
||||||
orient = UP
|
orient = UP
|
||||||
) =
|
) =
|
||||||
let(
|
let(
|
||||||
pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
pitch = _inherit_gear_pitch("rack()",pitch, circ_pitch, diam_pitch, mod, warn=false),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
helical = _inherit_gear_helical(helical),
|
helical = _inherit_gear_helical(helical),
|
||||||
thickness = _inherit_gear_thickness(thickness),
|
thickness = _inherit_gear_thickness(thickness)
|
||||||
|
)
|
||||||
|
assert(is_integer(teeth) && teeth>0)
|
||||||
|
assert(is_finite(thickness) && thickness>0)
|
||||||
|
assert(is_finite(height) && height>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
//assert(is_bool(herringbone))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_travel))
|
||||||
|
let(
|
||||||
trans_pitch = pitch / cos(helical),
|
trans_pitch = pitch / cos(helical),
|
||||||
a = _adendum(pitch, profile_shift),
|
a = _adendum(pitch, profile_shift),
|
||||||
d = _dedendum(pitch, clearance, profile_shift),
|
d = _dedendum(pitch, clearance, profile_shift),
|
||||||
|
@ -1009,7 +1103,9 @@ function rack(
|
||||||
// backlash = Gap between two meshing teeth, in the direction along the circumference of the pitch circle
|
// backlash = Gap between two meshing teeth, in the direction along the circumference of the pitch circle
|
||||||
// clearance = Clearance gap at the bottom of the inter-tooth valleys.
|
// clearance = Clearance gap at the bottom of the inter-tooth valleys.
|
||||||
// helical = The angle of the rack teeth away from perpendicular to the rack length. Stretches out the tooth shapes. Used to match helical spur gear pinions. Default: 0
|
// helical = The angle of the rack teeth away from perpendicular to the rack length. Stretches out the tooth shapes. Used to match helical spur gear pinions. Default: 0
|
||||||
// profile_shift = Profile shift factor x.
|
// profile_shift = Profile shift factor x for tooth shape.
|
||||||
|
// gear_travel = The distance the rack should be moved by linearly. Default: 0
|
||||||
|
// rounding = If true, rack tips and valleys are slightly rounded. Default: true
|
||||||
// diam_pitch = The diametral pitch, or number of teeth per inch of pitch diameter. Note that the diametral pitch is a completely different thing than the pitch diameter.
|
// diam_pitch = The diametral pitch, or number of teeth per inch of pitch diameter. Note that the diametral pitch is a completely different thing than the pitch diameter.
|
||||||
// mod = The metric module/modulus of the gear, or mm of pitch diameter per tooth.
|
// mod = The metric module/modulus of the gear, or mm of pitch diameter per tooth.
|
||||||
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
|
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
|
||||||
|
@ -1029,7 +1125,7 @@ function rack(
|
||||||
|
|
||||||
function rack2d(
|
function rack2d(
|
||||||
pitch,
|
pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
height = 10,
|
height = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
backlash = 0,
|
backlash = 0,
|
||||||
|
@ -1040,16 +1136,27 @@ function rack2d(
|
||||||
diam_pitch,
|
diam_pitch,
|
||||||
mod,
|
mod,
|
||||||
gear_travel = 0,
|
gear_travel = 0,
|
||||||
|
rounding = true,
|
||||||
anchor = CENTER,
|
anchor = CENTER,
|
||||||
spin = 0
|
spin = 0
|
||||||
) = let(
|
) = let(
|
||||||
pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
pitch = _inherit_gear_pitch("rack2d()",pitch, circ_pitch, diam_pitch, mod, warn=false),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
helical = _inherit_gear_helical(helical),
|
helical = _inherit_gear_helical(helical)
|
||||||
|
)
|
||||||
|
assert(is_integer(teeth) && teeth>0)
|
||||||
|
assert(is_finite(height) && height>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_travel))
|
||||||
|
let(
|
||||||
adendum = _adendum(pitch, profile_shift),
|
adendum = _adendum(pitch, profile_shift),
|
||||||
dedendum = _dedendum(pitch, clearance, profile_shift)
|
dedendum = _dedendum(pitch, clearance, profile_shift)
|
||||||
)
|
)
|
||||||
assert(dedendum < height)
|
assert(dedendum < height, "height= is not large enough.")
|
||||||
let(
|
let(
|
||||||
trans_pitch = pitch / cos(helical),
|
trans_pitch = pitch / cos(helical),
|
||||||
trans_pa = atan(tan(PA)/cos(helical)),
|
trans_pa = atan(tan(PA)/cos(helical)),
|
||||||
|
@ -1057,29 +1164,30 @@ function rack2d(
|
||||||
l = teeth * trans_pitch,
|
l = teeth * trans_pitch,
|
||||||
ax = ang_adj_to_opp(trans_pa, adendum),
|
ax = ang_adj_to_opp(trans_pa, adendum),
|
||||||
dx = ang_adj_to_opp(trans_pa, dedendum),
|
dx = ang_adj_to_opp(trans_pa, dedendum),
|
||||||
|
clear = dedendum - adendum,
|
||||||
poff = tthick/2 - backlash,
|
poff = tthick/2 - backlash,
|
||||||
tooth = [
|
tooth = [
|
||||||
[-trans_pitch/2, -dedendum],
|
[-trans_pitch/2, -dedendum],
|
||||||
each arc(n=4, r=dedendum-adendum, corner=[
|
if (rounding) each arc(n=4, r=clear, corner=[
|
||||||
[-trans_pitch/2, -dedendum],
|
[-trans_pitch/2, -dedendum],
|
||||||
[-poff-dx, -dedendum],
|
[-poff-dx, -dedendum],
|
||||||
[-poff+ax, +adendum],
|
[-poff+ax, +adendum],
|
||||||
]),
|
]) else [-poff-dx, -dedendum],
|
||||||
each arc(n=4, r=trans_pitch/16, corner=[
|
if (rounding) each arc(n=4, r=trans_pitch/16, corner=[
|
||||||
[-poff-dx, -dedendum],
|
[-poff-dx, -dedendum],
|
||||||
[-poff+ax, +adendum],
|
[-poff+ax, +adendum],
|
||||||
[+poff-ax, +adendum],
|
[+poff-ax, +adendum],
|
||||||
]),
|
]) else [-poff+ax, +adendum],
|
||||||
each arc(n=4, r=trans_pitch/16, corner=[
|
if (rounding) each arc(n=4, r=trans_pitch/16, corner=[
|
||||||
[-poff+ax, +adendum],
|
[-poff+ax, +adendum],
|
||||||
[+poff-ax, +adendum],
|
[+poff-ax, +adendum],
|
||||||
[+poff+dx, -dedendum],
|
[+poff+dx, -dedendum],
|
||||||
]),
|
]) else [+poff-ax, +adendum],
|
||||||
each arc(n=4, r=dedendum-adendum, corner=[
|
if (rounding) each arc(n=4, r=clear, corner=[
|
||||||
[+poff-ax, +adendum],
|
[+poff-ax, +adendum],
|
||||||
[+poff+dx, -dedendum],
|
[+poff+dx, -dedendum],
|
||||||
[+trans_pitch/2, -dedendum],
|
[+trans_pitch/2, -dedendum],
|
||||||
]),
|
]) else [+poff+dx, -dedendum],
|
||||||
[+trans_pitch/2, -dedendum],
|
[+trans_pitch/2, -dedendum],
|
||||||
],
|
],
|
||||||
path2 = [
|
path2 = [
|
||||||
|
@ -1106,7 +1214,7 @@ function rack2d(
|
||||||
|
|
||||||
module rack2d(
|
module rack2d(
|
||||||
pitch,
|
pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
height = 10,
|
height = 10,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
backlash = 0.0,
|
backlash = 0.0,
|
||||||
|
@ -1120,9 +1228,18 @@ module rack2d(
|
||||||
anchor = CENTER,
|
anchor = CENTER,
|
||||||
spin = 0
|
spin = 0
|
||||||
) {
|
) {
|
||||||
pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
pitch = _inherit_gear_pitch("rack2d()",pitch, circ_pitch, diam_pitch, mod, warn=false);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
helical = _inherit_gear_helical(helical);
|
helical = _inherit_gear_helical(helical);
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>0)
|
||||||
|
assert(is_finite(height) && height>0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(helical) && abs(helical)<90)
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_travel));
|
||||||
trans_pitch = pitch / cos(helical);
|
trans_pitch = pitch / cos(helical);
|
||||||
a = _adendum(pitch, profile_shift);
|
a = _adendum(pitch, profile_shift);
|
||||||
d = _dedendum(pitch, clearance, profile_shift);
|
d = _dedendum(pitch, clearance, profile_shift);
|
||||||
|
@ -1253,8 +1370,8 @@ module rack2d(
|
||||||
// }
|
// }
|
||||||
|
|
||||||
function bevel_gear(
|
function bevel_gear(
|
||||||
circ_pitch = 5,
|
circ_pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
face_width = 10,
|
face_width = 10,
|
||||||
pitch_angle = 45,
|
pitch_angle = 45,
|
||||||
mate_teeth,
|
mate_teeth,
|
||||||
|
@ -1277,7 +1394,7 @@ function bevel_gear(
|
||||||
) = let(
|
) = let(
|
||||||
dummy = !is_undef(interior) ? echo("In bevel_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
dummy = !is_undef(interior) ? echo("In bevel_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0,
|
||||||
internal = first_defined([internal,interior,false]),
|
internal = first_defined([internal,interior,false]),
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
circ_pitch = _inherit_gear_pitch("bevel_gear()",pitch, circ_pitch, diam_pitch, mod),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
spiral_angle = _inherit_gear_helical(spiral_angle, invert=!internal),
|
spiral_angle = _inherit_gear_helical(spiral_angle, invert=!internal),
|
||||||
face_width = _inherit_gear_thickness(face_width),
|
face_width = _inherit_gear_thickness(face_width),
|
||||||
|
@ -1366,8 +1483,8 @@ function bevel_gear(
|
||||||
|
|
||||||
|
|
||||||
module bevel_gear(
|
module bevel_gear(
|
||||||
circ_pitch = 5,
|
circ_pitch,
|
||||||
teeth = 20,
|
teeth,
|
||||||
face_width = 10,
|
face_width = 10,
|
||||||
pitch_angle = 45,
|
pitch_angle = 45,
|
||||||
mate_teeth,
|
mate_teeth,
|
||||||
|
@ -1390,7 +1507,7 @@ module bevel_gear(
|
||||||
) {
|
) {
|
||||||
dummy = !is_undef(interior) ? echo("In bevel_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
dummy = !is_undef(interior) ? echo("In bevel_gear(), the argument 'interior=' has been deprecated, and may be removed in the future. Please use 'internal=' instead."):0;
|
||||||
internal = first_defined([internal,interior,false]);
|
internal = first_defined([internal,interior,false]);
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("bevel_gear()",pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
spiral_angle = _inherit_gear_helical(spiral_angle, invert=!internal);
|
spiral_angle = _inherit_gear_helical(spiral_angle, invert=!internal);
|
||||||
face_width = _inherit_gear_thickness(face_width);
|
face_width = _inherit_gear_thickness(face_width);
|
||||||
|
@ -1491,9 +1608,20 @@ function worm(
|
||||||
orient=UP
|
orient=UP
|
||||||
) =
|
) =
|
||||||
let(
|
let(
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
circ_pitch = _inherit_gear_pitch("worm()", pitch, circ_pitch, diam_pitch, mod),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
profile_shift = default(profile_shift, 0),
|
profile_shift = default(profile_shift, 0)
|
||||||
|
)
|
||||||
|
assert(is_integer(starts) && starts>0)
|
||||||
|
assert(is_finite(l) && l>0)
|
||||||
|
//assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_bool(left_handed))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
//assert(is_finite(gear_spin))
|
||||||
|
let(
|
||||||
helical = asin(starts * circ_pitch / PI / d),
|
helical = asin(starts * circ_pitch / PI / d),
|
||||||
trans_pitch = circ_pitch / cos(helical),
|
trans_pitch = circ_pitch / cos(helical),
|
||||||
tooth = xflip(
|
tooth = xflip(
|
||||||
|
@ -1549,9 +1677,19 @@ module worm(
|
||||||
spin=0,
|
spin=0,
|
||||||
orient=UP
|
orient=UP
|
||||||
) {
|
) {
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("worm()", pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(starts,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(starts,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(starts) && starts>0)
|
||||||
|
assert(is_finite(l) && l>0)
|
||||||
|
//assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_bool(left_handed))
|
||||||
|
assert(is_finite(gear_spin))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1);
|
||||||
vnf = worm(
|
vnf = worm(
|
||||||
circ_pitch=circ_pitch,
|
circ_pitch=circ_pitch,
|
||||||
starts=starts,
|
starts=starts,
|
||||||
|
@ -1644,8 +1782,8 @@ module worm(
|
||||||
|
|
||||||
function worm_gear(
|
function worm_gear(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 36,
|
teeth,
|
||||||
worm_diam = 30,
|
worm_diam,
|
||||||
worm_starts = 1,
|
worm_starts = 1,
|
||||||
worm_arc = 60,
|
worm_arc = 60,
|
||||||
crowning = 0.1,
|
crowning = 0.1,
|
||||||
|
@ -1665,9 +1803,24 @@ function worm_gear(
|
||||||
) =
|
) =
|
||||||
assert(worm_arc >= 10 && worm_arc <= 60)
|
assert(worm_arc >= 10 && worm_arc <= 60)
|
||||||
let(
|
let(
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod),
|
circ_pitch = _inherit_gear_pitch("worm_gear()", pitch, circ_pitch, diam_pitch, mod),
|
||||||
PA = _inherit_gear_pa(pressure_angle),
|
PA = _inherit_gear_pa(pressure_angle),
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA)),
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA))
|
||||||
|
)
|
||||||
|
assert(is_integer(teeth) && teeth>10)
|
||||||
|
assert(is_finite(worm_diam) && worm_diam>0)
|
||||||
|
assert(is_integer(worm_starts) && worm_starts>0)
|
||||||
|
assert(is_finite(worm_arc) && worm_arc>0 && worm_arc<90)
|
||||||
|
assert(is_finite(crowning) && crowning>=0)
|
||||||
|
assert(is_bool(left_handed))
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
//assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(slices==undef || (is_integer(slices) && slices>0))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_spin))
|
||||||
|
let(
|
||||||
helical = asin(worm_starts * circ_pitch / PI / worm_diam),
|
helical = asin(worm_starts * circ_pitch / PI / worm_diam),
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical),
|
pr = pitch_radius(circ_pitch, teeth, helical),
|
||||||
hob_rad = worm_diam / 2 + crowning,
|
hob_rad = worm_diam / 2 + crowning,
|
||||||
|
@ -1739,29 +1892,43 @@ function worm_gear(
|
||||||
|
|
||||||
module worm_gear(
|
module worm_gear(
|
||||||
circ_pitch,
|
circ_pitch,
|
||||||
teeth = 36,
|
teeth,
|
||||||
worm_diam = 30,
|
worm_diam,
|
||||||
worm_starts = 1,
|
worm_starts = 1,
|
||||||
worm_arc = 60,
|
worm_arc = 60,
|
||||||
crowning = 0.1,
|
crowning = 0.1,
|
||||||
left_handed = false,
|
left_handed = false,
|
||||||
pressure_angle,
|
pressure_angle,
|
||||||
backlash = 0,
|
|
||||||
slices = 10,
|
|
||||||
clearance,
|
clearance,
|
||||||
|
backlash = 0,
|
||||||
|
shaft_diam = 0,
|
||||||
|
slices = 10,
|
||||||
profile_shift,
|
profile_shift,
|
||||||
gear_spin=0,
|
gear_spin=0,
|
||||||
pitch,
|
pitch,
|
||||||
diam_pitch,
|
diam_pitch,
|
||||||
mod,
|
mod,
|
||||||
shaft_diam = 0,
|
|
||||||
anchor = CENTER,
|
anchor = CENTER,
|
||||||
spin = 0,
|
spin = 0,
|
||||||
orient = UP
|
orient = UP
|
||||||
) {
|
) {
|
||||||
circ_pitch = _inherit_gear_pitch(pitch, circ_pitch, diam_pitch, mod);
|
circ_pitch = _inherit_gear_pitch("worm_gear()", pitch, circ_pitch, diam_pitch, mod);
|
||||||
PA = _inherit_gear_pa(pressure_angle);
|
PA = _inherit_gear_pa(pressure_angle);
|
||||||
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
profile_shift = default(profile_shift, auto_profile_shift(teeth,PA));
|
||||||
|
checks =
|
||||||
|
assert(is_integer(teeth) && teeth>10)
|
||||||
|
assert(is_finite(worm_diam) && worm_diam>0)
|
||||||
|
assert(is_integer(worm_starts) && worm_starts>0)
|
||||||
|
assert(is_finite(worm_arc) && worm_arc>0 && worm_arc<90)
|
||||||
|
assert(is_finite(crowning) && crowning>=0)
|
||||||
|
assert(is_bool(left_handed))
|
||||||
|
assert(is_finite(PA) && PA>=0 && PA<90, "Bad pressure_angle value.")
|
||||||
|
assert(clearance==undef || (is_finite(clearance) && clearance>=0))
|
||||||
|
assert(is_finite(backlash) && backlash>=0)
|
||||||
|
assert(is_finite(shaft_diam) && shaft_diam>=0)
|
||||||
|
assert(slices==undef || (is_integer(slices) && slices>0))
|
||||||
|
assert(is_finite(profile_shift) && abs(profile_shift)<1)
|
||||||
|
assert(is_finite(gear_spin));
|
||||||
helical = asin(worm_starts * circ_pitch / PI / worm_diam);
|
helical = asin(worm_starts * circ_pitch / PI / worm_diam);
|
||||||
pr = pitch_radius(circ_pitch, teeth, helical);
|
pr = pitch_radius(circ_pitch, teeth, helical);
|
||||||
vnf = worm_gear(
|
vnf = worm_gear(
|
||||||
|
@ -2253,7 +2420,7 @@ function pitch_radius(
|
||||||
// halign="center", valign="top");
|
// halign="center", valign="top");
|
||||||
// }
|
// }
|
||||||
|
|
||||||
function outer_radius(circ_pitch=5, teeth=11, clearance, internal=false, helical=0, profile_shift=0, mod, pitch, diam_pitch) =
|
function outer_radius(circ_pitch, teeth, clearance, internal=false, helical=0, profile_shift=0, mod, pitch, diam_pitch) =
|
||||||
let( circ_pitch = circular_pitch(pitch, mod, circ_pitch, diam_pitch) )
|
let( circ_pitch = circular_pitch(pitch, mod, circ_pitch, diam_pitch) )
|
||||||
pitch_radius(circ_pitch, teeth, helical) + (
|
pitch_radius(circ_pitch, teeth, helical) + (
|
||||||
internal
|
internal
|
||||||
|
|
Loading…
Reference in a new issue