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 20167 days, 1 hours, 11 minutes ago.