Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #spider connect
- # rev .03
- from pymel.core import *
- import math
- import random as r
- import time
- start = time.clock()
- DistanceAmount = 8
- toleranceAmnt = 3
- droop = .3
- noiseAmnt = .5
- def grpr(name):
- g = ls(name)
- if not g:
- g = group(n=name,em=1)
- else:
- g = g[0]
- return g
- def grprk(name):
- g = ls(name)
- if g:
- delete(g)
- g = group(n=name,em=1)
- return g
- def getPiv(s):
- select(s)
- setToolTo('Move')
- piv = manipMoveContext('Move', q=True, p=True,m=2)
- return piv
- def getDist(s1,s2,s1t,s2t):
- dist = math.sqrt((s2t[0] - s1t[0])**2 + (s2t[1] - s1t[1])**2 + (s2t[2] - s1t[2])**2)
- return dist
- def wiggler(crv,amnt):
- i = 0
- x = 0
- l = len(crv[0].cv)-2
- for c in crv[0].cv:
- if x < 2:
- pass
- elif i == l:
- break
- else:
- rp = r.randint(0,1)
- if rp:
- rx = r.uniform(-amnt,amnt)
- ry = r.uniform(-amnt,amnt)
- rx = r.uniform(-amnt,amnt)
- move(c,rx,ry,rx, os=1,r=1)
- i += 1
- x +=1
- sl = selected()
- dlist = []
- crvGrp = grpr("crvGrp")
- jntGrp = grpr("jntGrp")
- doneList = []
- i=1
- x=0
- rl = 0
- sv = []
- ss = []
- select(cl=1)
- for s in sl:
- if i == len(sl):# stop at the end
- pass
- else:
- if rl:
- dc = sl[i],s
- else:
- dc = ss, s
- if dc in doneList:
- pass
- else:
- doneList.append(dc)
- for ss in sl:
- tt = 0
- if s != ss:
- if len(sl) <= 2:
- dist = DistanceAmount
- tt = 1
- else:
- s1t = getPiv(s)
- s2t = getPiv(ss)
- dist = getDist(s,ss,s1t,s2t)
- #print dist, DistanceAmount - toleranceAmnt,DistanceAmount + toleranceAmnt
- if dist > DistanceAmount - toleranceAmnt and dist < DistanceAmount + toleranceAmnt:
- jnt = ls(s+"_crvJoint")
- if not jnt:
- print "creating jnt ", s+"_crvJoint"
- jnt = joint(n = s+"_crvJoint")
- jntPc = parentConstraint(s,jnt)
- parent(jnt,jntGrp)
- jnt2 = ls(ss+"_crvJoint")
- if not jnt2:
- print "creating jnt2 ", ss+"_crvJoint"
- jnt2 = joint(n = ss+"_crvJoint")
- jntPc = parentConstraint(ss,jnt2)
- parent(jnt2,jntGrp)
- if tt:# if only two things are selected
- s1t = getPiv(s)
- s2t = getPiv(ss)
- ddd = getDist(s,ss,s1t,s2t)
- crvName = str(s)+str(ss)+"_crv_"
- ccCheck = 0
- ccCheck2 = 0
- print "distance is ", ddd
- else:
- crvName = str(s)+str(ss)+"_crv"
- ccCheck = ls(str(s)+str(ss)+"_crv")
- ccCheck2 = ls(str(ss)+str(s)+"_crv")
- if ccCheck:
- pass
- elif ccCheck2:
- pass
- else:
- s1t = getPiv(s)
- s2t = getPiv(ss)
- cc = curve(p = [s1t,s2t],d=1, n = crvName)
- xform(cc,cp=1)# center pivot
- ccR = rebuildCurve(cc,ch=0,rpo=1,rt=0,end=1,kr=0, kcp=0,kep=1,kt=0,s=3,d=3,tol=0.01)
- #droop
- doffx = r.uniform(-noiseAmnt,noiseAmnt)
- doffz = r.uniform(-noiseAmnt,noiseAmnt)
- dNoise = r.uniform(-noiseAmnt,noiseAmnt)# droop noise
- cvList1 = 1,2,3,4
- cvList2 = 4,3,2,1
- cvList = []
- if s1t[1] > s2t[1]:
- cvList = cvList1
- else:
- cvList = cvList2
- print dNoise,doffx,doffz
- move(ccR[0].cv[cvList[0]], doffx, -droop+droop/2+dNoise, doffz,r=1,os=1)
- move(ccR[0].cv[cvList[1]], doffx, -droop, doffz,r=1,os=1)
- move(ccR[0].cv[cvList[2]], doffx, -droop, doffz,r=1,os=1)
- move(ccR[0].cv[cvList[3]], doffx, -droop+droop/2+dNoise, doffz,r=1,os=1)
- if jnt and jnt2:
- crvBind = skinCluster(ccR[0],jnt,jnt2)
- wiggler(ccR,noiseAmnt)
- parent(cc,crvGrp)
- rl=1
- i+=1
- select(sl)
- elapsedChunk = (time.clock() - start)
- print "done, took:", elapsedChunk
Add Comment
Please, Sign In to add comment