Monthly Archives: November 2008

final project _ initial script

Call Main()
Sub Main()
Dim arrPlane, i, strCrv(), strInnerCrv(), strSrf(), strLftCrv, arrX, arrPt(), arrInnerPt(), counter
Dim strCrvv, strInnerCrvv, strLftCrvv, j, dblDist, arrTempPt, arrTempInnerPt
For i = 2 To 13
arrX = sin(i/15*3.14)*12
ReDim Preserve strCrv(i-2)
ReDim Preserve strInnerCrv(i-2)
ReDim Preserve strSrf(i-2)
arrPlane = Rhino.PlaneFromPoints (array(0,0,i), array(1,0,i), array(0,1,i))
strCrv(i-2) = Rhino.AddCircle (arrPlane, arrX)
strInnerCrv(i-2) = Rhino.AddCircle (arrPlane, arrX-1)
If i = 13 Then
Call Rhino.AddPlanarSrf (array(strCrv(i-2)))
Call Rhino.AddLoftSrf (array(strCrv(i-2),strInnerCrv(i-2)))
End If

Call Rhino.DeleteObjects (strCrv)
Call Rhino.DeleteObjects (strInnerCrv)
For j = -180 To 179 Step 30
counter = 0
For i = 1 To 14
arrX = sin(i/15*3.14)*12
ReDim Preserve arrPt(counter)
ReDim Preserve arrinnerPt(counter)
arrTempPt = Rhino.Polar (array(0,0,0), j, arrX)
arrPt(counter) = array(arrTempPt(0),arrTempPt(1),arrTempPt(2)+i)
arrTempInnerPt = Rhino.Polar (array(0,0,0), j, arrX-1)
arrinnerPt(counter) = array (arrTempInnerPt(0),arrTempInnerPt(1),arrTempInnerPt(2)+i)
counter = counter + 1
strCrvv = Rhino.AddCurve (arrPt)
strinnerCrvv = Rhino.AddCurve (arrinnerPt)
strLftCrvv = Rhino.AddLoftSrf (array(strCrvv, strInnerCrvv))
End Sub

parametric window tactile louvers (katie)

2008_11_161Option Explicit
‘Script written by <insert name>
‘Script copyrighted by <insert company name>
‘Script version Monday, November 17, 2008 12:19:20 AM

Call Main()
Sub Main()
 Dim i, j, arrPt, arrPt2, strCrv, strPath, strSrf, strPoint, arrPoint
 Dim arrPoints : arrPoints = Rhino.Getobjects 
 Call Rhino.EnableRedraw (False)
 For Each strPoint In arrPoints
  arrPoint = Rhino.PointCoordinates (strPoint)
  For j = 1 To 10
   For i = -180 To 180 Step 45
    arrPt = Rhino.Polar (arrPoint, i, j,Rhino.WorldYZPlane)
    strCrv = Rhino.AddLine (arrPt, Array(arrPt(0)-j/2,arrPt(1),arrPt(2)))
    arrPt2 = Rhino.Polar (arrPoint, i+90, j/1.5,Rhino.WorldYZPlane)
    strPath = Rhino.AddLine (arrPoint,arrPt2)
    strSrf = Rhino.ExtrudeCurve (strCrv, strPath)
    Call Rhino.MoveObject (strSrf,Rhino.CurveMidPoint (strPath),Rhino.CurveStartPoint (strPath))
    Call Rhino.DeleteObject (strPath)
 Call Rhino.EnableRedraw (True)
End Sub

parametric lace_distanceBasedRecursion

080731_layout_1 080731_layout_1

This rhinoscript subdivides triangular surfaces from multiple point attractors. There are two types of subdivision patterns which may be called; one derives from the mid points of each triangle, while the other divides from the quarter points. Both may be called at the sametime, or separately, within the function subdivideTriangle, the triangleLength for i & j may be adjusted for such calls.

Option Explicit
‘Script written by heath west & mark bearak
‘Script version 17 November 2008 13:57:37

Call distanceBasedRecursion()
Sub distanceBasedRecursion()

