From 600f3c37c4278fe37b07279b2b15b7b81f8c3d22 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 11 Apr 2016 00:45:13 -0400 Subject: [PATCH] Add knurling library --- scad/knurledFinishLib_v2.scad | 181 ++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 scad/knurledFinishLib_v2.scad diff --git a/scad/knurledFinishLib_v2.scad b/scad/knurledFinishLib_v2.scad new file mode 100644 index 0000000..f4011fa --- /dev/null +++ b/scad/knurledFinishLib_v2.scad @@ -0,0 +1,181 @@ +/* + * knurledFinishLib_v2.scad + * + * Written by aubenc @ Thingiverse + * + * This script is licensed under the Public Domain license. + * + * http://www.thingiverse.com/thing:31122 + * + * Derived from knurledFinishLib.scad (also Public Domain license) available at + * + * http://www.thingiverse.com/thing:9095 + * + * Usage: + * + * Drop this script somewhere where OpenSCAD can find it (your current project's + * working directory/folder or your OpenSCAD libraries directory/folder). + * + * Add the line: + * + * use + * + * in your OpenSCAD script and call either... + * + * knurled_cyl( Knurled cylinder height, + * Knurled cylinder outer diameter, + * Knurl polyhedron width, + * Knurl polyhedron height, + * Knurl polyhedron depth, + * Cylinder ends smoothed height, + * Knurled surface smoothing amount ); + * + * ...or... + * + * knurl(); + * + * If you use knurled_cyl() module, you need to specify the values for all and + * + * Call the module ' help(); ' for a little bit more of detail + * and/or take a look to the PDF available at http://www.thingiverse.com/thing:9095 + * for a in depth descrition of the knurl properties. + */ + + +module knurl( k_cyl_hg = 12, + k_cyl_od = 25, + knurl_wd = 3, + knurl_hg = 4, + knurl_dp = 1.5, + e_smooth = 2, + s_smooth = 0) +{ + knurled_cyl(k_cyl_hg, k_cyl_od, + knurl_wd, knurl_hg, knurl_dp, + e_smooth, s_smooth); +} + +module knurled_cyl(chg, cod, cwd, csh, cdp, fsh, smt) +{ + cord=(cod+cdp+cdp*smt/100)/2; + cird=cord-cdp; + cfn=round(2*cird*PI/cwd); + clf=360/cfn; + crn=ceil(chg/csh); + + echo("knurled cylinder max diameter: ", 2*cord); + echo("knurled cylinder min diameter: ", 2*cird); + + if( fsh < 0 ) + { + union() + { + shape(fsh, cird+cdp*smt/100, cord, cfn*4, chg); + + translate([0,0,-(crn*csh-chg)/2]) + knurled_finish(cord, cird, clf, csh, cfn, crn); + } + } + else if ( fsh == 0 ) + { + intersection() + { + cylinder(h=chg, r=cord-cdp*smt/100, $fn=2*cfn, center=false); + + translate([0,0,-(crn*csh-chg)/2]) + knurled_finish(cord, cird, clf, csh, cfn, crn); + } + } + else + { + intersection() + { + shape(fsh, cird, cord-cdp*smt/100, cfn*4, chg); + + translate([0,0,-(crn*csh-chg)/2]) + knurled_finish(cord, cird, clf, csh, cfn, crn); + } + } +} + +module shape(hsh, ird, ord, fn4, hg) +{ + x0= 0; x1 = hsh > 0 ? ird : ord; x2 = hsh > 0 ? ord : ird; + y0=-0.1; y1=0; y2=abs(hsh); y3=hg-abs(hsh); y4=hg; y5=hg+0.1; + + if ( hsh >= 0 ) + { + rotate_extrude(convexity=10, $fn=fn4) + polygon(points=[ [x0,y1],[x1,y1],[x2,y2],[x2,y3],[x1,y4],[x0,y4] ], + paths=[ [0,1,2,3,4,5] ]); + } + else + { + rotate_extrude(convexity=10, $fn=fn4) + polygon(points=[ [x0,y0],[x1,y0],[x1,y1],[x2,y2], + [x2,y3],[x1,y4],[x1,y5],[x0,y5] ], + paths=[ [0,1,2,3,4,5,6,7] ]); + } +} + +module knurled_finish(ord, ird, lf, sh, fn, rn) +{ + for(j=[0:rn-1]) + assign(h0=sh*j, h1=sh*(j+1/2), h2=sh*(j+1)) + { + for(i=[0:fn-1]) + assign(lf0=lf*i, lf1=lf*(i+1/2), lf2=lf*(i+1)) + { + polyhedron( + points=[ + [ 0,0,h0], + [ ord*cos(lf0), ord*sin(lf0), h0], + [ ird*cos(lf1), ird*sin(lf1), h0], + [ ord*cos(lf2), ord*sin(lf2), h0], + + [ ird*cos(lf0), ird*sin(lf0), h1], + [ ord*cos(lf1), ord*sin(lf1), h1], + [ ird*cos(lf2), ird*sin(lf2), h1], + + [ 0,0,h2], + [ ord*cos(lf0), ord*sin(lf0), h2], + [ ird*cos(lf1), ird*sin(lf1), h2], + [ ord*cos(lf2), ord*sin(lf2), h2] + ], + triangles=[ + [0,1,2],[2,3,0], + [1,0,4],[4,0,7],[7,8,4], + [8,7,9],[10,9,7], + [10,7,6],[6,7,0],[3,6,0], + [2,1,4],[3,2,6],[10,6,9],[8,9,4], + [4,5,2],[2,5,6],[6,5,9],[9,5,4] + ], + convexity=5); + } + } +} + +module knurl_help() +{ + echo(); + echo(" Knurled Surface Library v2 "); + echo(""); + echo(" Modules: "); + echo(""); + echo(" knurled_cyl(parameters... ); - Requires a value for each an every expected parameter (see bellow) "); + echo(""); + echo(" knurl(); - Call to the previous module with a set of default parameters, "); + echo(" values may be changed by adding 'parameter_name=value' i.e. knurl(s_smooth=40); "); + echo(""); + echo(" Parameters, all of them in mm but the last one. "); + echo(""); + echo(" k_cyl_hg - [ 12 ] ,, Height for the knurled cylinder "); + echo(" k_cyl_od - [ 25 ] ,, Cylinder's Outer Diameter before applying the knurled surfacefinishing. "); + echo(" knurl_wd - [ 3 ] ,, Knurl's Width. "); + echo(" knurl_hg - [ 4 ] ,, Knurl's Height. "); + echo(" knurl_dp - [ 1.5 ] ,, Knurl's Depth. "); + echo(" e_smooth - [ 2 ] ,, Bevel's Height at the bottom and the top of the cylinder "); + echo(" s_smooth - [ 0 ] ,, Knurl's Surface Smoothing : File donwn the top of the knurl this value, i.e. 40 will snooth it a 40%. "); + echo(""); +} +