Toad Stool by Adrian, Rika, Sonal

 

stool1

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

Shown

(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

ring-3_resized

sphere-ring_resized

sticks-ring_resized

pipes_resized

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

Final Project Description

We would like to make furniture which has various heights and curvatures on its surface. Initiating with the idea that different height and curvature can make various function, parametrically generated furniture allows continuous but function-various surface. It can be used as table, chair or shelve in each part.

We start to think about the rib structure rather than continuous section cut in a sense that it takes more strength with less material. If the rib-structuring method lets better strength, it is also possible that we can use lighter material and, accordingly, a different machine which is easy to deal with.

*Referencing Images

#1 from SoftOfficeNYC

9 101

#2 from SoftOfficeNYC

41 5

#3 from Matthias Pliessni

matthias-pliessnig matthias-pliessnig2

Initial Script

initial state

Script: initial state

Option Explicit
‘Script written by Adolfo Nadal, Ignacio Senra, Sergio Gomez
‘Script copyrighted by <insert company name>
‘Script version viernes, 07 de noviembre de 2008 11:26:37

Call Main()
Sub Main()
Dim i, j,k,l, strPt(),strtmpPt(),arrPt()
Dim Light, strLights, arrLights()
strLights = Rhino.GetObjects(“Lights”,1)
Dim thresholdDist
Dim testDist
Dim scalefactor

‘PROCESS INPUT POINTS SUCH AS LIGHT SOURCES
If IsNull (strLights) Then
Rhino.Print “light sources were required… creating n random sources”
Dim n : n = CInt(Ceil(arbitraryValue(1,4)))
Dim x,y,z
ReDim strLights(n-1)
ReDim arrLights(n-1)
For l = 0 To n-1
x = arbitraryValue(0,20)
y = arbitraryValue(0,13)
z = arbitraryValue(0,-2)
strLights(l)= Rhino.AddPoint(array(0.1*x,0.1*y,0.1*z))
arrLights(l)= array(0.1*x,0.1*y,0.1*z)
Next
Else
For k=0 To Ubound(strLights)
ReDim Preserve arrLights(k)
arrLights(k) = Rhino.PointCoordinates(strLights(k))
Next
End If

‘CREATE LAYERS
AddLayers
Rhino.ObjectLayer strLights,”Lights”
Rhino.EnableRedraw False

‘CREATE POINT GRID FOR CIRCLES
Rhino.CurrentLayer(“Points”)
Dim arrPlane, arrCircles(),arrtmpCircles(), arrCloseLight,dblLength
For i= 0 To 20
thresholdDist = 10
For j = 0 To 13
ReDim Preserve arrtmpPt(j)
arrtmpPt(j) = array(0.1*i,0.1*j,0)
For Each Light In arrLights
testDist = Rhino.Distance (arrtmpPt(j), Light)
If testDist < thresholdDist Then
thresholdDist = testDist
arrCloseLight = Light
End If
‘IF THE SCALE FACTOR IS LOCATED HERE, A MORE UNIFORM PATTERN OCCURS
‘scalefactor = (1/(100*(dblLength)))
Next
dblLength = Rhino.Distance(arrCloseLight,arrtmpPt(j))
‘IF THE SCALE FACTOR HAPPENS TO BE CALCULATED HERE, MORE GRADUAL RESULTS WILL HAPEN
scalefactor = 2*(1/(100*(dblLength)))
If dblLength = thresholdDist Then
Rhino.Print “they are the same” & i & ” ” & j & ” “
End If
If dblLength = testDist Then
Rhino.Print “they are the same…2…” & i & ” ” & j & ” “
End If
arrPlane = Rhino.PlaneFromFrame(arrtmpPt(j),array(0.1*i+1,0.1*j,0),array(0.1*i,0.1*j+1,0))
ReDim Preserve arrtmpCircles(j) : arrtmpCircles(j)=Rhino.AddCircle(arrPlane,scalefactor)
Next
ReDim Preserve arrPt(i)
arrPt(i) = arrtmpPt
‘ReDim Preserve strPt(i)
‘strPt(i) = Rhino.AddPoints(arrPt(i))
ReDim Preserve arrCircles(i)
arrCircles(i) = arrtmpCircles
Next

‘WE NEED TO CONVERT THE NESTED ARRAY arrCircles INTO A 1-DIMENSIONAL ARRAY
Dim counter, p, m, arrCirclesIntersection()
counter = 0
For p = 0 To Ubound(arrCircles)
For m = 0 To Ubound(arrCircles(l))
ReDim Preserve arrCirclesIntersection(counter)
arrCirclesIntersection(counter) = arrCircles(p)(m)
counter = counter +1
Next
Next

‘NOW WE CAN PASS THE DATA TO THE FUNCTION
MultipleDifferences arrCirclesIntersection

‘FINALIZE SCRIPT AND WRAP-UP
Rhino.CurrentLayer(“Script”)
Rhino.Print “Done”
Rhino.EnableRedraw True

End Sub

Function arbitraryValue(min, max)
Randomize
arbitraryValue = Int((max – min + 1) * Rnd + min)
End Function

Function AddLayers
If Not IsLayer(“Script”) Then
Rhino.AddLayer “Script”,RGB(0, 0, 0),True,False
End If

If Not IsLayer(“Lights”) Then
Rhino.AddLayer “Lights”,RGB(128, 0, 128),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Continuous”
End If

If Not IsLayer(“Points”) Then
Rhino.AddLayer “Points”,RGB(0, 0, 0),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Continuous”
End If
End Function

Function MultipleDifferences(strCrvs)

Rhino.Print “calculating intersection for ” & CStr(Ubound(strCrvs)^2) & ” curves. Please wait…”
Dim strCrv1, strCrv2, strCrvresult
Dim i, j
For i=0 To Ubound(strCrvs)
strCrv1=strCrvs(i)
For j=0 To Ubound(strCrvs)
strCrv2=strCrvs(j)
strCrvresult = Rhino.CurveBooleanDifference (strCrv1,strCrv2)
If Not IsNull(strCrvresult) Then
strCrv1 = strCrvresult(0)
‘ERASE ALL INBETWEEN STEPS IN THE CALCULATION OF SUCCESIVE DIFFERENCES
If j < Ubound(strCrvs) And i <> Ubound(strCrvs) Then
Rhino.HideObjects strCrvresult
Else
‘FOR THE LAST CURVE IT WORKS DIFFERENTLY
If i=Ubound(strCrvs) Then
If j<Ubound(strCrvs)-1 Then
Rhino.HideObjects strCrvresult
End If
End If
End If
End If
If j Mod 50 = 0 And i Mod 40= 0 And i>0 Then
Rhino.Print (i/Ubound(strCrvs)) & “% completed”
End If
Next
Rhino.EnableRedraw True
Rhino.EnableRedraw False
Next
Rhino.Print “completed”
Rhino.DeleteObjects strCrvs

End Function

material prototype

pseudo script

Option Explicit

Call Network()
Call Circles()
Sub Network()
‘list variables
Dim arrStrAttractors : arrStrAttractors = Rhino.GetObjects (“select attractors”,1)
ReDim arrAttractors(UBound(arrStrAttractors ))
For Each strAttractor In arrStrAttractors
arrAttractors(k) = Rhino.pointcoordinates (strAttractor)
k=k+1
Next
‘set initial values
stLocation = Rhino.GetPoint (“Select your start points”)
For i = 2 To ‘# of generations
For l=0 To UBound(startpoints)
For Each arrAttractor In arrAttractors
testDistance = Rhino.Distance (startpoint, arrAttractor)
If testDistance < dblDistance Then
dblDistance = testDistance
buildpoint = startpoint
‘if distance is 0 go to next closest
End If
Next
‘construct New lines And points based On build point
buildpoint1 = Rhino.Polar (buildpoint, 45, crvL)
curve = Rhino.AddLine (buildpoint, buildpoint2)
buildpoint3 = rhino.CurveEndPoint (str2Crv)
‘add the new endpoint to attractor list
‘and add the new point to build point array
Next
‘pipe all
End Sub

Sub Circles()
‘select all points
‘find density of points
‘for i = 0  to Ubound # of points
‘add circle with a radius based on density
‘next
‘for i = 0 to ubound # of cirles
‘trim and fillet all circles
‘next
‘join all lines
End Sub

parametric lace_prototyping

081105_lace edge detail

081105_study model details

081029_layout_00

081112_pattern test

pseudo code:

1) select pattern for recursive subdivision

