spider evolution

'spider evolution' overview

during the course of my investigation of simplistic model ideas with large number of different outcomes, I found myself working on a circular stack of triangles which are defined by few simple parameters. each parameter was originally defined by the user (the coding was left within the script but deactivated), however, as I was going through different settings to get shapes which are very different from each other for testing purposes, I decided to fully randomise the script. I have settled for the boundary condition of 20 units randomly picked to speed up the process of the shape search. within a matter of several minutes I have generated some 30 random shapes which were eventually dubbed ‘spider evolution’. I’m now planning to expand the script or modify it for other purposes. the script is available for download.

.:script example:.

Option Explicit

‘Script written by shane gregoran

‘Script version 30 August 2010 00:20:56 updated 28 October 2010

Call p04TriangularSomethings()

Sub p04TriangularSomethings()

‘for this purpose all random numbers have been set to max of 20

‘Dim nPts : nPts = Rhino.GetReal(“how many segments”, 12)

Dim nPts : nPts = Floor(rnd*20)

If nPts < 3 Then

nPts = 3

End If

Dim cp : cp = Rhino.WorldXYPlane

cp(0)(2) = Floor(rnd*10)

‘Dim iR : iR = Rhino.GetReal(“length of short triangulation”,10)

Dim iR : iR = Floor(rnd*20)

If iR < 1 Then

iR = 1

End If

‘Dim R : R = Rhino.GetReal(“length of segments”,15)

Dim R : R = Floor(rnd*20)

If R < 1 Then

R = 1

End If

Dim iCirc, iLength, iPts

ReDim iPts(nPts)

iCirc = Rhino.AddCircle (cp,iR)

If Rhino.IsCurve(iCirc) Then

iLength = Rhino.CurveLength(iCirc)

End If

Dim i, S, iSc

For i = 0 To (nPts-1)

iSc = iLength/nPts

If i=0 Then



S = iSc*i

End If

iPts(i) = Rhino.CurveArcLengthPoint(iCirc, S)


Dim oCirc, oLength, oPts

ReDim oPts(nPts)

cp(0)(2) = Floor(rnd*10)

oCirc = Rhino.AddCircle (cp,R)

If Rhino.IsCurve(oCirc) Then

oLength = Rhino.CurveLength(oCirc)

End If

Dim outS, oSc

For i = 0 To (nPts-1)

oSc = oLength/nPts

If i=0 Then



outS = oSc*i

End If

oPts(i) = Rhino.CurveArcLengthPoint(oCirc, outS)


‘Dim apxH : apxH = Rhino.GetReal(“height of apex guide curvature points”, 6)

Dim apxH : apxH = Floor(rnd*20)

Dim Origin, Direction, Normal, hPlane

Origin = array(0,0,apxH)

If IsArray(Origin) Then

Direction = array(0,0,apxH+1)

If IsArray(Direction) Then

Normal = VectorCreate(Direction, Origin)

Normal = VectorUnitize(Normal)

hPlane = Rhino.PlaneFromNormal(Origin, Normal)

End If

End If

‘Dim apxR : apxR = Rhino.GetReal(“distance of apex point from base”, 5)

Dim apxR : apxR = Floor(rnd*20)

If apxR < 1 Then

apxR = 1

End If

Dim hCirc, hLength, hPts

ReDim hPts(nPts-1)

hCirc = Rhino.AddCircle (hPlane,apxR)

If Rhino.IsCurve(hCirc) Then

hLength = Rhino.CurveLength(hCirc)

End If

Dim hS, hSc

For i = 0 To (nPts-1)

hSc = hLength/nPts

If i=0 Then



hS = (hSc/2)+(hSc*i)

End If

hPts(i) = Rhino.CurveArcLengthPoint(hCirc, hS)


Dim wo : wo = array (0,0,(apxH/2))

Dim crvInnerPTS, crvOutterPTS, crvInnerPTSstring, crvOutterPTSstring

ReDim crvOutterPTS(nPts-1), crvInnerPTS(nPts-1), crvInnerPTSstring(nPts-1), crvOutterPTSstring(nPts-1)

For i = 0 To (nPts-1)

crvOutterPTS(i) = array(wo, hPts(i), oPts(i))

crvOutterPTSstring(i) = Rhino.AddCurve (crvOutterPTS(i))


For i = 0 To (nPts-1)

If i = 0 Then

crvInnerPTS(i) = array(wo, hPts(nPts-2), iPts(i))


If i = 1 Then

crvInnerPTS(i) = array(wo, hPts(nPts-1), iPts(i))


crvInnerPTS(i) = array(wo, hPts(i-2), iPts(i))

End If

End If

crvInnerPTSstring(i) = Rhino.AddCurve (crvInnerPTS(i))


Dim capCurve, capCurveString

ReDim capCurve(nPts-1), capCurveString(nPts-1)

For i = 0 To (nPts-1)

If i = (nPts-1) Then

capCurve(i) = array(oPts(i), hPts(i), iPts(1))


If i = (nPts-2) Then

capCurve(i) = array(oPts(i), hPts(i), iPts(0))


capCurve(i) = array(oPts(i),hPts(i), iPts(i+2))

End If

End If

capCurveString(i) = Rhino.AddCurve (capCurve(i))


Dim LoftA, rr, LoftB, SurfA, rrr

ReDim LoftA(nPts-1), LoftB(nPts-1), SurfA(nPts-1)

For rr = 0 To nPts-1

If rr = nPts-2 Then

rrr = 0


If rr = nPts-1 Then

rrr = 1


rrr = rr + 2

End If

End If

LoftA(rr) = Array(crvOutterPTSstring(rr), crvInnerPTSstring(rrr), capCurveString(rr))

rhino.DeleteObject iCirc

rhino.DeleteObject oCirc

rhino.DeleteObject hCirc

Rhino.AddEdgeSrf LoftA(rr)


End Sub


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s