182 lines
5.5 KiB
OpenSCAD
182 lines
5.5 KiB
OpenSCAD
|
/*
|
||
|
* 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("");
|
||
|
}
|
||
|
|