#Code written by Luis Quinones @ [complicitMatter] #Feel free to use and modify the code in any way you want, please comment below with suggestions, ideas of any relevant throughts import rhinoscriptsyntax as rs import ghpythonlib.components as gh def movePoints(mVerts,flattened,myIndexes,attrPts): otherIndexList = [] staticList = [] #go through and move the points that are not affected by the attactor for k in range(len(mVerts)): if k not in flattened: otherIndexList.append(k) mOV = gh.Vector2Pt(mVerts[k], mVerts[k], False) [0] otherVertsLoc = gh.Move(mVerts[k], mOV) staticList.append(otherVertsLoc[0]) movedList = [] #Go through and move the points that are affected by the attactors for k in range(len(myIndexes)): for index in myIndexes[k]: #we are going through a list of list of indexes myVec = gh.Vector2Pt(mVerts[index],attrPts[k], False) [0] #create the vector to the correct attractor myLargeVec = gh.Amplitude(myVec, vAmp) transVerts = gh.Move(mVerts[index], myLargeVec) movedList.append(transVerts[0]) #append it to the moved list return staticList, movedList, otherIndexList def resortData(mVerts, flattened, staticList, movedList, otherIndexList): count = 0 comboList = [] #resort everything to match the input list orders for p in range(len(mVerts)): if p not in flattened: comboList.insert(p,staticList[otherIndexList.index(count)]) #insert the static point at the correct index in a new list if p in flattened: comboList.insert(p,movedList[flattened.index(count)]) #insert the moved point at the correct index in a new list count += 1 return comboList #-------------------------------------------------------------- # Deconstruct Input Mesh mDecon = gh.DeconstructMesh(meshIn) mVerts = mDecon[0] mFaces = mDecon[1] # create a list of list matching each vertex index to its corresponding attractor pt myIndexes = [] for m in range (len(attrPts)): cPCalc = gh.ClosestPoints(attrPts[m], mVerts, cPCount) myCP = cPCalc[0] myIndexBase = cPCalc[1] myIndexes.append(myIndexBase) dupIndexList = myIndexes[:] #dup list flattened = [val for sublist in dupIndexList for val in sublist] #flatten it #------------------Build Functions----------------------------- pointSet = movePoints(mVerts,flattened,myIndexes,attrPts) newMeshVertices = resortData(mVerts, flattened, pointSet[0], pointSet[1], pointSet[2]) #-------------------------------------------------------------- meshOut = gh.ConstructMesh(newMeshVertices, mFaces) #build that ish Update