RhinoScript recursive branch
From KokkugiaWiki
this simple recursive algorithm builds branching structures
Option Explicit
Call Main()
Sub Main()
Dim line, ang, scale
' user input: branch, ang, scale
line = Rhino.GetObject("select a starting branch", 4)
ang = Rhino.GetReal("angle of rotation", 15, 1, 180)
scale = Rhino.GetReal("scale of branch", 0.9)
' call recursive algorithm
Call branch(line, ang, scale)
End Sub
Function branch(line, ang, scale)
Dim arrStartPt, arrEndPt, vec, vec1, newEndPt, line1, curveLength
Dim vec2, newEndPt2, line2
' get the length of the input line
curveLength = Rhino.CurveLength(line)
' conditional statement - based on length
If curveLength > 10 Then
' get start and end points
arrStartPt = Rhino.CurveStartPoint(line)
arrEndPt = Rhino.CurveEndPoint(line)
' get a vector between start and end
vec = Rhino.VectorCreate(arrEndPt, arrStartPt) ''''' vec(x,y,z)
' scale vector
vec = Rhino.VectorScale(vec, scale)
' rotate vectors
vec1 = Rhino.VectorRotate(vec, ang, Array(0,0,1))
vec2 = Rhino.VectorRotate(vec, -ang, Array(0,0,1))
' add the vector to the end point
newEndPt = Rhino.VectorAdd(arrEndPt, vec1)
newEndPt2 = Rhino.VectorAdd(arrEndPt, vec2)
' draw a new line
line1 = Rhino.AddLine(arrEndPt, newEndPt)
line2 = Rhino.AddLine(arrEndPt, newEndPt2)
Call branch(line1, ang, scale)
Call branch(line2, ang, scale)
End If
End Function
