Download or view TelescopeViewfinder.frink in plain text format
/** This renders a 3-D model to fix my telescope viewfinder to Wavefront .obj
file format for 3-D printing.
See: http://paulbourke.net/dataformats/obj/
*/
sides = 100
stopDiam = 1.25 in
cylDiam = 1.195 in
b = .6757 in
w = new Writer["TelescopeViewfinder1.195.obj"]
w.println["# Telescope Viewfinder by Frink\n"]
w.println["o viewfinder\n"]
cylBottom = new array[sides]
cylTop = new array[sides]
stopTop = new array[sides]
stopBottom = new array[sides]
z0 = 0 mm
z1 = -2 mm
angleStep = circle/sides
// The length unit
u = mm
for i = 0 to sides-1
{
angle = i angleStep
x = cylDiam/2 cos[angle]
y = cylDiam/2 sin[angle]
zt = x + b
cylBottom.push[[x, y, z0, i+1]]
cylTop.push[[x, y, zt, sides+i+1]]
stopTop.push[[stopDiam/2 cos[angle], stopDiam/2 sin[angle], z0, 2 sides+i+1]]
stopBottom.push[[stopDiam/2 cos[angle], stopDiam/2 sin[angle], z1, 3 sides+i+1]]
}
w.println["# Vertex list \n"]
w.println["\n# Cyl bottom"]
dumpVertices[cylBottom, w, u]
w.println["\n# Cyl top"]
dumpVertices[cylTop, w, u]
w.println["\n# Stop top"]
dumpVertices[stopTop, w, u]
w.println["\n# Stop bottom"]
dumpVertices[stopBottom, w, u]
w.println["# Face list\n"]
//w.println["usemtl Default"]
// Now output the faces. These should be output by vertex numbers in a
// counterclockwise "out" fashion.
topFace = "f"
bottomFace = new array
for i = 0 to sides-1
{
// Cyl sides
w.println["\n# Cyl sides"]
[xt0, yt0, zt0, ovt0] = cylTop@i
[xb0, yb0, zb0, ovb0] = cylBottom@i
[xt1, yt1, zt1, ovt1] = cylTop@((i+1) mod sides)
[xb1, yb1, zb1, ovb1] = cylBottom@((i+1) mod sides)
w.println["f $ovt0 $ovb0 $ovb1 $ovt1"]
// Upper surface of stop.
[xt0, yt0, zt0, svt0] = stopTop@i
[xb0, yb0, zb0, svb0] = stopBottom@i
[xt1, yt1, zt1, svt1] = stopTop@((i+1) mod sides)
[xb1, yb1, zb1, svb1] = stopBottom@((i+1) mod sides)
w.println["\n# Upper Surface of stop"]
w.println["f $ovb0 $svt0 $svt1 $ovb1"]
// Sides of stop.
w.println["\n# Sides of stop"]
w.println["f $svt0 $svb0 $svb1 $svt1"]
topFace = topFace + " " + ovt0
bottomFace.push[svb0] // We will reverse this later
}
w.println["\n# Top face"]
w.println[topFace]
w.println["\n# Bottom face"]
w.println["f " + join[" ", reverse[bottomFace]]]
w.close[]
/** Dump an array of vertices */
dumpVertices[array, writer, u] :=
{
for [x,y,z] = array
writer.println["v " + formatFix[x, u, 5] + " " + formatFix[y, u, 5] + " " + formatFix[z, u, 5]]
}
Download or view TelescopeViewfinder.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 20217 days, 23 hours, 19 minutes ago.