screwThreads.frink

View or download 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
}



View or download 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 19092 days, 9 hours, 33 minutes ago.