/* * 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 <knurledFinishLib_v2.scad> * * 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(""); }