/** 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."]