screwThreads.frink

Download or view screwThreads.frink in plain text format


/** This contains routines for making screw threads for 3-D printing. */

use parametric3D.frink

/** Makes a single-pixel tool for testing.  This returns a VoxelArray with a
    single pixel at [0,0,0] */

makeSinglePixelTool[] :=
{
   return newJava["frink.graphics.VoxelArray", [0,1,0,1,0,1,true]]
}

/** Makes a spherical tool.  This returns a VoxelArray with a sphere of the
    specified radius and resolution centered at (0,0,0) */

makeSphereTool[radius, res] :=
{
   return callJava["frink.graphics.VoxelArray", "makeSphere", [radius res]]
}

/** Makes a double-cone tool suitable for simple screw threads.
    This returns a VoxelArray with a double cone of the
    specified height and radius and resolution centered at (0,0,0).
    The cone is oriented with the points pointing along the Z axis. */

makeDoubleConeTool[halfHeight, radius, res] :=
{
   t1 = callJava["frink.graphics.VoxelArray", "makeTaperedCylinder", [0,0,0,0,0,halfHeight res, radius res, 0]]
   t2 = callJava["frink.graphics.VoxelArray", "makeTaperedCylinder", [0,0,0,0,0,-halfHeight res, radius res, 0]]
   return t1.union[t2]
}

/** Makes a double-cone with flat sides tool suitable for simple screw threads.
    This returns a VoxelArray with a double cone of the
    specified height and radius and resolution centered at (0,0,0).
    The cone is oriented with the points pointing along the Z axis. */

makeDoubleConeTool[coneHeight, radius, flatHeight, res] :=
{
   t1 = callJava["frink.graphics.VoxelArray", "makeTaperedCylinder", [0,0,flatHeight/2 res,0,0,(coneHeight+flatHeight/2) res, radius res, 0]]
   t2 = callJava["frink.graphics.VoxelArray", "makeTaperedCylinder", [0,0,-flatHeight/2 res,0,0,-(coneHeight + flatHeight/2) res, radius res, 0]]
   flat = callJava["frink.graphics.VoxelArray", "makeCylinder", [0,0,flatHeight/2 res,0,0,-flatHeight/2 res, radius res]]
   return t1.union[t2].union[flat]
}

/** Calculates a helical tool path.

     This returns a frink.graphics.Point3DIntList which specifies 3-D integer
     coordinates where the tool should pass through.  The tool's path can be
     instantiated into a 3-D model using VoxelArray.paintAlongPath 
*/

makeHelicalToolPath[radius, pitch, angle0, angle1, t0, res] :=
{
   // These functions are defined in parametric3D.frink
   return calculatePath[getFunction["helix",2], [radius, pitch, t0], angle0, angle1, res]
}

/** Makes threads with the specified radius, pitch, angles, resolution, and
    tool.  The tool should probably be centered at [0,0,0]
*/

makeThreads[radius, pitch, angle0, angle1, t0, tool, res] :=
{
   path = makeHelicalToolPath[radius, pitch, angle0, angle1, t0, res] 
   v = callJava["frink.graphics.VoxelArray", "paintAlongPath", [path, tool, 0,0,0]]
   return v
}



Download or view screwThreads.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 20217 days, 23 hours, 52 minutes ago.