workshop01G2:Codefarm

From CECO
Jump to: navigation, search



"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)

Visualised

Interactive week3 Fractileline.jpg