From 88b5c4ce215a6e537b46e541224219b8375930d6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 10 May 2020 15:33:51 +0100 Subject: [PATCH] threads: download v2.5 https://www.dkprojects.net/openscad-threads/ Signed-off-by: Ian Jackson --- threads.scad | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/threads.scad b/threads.scad index c958cb5..b2eee23 100644 --- a/threads.scad +++ b/threads.scad @@ -15,6 +15,7 @@ * * See . * + * Version 2.5. 2020-04-11 Leadin option works for internal threads. * Version 2.4. 2019-07-14 Add test option - do not render threads. * Version 2.3. 2017-08-31 Default for leadin: 0 (best for internal threads). * Version 2.2. 2017-01-01 Correction for angle; leadfac option. (Thanks to @@ -93,7 +94,7 @@ function segments (diameter) = min (50, max (ceil (diameter*6), 25)); // as z increases. Default: 0 (no taper). // leadin - 0 (default): no chamfer; 1: chamfer (45 degree) at max-z end; // 2: chamfer at both ends, 3: chamfer at z=0 end. -// leadfac - scale of leadin chamfer (default: 1.0 = 1/2 thread). +// leadfac - scale of leadin chamfer length (default: 1.0 = 1/2 thread). // test - true = do not render threads (just draw "blank" cylinder). // Default: false (draw threads). module metric_thread (diameter=8, pitch=1, length=1, internal=false, n_starts=1, @@ -149,27 +150,50 @@ module metric_thread (diameter=8, pitch=1, length=1, internal=false, n_starts=1, } } } - } - // chamfer z=0 end if leadin is 2 or 3 - if (leadin == 2 || leadin == 3) { - difference () { - cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments); + // Internal thread lead-in: take away from external solid. + if (internal) { + + // "Negative chamfer" z=0 end if leadin is 2 or 3. + if (leadin == 2 || leadin == 3) { + cylinder (r1=diameter/2, r2=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, + $fn=n_segments); + } - cylinder (r2=diameter/2, r1=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, - $fn=n_segments); + // "Negative chamfer" z-max end if leadin is 1 or 2. + if (leadin == 1 || leadin == 2) { + translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) { + cylinder (r1=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, + r2=tapered_diameter/2, + $fn=n_segments); + } + } } } - // chamfer z-max end if leadin is 1 or 2. - if (leadin == 1 || leadin == 2) { - translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) { + if (! internal) { + + // Chamfer z=0 end if leadin is 2 or 3. + if (leadin == 2 || leadin == 3) { difference () { cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments); - cylinder (r1=tapered_diameter/2, r2=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, + + cylinder (r2=diameter/2, r1=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, $fn=n_segments); } } + + // Chamfer z-max end if leadin is 1 or 2. + if (leadin == 1 || leadin == 2) { + translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) { + difference () { + cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments); + + cylinder (r1=tapered_diameter/2, r2=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac, + $fn=n_segments); + } + } + } } } } @@ -380,3 +404,4 @@ module thread_polyhedron (radius, pitch, internal, n_starts, thread_size, } + -- 2.30.2