impossibleSphere.frink

View or download impossibleSphere.frink in plain text format


// This draws an "impossible" sphere inside a box for 3-D printing.
// The output is a Wavefront .obj format.

s = 254/2
radius = 18   // Radius of the edges of the cube
s2 = s - radius
v = callJava["frink.graphics.VoxelArray", "makeSphere", [s]]

// Make the edges of the cube as cylinders with hemispherical endcaps
// Bottom square
line[v, -s2, -s2, -s2,  s2, -s2, -s2, radius]
line[v, -s2, -s2, -s2, -s2,  s2, -s2, radius]
line[v,  s2, -s2, -s2,  s2,  s2, -s2, radius]
line[v, -s2,  s2, -s2,  s2,  s2, -s2, radius]

// Top square
line[v, -s2, -s2, s2,  s2, -s2, s2, radius]
line[v, -s2, -s2, s2, -s2,  s2, s2, radius]
line[v,  s2, -s2, s2,  s2,  s2, s2, radius]
line[v, -s2,  s2, s2,  s2,  s2, s2, radius]

// Vertical bars
line[v, -s2, -s2, -s2,  -s2, -s2, s2, radius]
line[v,  s2, -s2, -s2,   s2, -s2, s2, radius]
line[v, -s2,  s2, -s2,  -s2,  s2, s2, radius]
line[v,  s2,  s2, -s2,   s2,  s2, s2, radius]


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

filename = "impossibleSphere.obj"
print["Writing $filename..."]
w = new Writer[filename]
w.println[v.toObjFormat["test"]]
w.close[]
println["done."]

/** This draws a "line" (a capped cylinder) into the specified VoxelArray */
line[v, x1, y1, z1, x2, y2, z2, radius] :=
{
   v.drawCappedCylinder[x1, y1, z1, x2, y2, z2, radius]
}


View or download impossibleSphere.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 19100 days, 7 hours, 49 minutes ago.