Option Explicit
‘Script written by <insert name>
‘Script copyrighted by <insert company name>
‘Script version 11 listopada 2008 12:07:51
Call Main()
Sub Main()
Dim aPts(),strB
Dim i
Dim aPtTemp
Dim aPtsNeighbors
Dim nMin : nMin = -2
Dim nMax: nMax =2
Dim dblSearchRad: dblSearchRad =1
Dim aA
ReDim Preserve aPts(0)
aPts(0) = rhino.GetPoint(“pick seed”)
aA = rhino.GetPoint(“get Attractor”)
strB = rhino.getobject(“border”,8+16+32)
For i=1 To 20
Do
aPtTemp = array(aPts(i-1)(0)+ eitherOr(nMin,nMax),_
aPts(i-1)(1)+eitherOr(nMin,nMax),_
aPts(0)(2))
” check its status
If i > 1 Then
aPtsNeighbors = searchWithinRad(aPtTemp, aPts, dblSearchRad)
If Not isnull (aPtsNeighbors) Then
Dim z : z = heighestZ(aPtsNeighbors)
aPtTemp = array(aPts(i-1)(0)+ eitherOr(nMin,nMax),_
aPts(i-1)(1)+eitherOr(nMin, nMax),_
z+0.5)
End If
End If
” collect
ReDim Preserve aPts(i)
aPts(i) = aPtTemp
” Attraction,Probability
DispAtr aA,i,aPts,aPtTemp,dblSearchRad,52
” Robot Steps
RobotFoot i,aPts,aPtTemp,aA
If Not rhino.IsPointInSurface(strB,aPts(i))= True Then Exit Do
Loop
” vizu
’Dim scircle : sCircle = rhino.AddCircle(rhino.MovePlane(Rhino.WorldXYPlane,aPts(i)),dblSearchRad)
’Call rhino.AddPlanarSrf(array(scircle))
’rhino.AddSphere aPts(i),dblSearchRad*RN(1,3)
Next
Dim strTrack
’Call rhino.addpolyline(aPts)
’strTrack = rhino.addinterpcurve(aPts)
End Sub
Function RN(nMin, nMax)
Randomize
RN = (nMax – nMin) * Rnd + nMin
End Function
Function eitherOr(n1, n2)
Randomize
If rnd > 0.5 Then
eitherOr = n1
Else
eitherOr = n2
End If
End Function
Function searchWithinRad(aPtSeed, aPts, dblRad)
Dim i, dblDist, n
Dim aPtscollect()
For i = 0 To UBound(aPts)
’dblDist = rhino.Distance(aPtSeed, aPts(i))
dblDist = rhino.Distance(aPtSeed, array(aPts(i)(0),aPts(i)(1),aPtSeed(2)))
If dblDist < dblRad Then
ReDim Preserve aPtscollect(n)
aPtscollect(n) = aPts(i)
’Call rhino.addPoint(aPtscollect(n))
n = n + 1
End If
Next
If n = 0 Then
searchWithinRad = Null
Else
searchWithinRad = aPtscollect
End If
End Function
Function heighestZ(aPts)
Dim i
Dim z : z = 0
For i = 0 To Ubound(aPts)
If aPts(i)(2) > z Then z = aPts(i)(2)
Next
heighestZ = z
End Function
Function DispAtr(aA,i,aPts,aPtTemp,dblSearchRad,dblChance)
Dim la ,lb, lc, ld
Dim arrla, arrlb, alfa, R
Dim cTL, cPL
Dim CrossSectionPlane
Dim aPtsNeighbors
’do
la=Rhino.addline(aPts(i-1),aA)
lb = rhino.AddLine(aPts(i-1),Rhino.EvaluateCurve (la, rhino.distance(aPts(i-1),aPtTemp)))
R=rhino.distance(aPts(i-1),aPtTemp)
cPL = Array(0,1,0)
cTL = Rhino.CurveTangent(la,0)
CrossSectionPlane = Rhino.PlaneFromFrame(aPts(i-1),cTL ,cPL)
’Rhino.ViewCPlane, Rhino.PlaneFromFrame(aPts(i-1), cTL, cPL)
lc=rhino.RotateObject (lb,aPts(i-1),eitherOr(-1,1)*RN(0,dblChance)*R,,True)
aPts(i) = rhino.curveendpoint(lc)
If i > 1 Then
aPtsNeighbors = searchWithinRad(aPtTemp, aPts, dblSearchRad)
If Not isnull (aPtsNeighbors) Then
Dim z : z = heighestZ(aPtsNeighbors)
End If
aPts(i) = array(rhino.curveendpoint(lc)(0),rhino.curveendpoint(lc)(1),z+0.5)
End If
rhino.Objectlayer la,”la”
rhino.Objectlayer lb,”lb”
rhino.Objectlayer lc,”lc”
’If rhino.IsPointInSurface(strB,aPts(i))= True Then Exit Do
’Loop
End Function
Function RobotFoot(i,aPts,aPtTemp,aA)
Dim y,x
Dim A, o
Dim ld: ld=rhino.AddLine(aPts(i-1),aPts(i))
Dim cTL, cPL,CrossSectionPlane
Dim pi: pi=rhino.PI
Dim d: d=int(rhino.Distance(aPts(i-1),aPts(i)))
Dim aPtsR(),aPtsL()
ReDim Preserve aPtsR(d)
ReDim Preserve aPtsL(d)
o=1
cPL = Array(0,1,0)
cTL = Rhino.CurveTangent(ld,0)
CrossSectionPlane = Rhino.PlaneFromFrame(aPts(i-1),cTL,cPL)
’Rhino.ViewCPlane, Rhino.PlaneFromFrame(aPts(i-1),cTL,cPL)
For x=1 To d
A= RN(0.1,0.2)
y=A*sin(o*x*(pi/2))
If y>0.1 Then
aPtsR(x)= rhino.PointAdd (aPts(i-1),array(x,y,0))
aPtsR(x)=rhino.addpoint(aPtsR(x))
rhino.objectlayer aPtsR(x), “Rfoot”
End If
If y<-0.1 Then
aPtsL(x)= rhino.PointAdd(aPts(i-1),array(x,y,0))
aPtsL(x)=rhino.addpoint(aPtsL(x))
rhino.objectlayer aPtsL(x), “Lfoot”
End If
rhino.Objectlayer ld,”ld”
Next
’rhino.AddPolyline aPtsR
’rhino.AddPolyline aPtsL
End Function
0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
You must be logged in to post a comment.