2) select point(s) to initialize distance based recursion

3) assign fall off distance from point

4) subdivide pattern based on distance from point(s) & length of curves in the pattern.

and the (work in progress) rhinoscript…

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

Call distanceBasedRecursion()
Sub distanceBasedRecursion()
Dim triangle
Dim arrtriangle : arrtriangle = Rhino.GetObjects(“select the triangles”,8)
Dim arrLoc : arrLoc = Rhino.GetObjects (“select the points”,1)

Rhino.EnableRedraw False
For Each triangle In arrtriangle
subdivideTriangle(triangle)
Next
Rhino.EnableRedraw True
End Sub

Function subdivideTriangle(triangle)

Dim triangleLength, vertexPts, i, centerPt, triangleCrv, srfParam, srfNormal, arrTri, arrAttPt, arrCrvCnt, dblDist, arrpts, arrLoc()
arrTri = Rhino.DuplicateSurfaceBorder (triangle)

For Each triangleCrv In arrTri
triangleLength = Rhino.CurveLength(triangleCrv)
‘arrAttPt = Rhino.PointCoordinates(arrLoc(0))
arrCrvCnt = Rhino.CurveAreaCentroid (triangleCrv)
‘dblDist = Rhino.Distance (arrCrvCnt(0),arrAttPt)
‘dblDist = dblDist/2.1
Dim intPts : intPts = 30
arrpts = Rhino.DivideCurve (triangleCrv,intPts)

