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
	


Views