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 18864 days, 10 hours, 30 minutes ago.