Dim triangle, fallOffDist, intPts
Dim j, k, strAttractor, strTriangle, arrPt, arrAttractor, testDistance, dblDistance, strCrv, arrCrvs, dblCrvLength, dblCurrentLength
Dim triangleLength, vertexPts, i, centerPt, triangleCrv, srfParam, srfNormal, arrTri, arrAttPt, arrCrvCnt, dblDist

Dim arrtriangle : arrtriangle = Rhino.GetObjects(“select the triangles”,8)
Dim arrStrAttractors : arrStrAttractors = Rhino.GetObjects (“select the points”,1)
Dim arrParameters: arrParameters = array(“Fall Off Distance”)
Dim arrValues: arrValues = array(“2”)
Dim arrResults: arrResults = Rhino.PropertyListBox(arrParameters, arrValues, “Distance Based Recursion” )

If IsArray(arrResults) Then
fallOffDist = arrResults(0)
End If

Call Rhino.enableredraw (False)
ReDim arrAttractors(UBound(arrStrAttractors ))

For Each strAttractor In arrStrAttractors
arrAttractors(k) = Rhino.PointCoordinates (strAttractor)

For Each strTriangle In arrtriangle
arrPt = Rhino.SurfaceAreaCentroid (strTriangle)
arrCrvs    = Rhino.DuplicateSurfaceBorder (strTriangle)
dblCrvLength = 0

For j = 0 To Ubound(arrCrvs)
dblCurrentLength = Rhino.CurveLength (arrCrvs(j))
dblCrvLength = dblCrvLength + dblCurrentLength

dblDistance = fallOffDist

For Each arrAttractor In arrAttractors
testDistance = Rhino.Distance (arrPt(0), arrAttractor)
If testDistance < dblDistance Then
dblDistance = testDistance
End If

arrTri = Rhino.DuplicateSurfaceBorder (strTriangle)

For Each triangleCrv In arrTri
triangleLength = Rhino.CurveLength(triangleCrv)
arrAttPt = Rhino.PointCoordinates(arrStrAttractors(0))
arrCrvCnt = Rhino.CurveAreaCentroid (triangleCrv)
dblDist = Rhino.Distance (arrCrvCnt(0),arrAttPt)

If dblDistance < fallOffDist+0.1 Then
End If
Rhino.EnableRedraw (True)
End Sub

Function subdivideTriangle(strTriangle)
Dim triangleLength, vertexPts, centerPt, triangleCrv, srfParam, srfNormal, arrTri, nMin, nMax, i, j, fallOffDist
arrTri = Rhino.DuplicateSurfaceBorder (strTriangle)

For Each triangleCrv In arrTri

Dim midpt0, midpt1, midpt2, midpt3, midpt4, midmid3, midmid4, quarterPt0, quarterPt1, quarterPt2, quarterPt3, quarterPt4
Dim triangle0, triangle1, triangle2, triangle3, triangle4, triangle5, triangle6, triangle7
triangleLength = Rhino.CurveLength(triangleCrv)
centerPt = Rhino.CurveAreaCentroid(triangleCrv)
srfParam = Rhino.SurfaceClosestPoint(strTriangle, centerPt(0))
srfNormal = Rhino.SurfaceNormal(strTriangle, srfParam)
vertexPts = Rhino.PolylineVertices(triangleCrv)

midPt0 = Array(((vertexPts(1)(0) + vertexPts(0)(0)))/2, ((vertexPts(1)(1) + vertexPts(0)(1)))/2, ((vertexPts(1)(2) + vertexPts(0)(2)))/2)
midPt1 = Array(((vertexPts(2)(0) + vertexPts(1)(0)))/2, ((vertexPts(2)(1) + vertexPts(1)(1)))/2, ((vertexPts(2)(2) + vertexPts(1)(2)))/2)
midPt2 = Array(((vertexPts(0)(0) + vertexPts(2)(0)))/2, ((vertexPts(0)(1) + vertexPts(2)(1)))/2, ((vertexPts(0)(2) + vertexPts(2)(2)))/2)

