PerfectionPiece.frink

View or download PerfectionPiece.frink in plain text format


/** This makes a replacement piece for my "Perfection" game for 3-D printing.
*/


r = 254/in   // Voxel resolution

bottomWidth = 13.6 mm   // Outside measurement
topWidth = 16.0mm       // Outside measurement
topWallThickness    = 1.7 mm
bottomWallThickness = 1.1 mm
wallHeight = 8.0 mm

lidThickness = 1.1 mm

spindleDiamBottom = 5.5 mm
spindleDiamTop    = 3.8 mm
spindleHeight     = 12.1 mm

yHeight = 13.0 mm       // Outside measurement

br = bottomWallThickness / 2   // bottom radius of cone used as tool
tr = topWallThickness / 2
xr0 = bottomWidth / 2 - br
xr1 = topWidth / 2 - br
y1 = yHeight / 2 - br

// Make a Point2DFloatList (polygon) to represent the shape of the piece.
poly = newJava["frink.graphics.Point2DFloatList"]
poly.addPoint[-xr0 r, -y1 r]   // Bottom left
poly.addPoint[xr0 r, -y1 r]    // Bottom right
poly.addPoint[xr1 r, y1 r]     // Top right
poly.addPoint[-xr1 r, y1 r]    // Top left

// old vs. new : make tapered walls

// old:
// Make the tool to draw the walls
//tool = callJava["frink.graphics.VoxelArray", "makeTaperedCylinder", [0,0,0, 0,0,wallHeight r, br r, tr r]]
//v = callJava["frink.graphics.VoxelArray", "strokeZ", [poly, tool, 0,0,wallHeight/2 r, true]]

// new:
v = callJava["frink.graphics.VoxelArray", "strokeZTapered", [poly, 0, wallHeight r, br r, tr r, true]]

// Make lid
lidPoly = poly.scaleAround[0,0,1.4]  // Scale around the bottom dimensions
lid = v.extrudeZ[lidPoly, wallHeight r, (wallHeight+lidThickness) r]
v = v.union[lid]

// Make spindle
spindle = v.makeTaperedCylinder[0,0,(wallHeight + lidThickness) r, 0,0,(wallHeight+lidThickness+spindleHeight) r, spindleDiamBottom/2 r, spindleDiamTop/2 r]
v = v.union[spindle]


v.projectX[undef].show["X"]
v.projectY[undef].show["Y"]
v.projectZ[undef].show["Z"]

filename = "PerfectionPiece.obj"
print["Writing $filename..."]
w = new Writer[filename]
w.println[v.toObjFormat["Perfection", 1 / (r mm)]]
w.close[]
println["done."]


View or download PerfectionPiece.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 19093 days, 18 hours, 5 minutes ago.