workshop01G2:Codefarm
From CECO
"Fractal Line" 24-09-2013
import rhinoscriptsyntax as rs
import math
import scriptcontext
outputLine1 = []
outputLine2 = []
outputLine3 = []
outputLine4 = []
def fractal(x, position, line):
startPt = rs.CurveStartPoint(line) endPt = rs.CurveEndPoint(line) Pt = (endPt-startPt) * position + startPt newPt1 = (startPt + Pt) * 0.5 newPt2 = (Pt + endPt) * 0.5 vectorLine = rs.VectorSubtract(startPt, endPt) vectorNormal = rs.VectorCrossProduct(vectorLine, (0,0,1)) vectorNormal = rs.VectorUnitize(vectorNormal) vector1 = rs.VectorScale(vectorNormal, rs.Distance(startPt, Pt) * 0.5) vector2 = rs.VectorScale(vectorNormal, rs.Distance(Pt, endPt) * 0.5) newPt1move = rs.PointAdd(newPt1, vector1) newPt2move = rs.PointAdd(newPt2, -vector2) line1 = rs.AddLine(startPt, newPt1move) line2 = rs.AddLine(newPt1move, Pt) line3 = rs.AddLine(Pt, newPt2move) line4 = rs.AddLine(newPt2move, endPt) outputLine1.append(line1) outputLine2.append(line2) outputLine3.append(line3) outputLine4.append(line4) if x > 0: fractal(x-1, position, line1) fractal(x-1, position, line2) fractal(x-1, position, line3) fractal(x-1, position, line4) else: return
can_continue = True
startLine = rs.AddLine(ptA,ptB)
if startLine is None: can_continue = False
if can_continue:
if level is None: can_continue = False
if can_continue:
if percentage is None: can_continue = False
if can_continue:
fractal(level, percentage, startLine)