"""
Script written by Luis Quinones
www.luisquinonesdesign.com
www.computationalmatter.com
Script version Monday, 21 March 2011 20:18:46
"""
"""each grip point checks its position on the mesh
find the corresponding color value that is closest to it
that color value 0-1 determines the multiplier for the threshold"""
import rhinoscriptsyntax as rs
from System.Drawing import Color
def Main():
strLayer = rs.AddLayer("ptStore", Color.White)
crvArr = rs.GetObjects("Crvs",filter = 4)
gens = rs.GetInteger("Generations",4)
threshold = rs.GetReal("AttractionThreshold",80)
for i in range(gens):
for j in range(len(crvArr)):
rs.EnableObjectGrips(crvArr[j],enable = True)
gripCount = rs.ObjectGripCount(crvArr[j])
for k in range(gripCount-1):
gripPos = rs.ObjectGripLocation(crvArr[j],k)
count = 0
for m in range(len(crvArr)):
crvParam = rs.CurveClosestPoint(crvArr[m],gripPos)
crvPt = rs.EvaluateCurve(crvArr[m],crvParam)
dist = rs.Distance(crvPt,gripPos)
#print newThreshold
if dist < threshold and j != m :
if count == 0:
closestDist = dist
closestVec = rs.VectorCreate(crvPt,gripPos)
count += 1
else:
if dist < closestDist:
closestDist = dist
closestVec = rs.VectorCreate(crvPt,gripPos)
#closestVec = rs.VectorScale(closestVec,threshMult)
count += 1
if count == 0:
closestVec = 0,0,0
newPos = rs.VectorAdd(gripPos,closestVec)
rs.ObjectGripLocation(crvArr[j],k,newPos)
rs.EnableObjectGrips(crvArr[j],False)
Main()
Update