quarterPt0= Array((midPt0(0) + centerPt(0)(0))/2, (midPt0(1) + centerPt(0)(1))/2, (midPt0(2) + centerPt(0)(2))/2)
quarterPt1= Array((midPt1(0) + centerPt(0)(0))/2, (midPt1(1) + centerPt(0)(1))/2, (midPt1(2) + centerPt(0)(2))/2)
quarterPt2= Array((midPt2(0) + centerPt(0)(0))/2, (midPt2(1) + centerPt(0)(1))/2, (midPt2(2) + centerPt(0)(2))/2)

For i=0 To UBound(arrTri)
If (triangleLength > RandomNumber(2,3)) Then

triangle0 = Rhino.AddSrfPt(Array(vertexPts(0), quarterPt0, quarterPt2))
triangle1 = Rhino.AddSrfPt(Array(vertexPts(1), quarterPt1, quarterPt0))
triangle2 = Rhino.AddSrfPt(Array(vertexPts(2), quarterPt2, quarterPt1))
triangle3 = Rhino.AddSrfPt(Array(quarterPt0, quarterPt1, quarterPt2, quarterPt0))

subdivideTriangle triangle0
subdivideTriangle triangle1
subdivideTriangle triangle2
subdivideTriangle triangle3

Rhino.DeleteObjects(Array(strTriangle, triangleCrv))
End If

For j=0 To UBound(arrTri)
If (triangleLength > RandomNumber(3,4)) Then

triangle4 = Rhino.AddSrfPt(Array(vertexPts(0), midPt0, midPt2))
triangle5 = Rhino.AddSrfPt(Array(vertexPts(1), midPt1, midPt0))
triangle6 = Rhino.AddSrfPt(Array(vertexPts(2), midPt2, midPt1))
triangle7 = Rhino.AddSrfPt(Array(midPt0, midPt1, midPt2, midPt0))

subdivideTriangle triangle4
subdivideTriangle triangle5
subdivideTriangle triangle6
subdivideTriangle triangle7’comment out this line to produce a sierpiński triangle

Rhino.DeleteObjects(Array(strTriangle, triangleCrv))
End If
End Function

Function RandomNumber(nMin, nMax)

RandomNumber = Null

If Not IsNumeric(nMin) Then Exit Function
If Not IsNumeric(nMax) Then Exit Function

If nMin >= nMax Then Exit Function

RandomNumber = Int((nMax – nMin + 1) * Rnd + nMin)

End Function

Toad Stool by Adrian, Rika, Sonal



Pseudo code

_input height

_adjust width (of base and top) according to height

_input number of sections

_loop depending on number of sections

_generate curves for sections

_generate surface from curves

_offset surface

_rotate sections around a point (angle based on number of sections)

_draw ellipse for seat based on width of top of sections

_make surface from ellipse, extrude

_get top profile of stool from rotated stool, use to cut notches in seat

_lay out for contour cut for mill

Thad Nobuhara Project: Rings

Proposal: To develop a set of rings


(1) Bone Spicule Ring, (2) Sphere, (3) Sticks, (4) Pipes

Not shown

(1) Topo rings (faceted landscape spanning four fingers), (2) Woven Ring, (3) Web Ring, (4) Abbreviated ‘T’ and ‘N’ ring set

Pseudo Code

_Generate boundary box for max ring dim

_Draw Construction lines

_Draw profile or unit (ex: spheres)

_sweep or project onto surface

_Boolean Finger Hole

Construction Method

_ 3D printed Plastic





final project _ initial idea

I would like to make a mesh fabric light with cardboard. This mesh surface will be a layer of light filter to create random projections on the wall.

referecing image
scrap lights from graypants

foamy pictures

We have done two partial tests in the CNC, equivalent to a beer for each one. Tested both transparency and endmills, we now have explored some fundamental parameters for the further development of the moke-up model for our modular (modular-parametric, parametric-modular) cealing. The built models made us realize the importance of the lines drawn by the mill, considering the fact that the surfaces can be defined by curves. We will take this fact into account when wrapping up the final script.  The two tests show a certain tendency to carve too thin sections in unexpected areas of the model, where the material easily breaks so that we will need to fix the minimum thickness for a propper transparency effect to be achieved.dsc_0198dsc_0209