If (triangleLength > 3.5) Then
centerPt = rhino.CurveAreaCentroid(triangleCrv)

srfParam = Rhino.SurfaceClosestPoint(triangle, centerPt(0))
srfNormal = Rhino.SurfaceNormal(triangle, srfParam)
vertexPts = Rhino.PolylineVertices(triangleCrv)

Dim midpt0, midpt1, midpt2, triangle0, triangle1, triangle2, triangle3
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)

srfNormal = Rhino.VectorUnitize(srfNormal)
srfNormal = Rhino.VectorScale(srfNormal, triangleLength * 0.00)

midPt0 = Rhino.VectorAdd(midPt0, srfNormal)
midPt1 = Rhino.VectorAdd(midPt1, srfNormal)
midPt2 = Rhino.VectorAdd(midPt2, srfNormal)

triangle0 = Rhino.AddSrfPt(Array(vertexPts(0), midPt0, midPt2))
triangle1 = Rhino.AddSrfPt(Array(vertexPts(1), midPt1, midPt0))
triangle2 = Rhino.AddSrfPt(Array(vertexPts(2), midPt2, midPt1))
triangle3 = Rhino.AddSrfPt(Array(midPt0, midPt1, midPt2, midPt0))

subdivideTriangle triangle0
subdivideTriangle triangle1
subdivideTriangle triangle2
subdivideTriangle triangle3 ‘comment out this line to produce a sierpiński triangle

Rhino.DeleteObjects(Array(triangle, triangleCrv))
End If
Next
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
Randomize

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

End Function

material test part 1

material test 1ap1000723

2008_11_102008_11_11

 

I’m interested in developing this into an operable louver system that can be changed from transparent to translucent. I would ideally like it to attach to a window. But if I were to use a light fixture I would use 150-watt bulbrite linear fluorescents.

pseudo-script:

make locators

make array of points

make array of lines from points

find relationships between lines and locators

make planar surfaces (louvers) according to relationships to locators

make array of points based on locations and sizes of louvers

make array of lines based on those points

make array of planar surfaces (connectors, to connect the louvers) from those lines

find the intersections between the louvers and the connectors

alter the shapes of the two to accommodate the fit

lay out the pieces for laser cutting