*\r
* See <http://www.gnu.org/licenses/>.\r
*\r
+ * Version 2.5. 2020-04-11 Leadin option works for internal threads.\r
* Version 2.4. 2019-07-14 Add test option - do not render threads.\r
* Version 2.3. 2017-08-31 Default for leadin: 0 (best for internal threads).\r
* Version 2.2. 2017-01-01 Correction for angle; leadfac option. (Thanks to\r
// as z increases. Default: 0 (no taper).\r
// leadin - 0 (default): no chamfer; 1: chamfer (45 degree) at max-z end;\r
// 2: chamfer at both ends, 3: chamfer at z=0 end.\r
-// leadfac - scale of leadin chamfer (default: 1.0 = 1/2 thread).\r
+// leadfac - scale of leadin chamfer length (default: 1.0 = 1/2 thread).\r
// test - true = do not render threads (just draw "blank" cylinder).\r
// Default: false (draw threads).\r
module metric_thread (diameter=8, pitch=1, length=1, internal=false, n_starts=1,\r
}\r
}\r
}\r
- }\r
\r
- // chamfer z=0 end if leadin is 2 or 3\r
- if (leadin == 2 || leadin == 3) {\r
- difference () {\r
- cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments);\r
+ // Internal thread lead-in: take away from external solid.\r
+ if (internal) {\r
+\r
+ // "Negative chamfer" z=0 end if leadin is 2 or 3.\r
+ if (leadin == 2 || leadin == 3) {\r
+ cylinder (r1=diameter/2, r2=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
+ $fn=n_segments);\r
+ }\r
\r
- cylinder (r2=diameter/2, r1=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
- $fn=n_segments);\r
+ // "Negative chamfer" z-max end if leadin is 1 or 2.\r
+ if (leadin == 1 || leadin == 2) {\r
+ translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) {\r
+ cylinder (r1=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
+ r2=tapered_diameter/2,\r
+ $fn=n_segments);\r
+ }\r
+ }\r
}\r
}\r
\r
- // chamfer z-max end if leadin is 1 or 2.\r
- if (leadin == 1 || leadin == 2) {\r
- translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) {\r
+ if (! internal) {\r
+\r
+ // Chamfer z=0 end if leadin is 2 or 3.\r
+ if (leadin == 2 || leadin == 3) {\r
difference () {\r
cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments);\r
- cylinder (r1=tapered_diameter/2, r2=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
+\r
+ cylinder (r2=diameter/2, r1=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
$fn=n_segments);\r
}\r
}\r
+\r
+ // Chamfer z-max end if leadin is 1 or 2.\r
+ if (leadin == 1 || leadin == 2) {\r
+ translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) {\r
+ difference () {\r
+ cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments);\r
+\r
+ cylinder (r1=tapered_diameter/2, r2=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,\r
+ $fn=n_segments);\r
+ }\r
+ }\r
+ }\r
}\r
}\r
}\r
}\r
\r
\r
+\r