""" Script written by Luis Quinones www.luisquinonesdesign.com www.computationalmatter.com Script version Tuesday, 28 June 2011 20:18:46 """ import rhinoscriptsyntax as rs import math Gens = rs.GetInteger("Number of Generations",6,1) Curves = rs.GetObjects("Select Base Crvs",rs.filter.curve) AttractorPts = rs.GetObjects("Attractor Points",rs.filter.point) Attract = rs.GetReal("CurvePointAttractionThreshold") attPtThresh = rs.GetReal("AttractorPointThreshold") dblRatio = rs.GetReal("Distance For Vector To Move") Rebuild = rs.GetInteger("Degree To Rebuild Curves") AttractorPtsList = [] for z in range(len(AttractorPts)): AttractorPtsList.append(rs.PointCoordinates(AttractorPts[z])) for i in range(Gens): for j in range(len(Curves)): arrNewPos = [] PointCount = rs.CurvePointCount(Curves[j]) arrCrvDiv = rs.CurvePoints(Curves[j]) if arrCrvDiv: print "BOOM" else: print "Nope" for k in range(PointCount): arrCrvPts = [] if not AttractorPtsList: print "really" indexClosestAtt = rs.PointArrayClosestPoint(AttractorPtsList,arrCrvDiv[k]) attPt = AttractorPtsList[indexClosestAtt] dist2 = rs.Distance(attPt,arrCrvDiv[k]) if dist2 < attPtThresh : NewPosition = attPt else: for L in range(len(Curves)): if j != L : arrCrvParam = rs.CurveClosestPoint(Curves[L],arrCrvDiv[k]) crvPt = rs.EvaluateCurve(Curves[L],arrCrvParam) arrCrvPts.append(crvPt) IndClosestCrv = rs.PointArrayClosestPoint(arrCrvPts,arrCrvDiv[k]) #print "NextClosestIndex = ",IndClosestCrv crvPt = arrCrvPts[IndClosestCrv] #print crvPt dist = rs.Distance(arrCrvDiv[k],crvPt) if dist < Attract : vector = rs.VectorCreate(crvPt,arrCrvDiv[k]) vector = rs.VectorScale(vector,dblRatio) NewPosition = rs.VectorAdd(vector,arrCrvDiv[k]) else: NewPosition = arrCrvDiv[k] arrNewPos.append(NewPosition) newcurve = rs.AddCurve(arrNewPos,Rebuild) rs.DeleteObject(Curves[j]) #rs.ObjectColor(newcurve,[j,j,j]) Curves[j] = newcurve