Ejemplo n.º 1
0
 def extrudeTool(self):
     X = self.getSelection(
     )  # adds selection to a variable so we can deselect it later while still using it for the Dragger command.
     if self.getType(0) == 'face':
         cmds.polyExtrudeFacet(X,
                               constructionHistory=1,
                               keepFacesTogether=1)
         self.setAttributes(attrs=[(
             'Thickness',
             '.thickness'), ('Offset', '.offset'), (
                 'Division',
                 '.divisions'), ('Z Translate', '.localTranslateZ'
                                 ), ('Faces Together',
                                     '.keepFacesTogether')])
     elif self.getType(0) == 'edge':
         cmds.polyExtrudeEdge(X, constructionHistory=1, keepFacesTogether=1)
         self.setAttributes(attrs=[(
             'Thickness',
             '.thickness'), ('Offset', '.offset'), (
                 'Division',
                 '.divisions'), ('Z Translate', '.localTranslateZ')])
     else:
         pass
     #cmds.select( deselect = 1 ) # removes selection from the face initially extruded, to allow for rotation and translation of new extruded face
     self.Dragger(X, 'Extrude')
Ejemplo n.º 2
0
 def extrude_edge_uv(self):
     self.ex_edges = []
     sel = cmds.ls(sl=True)
     self.s_edges = common.conv_comp(sel, mode='edge')
     s_vtx = common.conv_comp(sel, mode='vtx')
     #self.saw_uvs(mode='pre')#事前に押し出し対象のUVを縫い合わせておく
     self.marge_uvs(mode='pre')
     if not self.s_edges:
         return
     ev_dict, vec_dict, ev_uv_dict = self.make_edge_vtx_dict(self.s_edges)
     #print 'ev_dict :', ev_dict
     #print 'vec_dict :', vec_dict
     #押し出しを実行する
     cmds.polyExtrudeEdge(self.s_edges,
                          keepFacesTogether=True,
                          smoothingAngle=self.soft_angle.value(),
                          translate=[0, 0, 0])
     self.ex_edges = cmds.ls(sl=True)
     n_edges = common.conv_comp(self.ex_edges, mode='edge')
     n_faces = common.conv_comp(self.ex_edges, mode='face')
     self.n_uvs = common.conv_comp(n_faces, mode='uv')
     #print 'pre_move_uvs :', self.n_uvs
     #根本の位置合わせする
     new_vec_dict = {}
     for nuv in self.n_uvs[:]:
         vtx = common.conv_comp(nuv, mode='vtx')[0]
         edge = common.conv_comp(nuv, mode='edge')[0]
         if edge + ' ' + vtx in ev_dict.keys():
             uv_pos = ev_dict[edge + ' ' + vtx]
             #print 'get_uv_pos', nuv, uv_pos
             cmds.polyEditUV(nuv, u=uv_pos[0], v=uv_pos[1], r=False)
             self.n_uvs.remove(nuv)
             key_uv = ev_uv_dict[edge + ' ' + vtx]
             new_vec_dict[nuv] = vec_dict[key_uv]
     #print 'post push uvs :', self.n_uvs
     #押し出し先を根本につけて押し出しベクトル辞書をつくる
     self.uv_vec_dict = {}
     self.base_pos_dict = {}
     for nuv in self.n_uvs:
         edges = common.conv_comp(nuv, mode='edge')
         face = common.conv_comp(nuv, mode='face')
         f_uvs = common.conv_comp(face, mode='uv')
         for edge in edges:
             if edge in n_edges:
                 continue
             #print 'get new edge :', edge
             e_uvs = common.conv_comp(edge, mode='uv')
             l_uvs = list(set(f_uvs) & set(e_uvs))
             #print 'new edge uvs :', l_uvs
             for uv in l_uvs:
                 if not uv in new_vec_dict.keys():
                     continue
                 uv_pos = cmds.polyEditUV(uv, query=True)
                 cmds.polyEditUV(nuv, u=uv_pos[0], v=uv_pos[1], r=False)
                 self.uv_vec_dict[nuv] = new_vec_dict[uv]
                 self.base_pos_dict[nuv] = uv_pos
                 self.saw_edges.append(edge)  #縫い合わせ用リストに入れておく
     self.push_out()
     cmds.setToolTo('moveSuperContext')
Ejemplo n.º 3
0
 def editGeometry(self, size = 12, divisions = 50, *args):
     selection = args
     if not len(args):
         selection = cmds.ls(sl = True)
     for sel in selection:
         if sel in self.curves:
             cmds.polyPlane(self.curves[sel]['shape'], e = True, h = size, w = size)
             cmds.polyExtrudeEdge(self.curves[sel]['extrudeNde'], e=True,divisions = divisions)
             plane = self.curves[sel]['geometry']
             self.createUv(mesh = plane)
     cmds.select(selection, r = True)
Ejemplo n.º 4
0
	def extrudeTool(self):
		X = self.getSelection() # adds selection to a variable so we can deselect it later while still using it for the Dragger command.
		if self.getType(0) == 'face':
			cmds.polyExtrudeFacet( X, constructionHistory = 1, keepFacesTogether = 1)
			self.setAttributes( attrs = [('Thickness', '.thickness'), ('Offset', '.offset'), ('Division', '.divisions'), ('Z Translate', '.localTranslateZ'), ('Faces Together', '.keepFacesTogether')] )
		elif self.getType(0) == 'edge':
			cmds.polyExtrudeEdge( X, constructionHistory = 1, keepFacesTogether = 1)
			self.setAttributes( attrs = [('Thickness', '.thickness'), ('Offset', '.offset'), ('Division', '.divisions'), ('Z Translate', '.localTranslateZ')] )
		else:
			pass
		#cmds.select( deselect = 1 ) # removes selection from the face initially extruded, to allow for rotation and translation of new extruded face
		self.Dragger( X , 'Extrude')
Ejemplo n.º 5
0
def createBaseMesh():
    ob = cmd.ls(sl=True)[0]
    if (cmd.nodeType(ob) == 'transform') and (cmd.attributeQuery(
            'name', node=ob, exists=True)):

        #initialize
        merge = True
        name = cmd.getAttr('%s.name' % ob)
        frames = cmd.getAttr('%s.count' % ob)
        ctlObj = cmd.getAttr('%s.myCtl' % ob)
        thresh = 0.015
        extrudeAmt = 0.2
        edgeAmt = 0.05
        newGp = cmd.group(em=True, w=True, n='%s_GEO_GP' % name)
        cmd.addAttr(newGp, ln='name', dt='string')
        cmd.setAttr("%s.name" % newGp, name, type='string')

        #create the new objects
        for i in range(1, frames + 1):
            cmd.setAttr('%s.frame' % ctlObj, i)
            newName = '%s_%02d_GEO' % (name, i)
            newOb = cmd.duplicate(ob, n=newName)[0]
            cmd.setAttr('%s.v' % newOb, 0)
            #insert a handler here to detect double faces or bad geo
            if merge:
                cmd.polyMergeVertex(newOb, ch=1, d=thresh)
            selectBorderEdges(newOb)
            cmd.polyExtrudeEdge(ch=1, d=2, lty=edgeAmt)
            cmd.polyExtrudeFacet(newOb, ch=1, kft=True, ltz=extrudeAmt, d=2)
            cmd.select(newOb)
            mel.eval(
                'polyCleanupArgList 4 { "0","1","1","0","1","0","0","0","0","1e-005","0","1e-005","0","1e-005","0","-1","0","0"}'
            )
            cmd.polySoftEdge(newOb, ch=1, a=180)
            cmd.parent(newOb, newGp)
            cmd.setKeyframe('%s.v' % newOb, t=[i - 1, i + 1], v=0)
            cmd.setKeyframe('%s.v' % newOb, t=i, v=1)
            for xyz in ['x', 'y', 'z']:
                cmd.setAttr('%s.t%s' % (newOb, xyz), 0)
            cmd.delete(newOb, ch=True)
            shit = cmd.ls('*%s*' % newName, io=True, type='mesh')
            if shit:
                cmd.delete(shit)

            #check for non-manifold and fix
            if (cmds.polyInfo(newOb, nme=True, nmv=True, nue=True, nuv=True)):
                print('%s had nonmanifold Geo, attempting fix...' % newOb)
                mel.eval(
                    'polyCleanupArgList 4 { "0","1","0","0","0","0","0","0","0","1e-005","0","1e-005","0","1e-005","0","1","0","0" }'
                )
    else:
        cmd.error('You must select only one mesh object')
Ejemplo n.º 6
0
def GenerateCurve(selectedIn):
    curveName = selectedIn[1:]
    cv0 = cmds.getAttr(curveName + '.cv[0]')

    cmds.polyPlane(n='CurvePlane', sx=1, sy=1, w=1, h=1)
    cmds.move(cv0[0][0] - .5,
              cv0[0][1],
              cv0[0][2],
              'CurvePlane',
              absolute=True)

    cmds.polyExtrudeEdge('CurvePlane.e[2]', kft=True, d=100, inc=curveName)
    # Edges are extruded then scaled together
    cmds.delete('CurvePlane.f[0]')

    WriteCurveJSON('C:/Users/jacks/Documents/Ada_Assets/' + curveName +
                   '.json')

    cmds.delete()
Ejemplo n.º 7
0
	def face(self, angle):
		self.poly=cmds.ls(selection=1)[0]
		edge= cmds.polyListComponentConversion (self.poly, fromFace=1, toEdge=1)
		flattenE= cmds.ls(selection=1, flatten=1)
		r=random.choice(flattenE)
		if (self.poly==[ ]):
			pass
		else:
	
			angleVariableChange=cmds.polyExtrudeEdge(r,keepFacesTogether=False, localTranslate=(angle[0],angle[1],angle[2]), localScale=(angle[0],angle[1],angle[2]), rotate=(angle[0],angle[1],angle[2]) )
			return(edge)
Ejemplo n.º 8
0
 def createGeometry(self, size = 12, divisions = 50):
     for curv, val in self.curves.iteritems():
         plane, shape = cmds.polyPlane (h = size, w = size, sh = 1, sw = 1)
         print 'pplane is ',plane
         polyPlane = cmds.listConnections(shape, d = True, type='polyPlane')
         #orient plane
         vectorX = om.MVector(val['vectorX'][0], val['vectorX'][1], val['vectorX'][2])
         vectorX.normalize()
         vectorY = om.MVector(0,1,0)
         vectorZ = vectorX ^ vectorY
         cmds.xform(plane, ws=True, m =(vectorX.x,vectorX.y,vectorX.z,0, vectorY.x, vectorY.y, vectorY.z, 0, vectorZ.x, vectorZ.y, vectorZ.z,0, val['position'][0], val['position'][1], val['position'][2], 1))
         #extrude
         extrudeNde = cmds.polyExtrudeEdge('%s.e[2]' %plane, inputCurve = curv, divisions = divisions)[0]
         print extrudeNde
         val['geometry'] = plane
         val ['shape'] = shape
         val['extrudeNde'] = extrudeNde
         val['polyPlane'] = polyPlane
         self.curves[curv] = val
         self.createUv(mesh = plane)
     cmds.select(self.curves.keys(), r=True)
Ejemplo n.º 9
0
# หนามด้านล่าง
craft_lang = mc.polySphere(r=r, sx=64, sy=32, n='craft_lang')[0]
mc.hyperShade(a=phiu_nam)
mc.scale(1.5, 1.5, 1.5, [
    craft_lang + '.vtx[%d]' % (i + j - (i / 128) % 2)
    for i in range(1, 960, 128) for j in range(0, 64, 2)
])
mc.delete(craft_lang + '.f[960:1919]', craft_lang + '.f[1984:2047]')

# ส่วนด้านบน
craft_bon = mc.polySphere(r=10, sx=24, sy=4, n='craft_bon')[0]
mc.delete(craft_bon + '.f[24:47]', craft_bon + '.f[72:95]')
nf1 = mc.polyEvaluate(craft_bon, f=1)  # จำนวนหน้าส่วนที่จะลบตอนหลัง
mc.select(craft_bon + '.e[24:47]')
# เนื้อไม้
mc.polyExtrudeEdge(sx=0.9, sz=0.9)
mc.polyExtrudeEdge(ty=-r * 0.1)
mc.polyExtrudeEdge(sx=5. / 9, sz=5. / 9)
nf2 = mc.polyEvaluate(craft_bon, f=1)
# เทียนแดง
mc.polyExtrudeEdge(ty=r)
mc.polyExtrudeEdge(sx=0.8, sz=0.8)
mc.polyExtrudeEdge(ty=-r * 0.1)
nf3 = mc.polyEvaluate(craft_bon, f=1)
# ไส้เทียน
mc.polyExtrudeEdge(sx=0.15, sz=0.15)
sl = mc.ls(sl=1)
kliao = mc.duplicate(craft_bon, n='kliao')[0]
mc.select(sl)
for i in range(15):
    mc.polyExtrudeEdge(ty=r * 0.05,
Ejemplo n.º 10
0
def completeAntenna(num_jnt,num_ctr,hairSystem,sliding,length,twist):
  lenComplist = len(completeList)
  for i in range(lenComplist):
     del completeList[0]
  num_crv = len(MakeAtna_returnV) 
  method = ''
  createJntLst = []
    
  #------------------ Get Hair System Type
  hairSys_on = 0
  if hairSystem == 'New':
      hairSys_on = 1
  elif hairSystem == '':
      hairSys_on = 0
  else:
      hairSys_on = -1
      
  for i in cmds.ls(type='hairSystem'):
      if hairSystem == i or hairSystem == cmds.listRelatives(i,p=1)[0]:
          hairSys_on = 2


  if hairSys_on == -1:
    cmds.warning("'%s'는 존제하지 않는 Object입니다." % hairSystem)
  else:      
    
    for i in MakeAtna_returnV: #------choose method
        if len(i) == 6:
            cmds.delete(i[5])#----delete expression
            method = 'avp'
        else:
            method = 'cv'

    getPosShp = 0.0
    if method == 'avp':
       print MakeAtna_returnV[0][0][1], len(MakeAtna_returnV[0][1])
       getPosShp = cmds.getAttr(MakeAtna_returnV[0][0][1]+'.posShp')/len(MakeAtna_returnV[0][1])
       print getPosShp
    
    for i in MakeAtna_returnV:
        aim = i[4][0]
        up = i[4][1]
        mainName = i[1][0].partition('_')[0]
        #--------Set controler joint initial setting 
        for j in i[1]:   
            cmds.setAttr(j+'.tx',l=0)
            cmds.setAttr(j+'.ty',l=0)
            cmds.setAttr(j+'.tz',l=0)
            cmds.setAttr(j+'.rx',l=0)
            cmds.setAttr(j+'.ry',l=0)
            cmds.setAttr(j+'.rz',l=0)
            cmds.setAttr(j+'.dla',0)

            if method == 'avp':
                cmds.deleteAttr(j,at='ip')
            cmds.parent(j,w=1)
            
        for j in i[2]: 
            cmds.delete(j)  #----------------- Delete null group
        
        #----------Set constrainted orient to current orientation    
        for j in range(len(i[1])-1): 
            tempLoc = cmds.spaceLocator()[0]
            tempOri = cmds.orientConstraint(i[1][j],tempLoc)
            cmds.delete(tempOri)
            tempAim = cmds.aimConstraint(i[1][j+1],i[1][j],aim=aim,u=up,wu=up,wut='objectrotation',wuo=tempLoc)
            cmds.delete(tempAim,tempLoc)
            cmds.parent(i[1][j+1],i[1][j])
        
        ##-------- BindCurve And JointCurve Set
        attachJointCurve ='' 
        bindCurve =''
        posShp = 0.0
        conJoint = i[1]
        if method == 'avp':
            dupleObj = cmds.duplicate(i[0][1],n=mainName+'_bindCurve')[0]
            cmds.deleteAttr(dupleObj+'.posShp')
            posShp = cmds.getAttr(i[0][1]+'.posShp')
            attachJointCurve = cmds.rebuildCurve( dupleObj, n=mainName+'_jntAtCurve', ch=1, rpo=0, rt=0 ,end=0, kr=0, kcp=1, kep=0, kt=0, s=0, d=3, tol=0.01 )[0]
            cmds.delete(i[0][0],i[0][1],i[0][2])
            bindCurve = dupleObj
        else:
            dupleObj = cmds.duplicate(i[0][0],n=mainName+'_bindCurve')[0]
            spans = cmds.getAttr(cmds.listRelatives(dupleObj,s=1)[0]+'.spans')
            attachJointCurve = cmds.rebuildCurve( dupleObj, n=mainName+'_jntAtCurve', ch=1, rpo=0, rt=0 ,end=1, kr=0, kcp=0, kep=0, kt=0,s=spans*3, tol=0.01 )[0]
            cmds.delete(i[0][1],i[0][0])
            bindCurve = dupleObj
            
        #--------------- Create Normal Base for Normal Constraint       
        normalBase = cmds.polyPlane(w=1,h=1,sx=1,sy=1,n=mainName+'_normalBase')[0]
        for j in range(1,len(i[1])-1):
            cmds.polyExtrudeEdge(normalBase+'.e['+str(j*3)+']',lty=1)
        cmds.DeleteHistory(normalBase)
        
        def inr(a):
            return (a+1)%3
        def inrb(a):
            return (a+2)%3
        
        axisElse = [0,0,0]  #--------- Get Third Axis
        
        for j in range(3):
            if aim[j] == 1 and up[inr(j)] == 1:
                axisElse[inrb(j)] = 1;
            if aim[j] == 1 and up[inr(j)] == 0:
                axisElse[inr(j)] = -1;
            if aim[j] == -1 and up[inr(j)] == 0:
                axisElse[inr(j)] = 1;
            if aim[j] == -1 and up[inr(j)] == 1:
                axisElse[inrb(j)] = -1;
            print j,inr(j),inrb(j)
        print 'aim     :',aim
        print 'up      :',up
        print 'axisElse:',axisElse

        for j in range(len(i[1])):
            tmLoc = cmds.spaceLocator()
            cmds.parent(tmLoc,conJoint[j])
            cmds.move(axisElse[0],axisElse[1],axisElse[2],tmLoc,ls=1)
            locPos = cmds.xform(tmLoc,q=1,ws=1,piv=1)
            cmds.move(locPos[0],locPos[1],locPos[2],normalBase+'.vtx['+str(j*2+1)+']',ws=1)
            cmds.move(-axisElse[0],-axisElse[1],-axisElse[2],tmLoc,ls=1)
            locPos = cmds.xform(tmLoc,q=1,ws=1,piv=1)
            cmds.move(locPos[0],locPos[1],locPos[2],normalBase+'.vtx['+str(j*2)+']',ws=1)
            cmds.delete(tmLoc)
       
        bindObj = []
        bindObj.append(conJoint[0])
        bindObj.append(normalBase)
        cmds.skinCluster(bindObj)
        bindObj = []
        bindObj.append(conJoint[0])
        bindObj.append(bindCurve)
        cmds.skinCluster(bindObj)
        cmds.setAttr(bindCurve+'.v', 0)
        
        cmds.select(attachJointCurve)
        startHair = ''
        currentHair = ''
        restHair = ''
        if hairSys_on != 0:
          if hairSys_on == 1:
            beforeHair = cmds.ls(type='hairSystem')      
            createHair('')
            afterHair = cmds.ls(type='hairSystem')
            for k in beforeHair:
                afterHair.remove(k)
            hairSystem = afterHair[0]
            hairSys_on = 2
          elif hairSys_on == 2:
            createHair(hairSystem)
          cmds.select(attachJointCurve); import maya.mel as mel ;mel.eval('setSelectedHairCurves "start" "rest"')
          cmds.select(attachJointCurve); mel.eval('convertHairSelection "currentCurves"'); currentHair = cmds.ls(sl=1)[0]
          mel.eval('convertHairSelection "restCurves"'); restHair = cmds.ls(sl=1)[0]
          mel.eval('convertHairSelection "startCurves"'); startHair = cmds.ls(sl=1)[0]; attachJointCurve = currentHair
          mel.eval('displayHairCurves "all" 1'); blendShape1 = cmds.blendShape(startHair,restHair,tc=0)[0]
          cmds.setAttr(blendShape1+'.'+startHair,1)
          
        #---------------- Create Current Joint    
        
        jntPntL = []; jntPntChildL = []; subLocL = []; jntL = []; jntGL = []
        infoL = []; pntInfoL = []; pntRotL = []
        if hairSys_on == 0:
          for j in range(num_jnt):
            cmds.select(d=1)
            jnt = cmds.joint(rad = 2, n=mainName+'_cuJoint'+str(j))
            cmds.setAttr(jnt+'.dla',1)
            cmds.addAttr(jnt,ln='infoPos',sn='ip',at='double',min=0,max=num_jnt-1,dv=j)
            cmds.setAttr(jnt+'.ip',e=1,k=1)
            jntG = cmds.group(jnt,n=jnt+'_p')
            info = cmds.createNode('pointOnCurveInfo', n=mainName+'_info'+str(j))
            subLoc = cmds.spaceLocator(n=mainName+'_subLoc'+str(j))[0]
            cmds.scale(.1,.1,.1,subLoc)
            subLocL.append(subLoc); jntL.append(jnt); jntGL.append(jntG); infoL.append(info)

            cmds.connectAttr(attachJointCurve+'.worldSpace[0]', info+'.inputCurve')
            cmds.pointConstraint(subLoc,jntG)
            normalCon = cmds.normalConstraint(normalBase,jntG,aim=up,u=aim,wut='vector')[0]
            cmds.connectAttr(info+'.tangent',normalCon+'.wu')
            cmds.connectAttr(info+'.position',subLoc+'.translate')
            prRt = 0; sRt = 0; editP = 0
            if posShp >= 0:
                sRt = posShp/num_jnt + 1
                editP = (j/float(num_jnt-1))**sRt
            else:
                sRt = 1-posShp/num_jnt
                editP = 1-abs(j/float(num_jnt-1)-1)**sRt
            import maya.mel as mel
            prRt = mel.eval( 'linstep(0,1,%s)' % editP ) * (num_jnt-1)
            cmds.setAttr(info+'.parameter', prRt/(num_jnt-1))
        else:
          for j in range(num_jnt):
            cmds.select(d=1)
            jnt = cmds.joint(rad = 2, n=mainName+'_cuJoint'+str(j))
            cmds.setAttr(jnt+'.dla',1)
            cmds.addAttr(jnt,ln='infoPos',sn='ip',at='double',min=0,max=num_jnt-1,dv=j)
            cmds.setAttr(jnt+'.ip',e=1,k=1)
            jntG = cmds.group(jnt,n=jnt+'_p')
            info = cmds.createNode('pointOnCurveInfo', n=mainName+'_info'+str(j))
            pntInfo = cmds.createNode('pointOnCurveInfo', n=mainName+'_pntInfo'+str(j))
            cmds.setAttr(info+'.top', 1)
            subLoc = cmds.spaceLocator(n=mainName+'_subLoc'+str(j))[0]; cmds.scale(.1,.1,.1,subLoc)
            jntPntChild = cmds.spaceLocator(n=mainName+'_pntChild'+str(j))[0]
            jntPnt = cmds.group(n=mainName+'_jntPnt'+str(j));
            pntRot= cmds.createNode('plusMinusAverage', n=mainName+'_pntRot'+str(j))
            cmds.connectAttr(jntPntChild+'.rotate', pntRot+'.input3D[0]')
            subLocL.append(subLoc); jntL.append(jnt); jntGL.append(jntG); infoL.append(info)
            jntPntChildL.append(jntPntChild); jntPntL.append(jntPnt); pntInfoL.append(pntInfo); pntRotL.append(pntRot)

            cmds.connectAttr(startHair+'.worldSpace[0]', pntInfo+'.inputCurve')
            cmds.connectAttr(attachJointCurve+'.worldSpace[0]', info+'.inputCurve')
            cmds.pointConstraint(subLoc,jntG)
            normalCon = cmds.normalConstraint(normalBase,jntPntChild,aim=up,u=aim,wut='vector')[0]
            cmds.connectAttr(pntInfo+'.tangent',normalCon+'.wu')
            cmds.connectAttr(info+'.position',subLoc+'.translate')
            cmds.connectAttr(pntInfo+'.position', jntPnt+'.translate')
            prRt = 0; sRt = 0; editP = 0
            if posShp >= 0:
                sRt = posShp/num_jnt + 1
                editP = (j/float(num_jnt-1))**sRt
            else:
                sRt = 1-posShp/num_jnt
                editP = 1-abs(j/float(num_jnt-1)-1)**sRt
            import maya.mel as mel
            prRt = mel.eval( 'linstep(0,1,%s)' % editP ) * (num_jnt-1)
            cmds.setAttr(info+'.parameter', prRt/(num_jnt-1))
            cmds.setAttr(pntInfo+'.parameter', prRt/(num_jnt-1))
            
          normalCon = cmds.normalConstraint(normalBase,jntGL[0],aim=up,u=aim,wut='vector')[0]
          jntPntNormalCon = cmds.normalConstraint(normalBase,jntPntL[0],aim=up,u=aim,wut='vector')[0]
          cmds.connectAttr(infoL[0]+'.tangent',normalCon+'.wu')
          cmds.connectAttr(pntInfoL[0]+'.tangent',jntPntNormalCon+'.wu')
          for j in range(1,num_jnt):
            cmds.tangentConstraint(attachJointCurve,jntGL[j],aim=aim,u=up,wu=up,wut='objectrotation',wuo=jntGL[j-1])
            cmds.tangentConstraint(startHair,jntPntL[j],aim=aim,u=up,wu=up,wut='objectrotation',wuo=jntPntL[j-1])
            
       
        if len(completeList) < len(jntL)*num_crv: completeList.extend(jntL) #------------- Out joint list
        
        #--------------- Grouping
        subLocG = cmds.group(subLocL,n=subLocL[0])
        deformGrp = cmds.group(attachJointCurve,bindCurve,normalBase,subLocG, n=mainName+'_deformGrp')
        cmds.setAttr(deformGrp+'.v', 0 )
        transformGrp = cmds.group(em=1, n=mainName+'_trGrp')
        parentCon = cmds.parentConstraint(conJoint[0],transformGrp )[0]
        cmds.delete(parentCon)
        cmds.parent(jntGL,conJoint[0],transformGrp)
          #------------ Grouping in hairSystem
        if hairSys_on != 0:
          print hairSystem
          jntPntG = cmds.group(jntPntL, n=mainName+'_jntPntG')
          cmds.parent(jntPntG,deformGrp)
        
        #-------------- Attribute Setting
        conJointFirst = conJoint[0]
        conJointSecond = conJoint[1]; cmds.setAttr(conJointSecond+'.template', 1)
        conJointFirst_sliding = conJointFirst + '.sliding'
        conJointFirst_length = conJointFirst + '.scale_length'
        
        if sliding == 1:
         cmds.addAttr(conJointFirst,ln='sliding',at='double')
         cmds.setAttr(conJointFirst_sliding,e=1,k=1)
        if length == 1:
         cmds.addAttr(conJointFirst,ln='scale_length',at='double',min=0,max=num_jnt,dv=num_jnt)
         cmds.setAttr(conJointFirst_length,e=1,k=1)
        
        #----------- Set Expression String   
        exString = 'float $ip[];\n\n'
        for k in range(num_jnt):
            exString += '$ip[%s] = %s/%s;\n' % (k, jntL[k]+'.infoPos',num_jnt-1)
        exString += '\n'
         
        if length == 1:
         exString += 'float $numJnt = %s;\n' % num_jnt
         exString += 'float $length = %s/%s;\n\n' % (conJointFirst_length, num_jnt)
        
        if sliding == 1:
         exString += 'float $ep[];\n'
         exString += 'float $sliding = %s;\n' % conJointFirst_sliding
         exString += 'float $sRate;\n\n'
         exString += 'if($sliding >= 0)\n{\n'
         exString += '$sRate=$sliding/%s+1;\n' % num_jnt
         for k in range(num_jnt):
             exString += '$ep[%s] = pow($ip[%s],$sRate);\n' % (k,k)
         exString += '}\nelse\n{\n'
         exString += '$sRate= 1 - $sliding/%s;\n' % num_jnt
         for k in range(num_jnt):
             exString += '$ep[%s] = 1-pow(1-$ip[%s],$sRate);\n' % (k,k)
         exString += '}\n\n'
         
        if length == 1 and sliding == 1:
         for k in range(num_jnt):
             exString += '%s.parameter = linstep(0,1,$ep[%s])*$length;\n' % (infoL[k], k)
        elif length == 1:
         for k in range(num_jnt):
             exString += '%s.parameter = $ip[%s]*$length;\n' % (infoL[k], k)
        elif sliding == 1:
         for k in range(num_jnt):
             exString += '%s.parameter = linstep(0,1,$ep[%s]);\n' % (infoL[k], k)
        else:
         for k in range(num_jnt):
             exString += '%s.parameter = $ip[%s];\n' % (infoL[k], k)
            
        cmds.expression(s=exString,n=mainName+'_ex') #--------- expression
        
        #-------------- Twist Attr Adding
        
        if hairSys_on != 0:
         if twist == 0:
           for j in range(num_jnt):
             cmds.connectAttr(pntRotL[j]+'.output3D', jntL[j]+'.jo')
             
        if twist == 1:
         cmds.addAttr(conJointFirst,ln='twist',at='double')
         cmds.setAttr(conJointFirst+'.twist',e=1,k=1)
         for j in range(num_jnt):
             cmds.addAttr(jntL[j],ln='twistDetail',at='double',dv=j/float(num_jnt-1)*10)
             cmds.setAttr(jntL[j]+'.twistDetail',e=1,k=1)
             twistMult = cmds.createNode('multiplyDivide',n= jntL[j]+'_twistMult')
             cmds.connectAttr(conJointFirst+'.twist', twistMult+'.input1X')
             cmds.connectAttr(jntL[j]+'.twistDetail', twistMult+'.input2X')
             rAxis = '.jo'
             if aim[0] == 1 or aim[0] == -1:rAxis += 'x'
             if aim[1] == 1 or aim[1] == -1:rAxis += 'y'
             if aim[2] == 1 or aim[2] == -1:rAxis += 'z'
             
             if hairSys_on == 0:
              cmds.connectAttr(twistMult+'.outputX', jntL[j]+rAxis)
             else:
              cmds.connectAttr(twistMult+'.outputX', pntRotL[j]+'.input3D[1].input3D%s' % (rAxis.replace('.jo','')) )
              cmds.connectAttr(pntRotL[j]+'.output3D', jntL[j]+'.jo')

        #-------------- Add Controler 
        ctrer = []; ctrGG = []; ctrSubLocG = []; getPosShp = ''
          
        curveSh = cmds.listRelatives(bindCurve,s=1)[0]
        exString_in =''
        for j in range(num_ctr):
            ctrer.append( cmds.circle(n=mainName+'_ctr'+str(j),normal=aim)[0] )
            cmds.addAttr( ctrer[j], ln='rollS', at='double', min=0,max=num_jnt,dv= num_jnt/2.0)
            cmds.setAttr( ctrer[j]+'.rollS', e=1,k=1)
            cmds.addAttr( ctrer[j], ln='rollE', at='double', min=0,max=num_jnt,dv=j*num_jnt/float(num_ctr))
            cmds.setAttr( ctrer[j]+'.rollE', e=1,k=1)
            ctrG = cmds.group( ctrer[j], n = mainName+'ctrG'+str(j) )
            info = cmds.createNode('pointOnCurveInfo', n=bindCurve+'_info'+str(j))
            cmds.setAttr(info+'.top',1)
            cmds.connectAttr( curveSh+'.worldSpace[0]', info+'.inputCurve')
            cmds.connectAttr( info+'.position', ctrG+'.translate')
            mult = cmds.createNode( 'multiplyDivide', n= mainName+'_ctr_posMult'+str(j) )
            cmds.connectAttr( ctrer[j]+'.rollE', mult+'.input1X')
            cmds.setAttr( mult+'.input2X', 1.0/len(conJoint) )
            cmds.connectAttr( mult+'.outputX',info+'.parameter' )
            subLoc = cmds.spaceLocator( n=mainName+'_ctr_subLoc'+str(j) )[0]
            cmds.connectAttr( info+'.position', subLoc+'.translate' )
            cmds.pointConstraint( subLoc, ctrG )
            normalCon = cmds.normalConstraint( normalBase,ctrG,aim=up,u=aim,wut='vector' )[0]
            cmds.connectAttr( info+'.tangent', normalCon+'.wu')
            
            ctrGG.append(ctrG); ctrSubLocG.append(subLoc)
        if len(ctrGG) != 0: cmds.parent(ctrGG,transformGrp)
        if len(ctrSubLocG) != 0: cmds.parent(ctrSubLocG,deformGrp)
        
        exString  = ''
        rotDirection = ''
        
        for j in range(3):
            if aim[j] == -1:
                rotDirection = '-1*'
            
        for j in range(len(ctrer)):
            exString += 'float $rollE%s = %s.rollE;\n' % (j, ctrer[j])
            exString += 'float $rollS%s = %s.rollS + $rollE%s;\n' % (j, ctrer[j], j)
            exString += 'int $irolE%s = $rollE%s;\n' % (j,j)
            exString += 'int $irolS%s = $rollS%s;\n' % (j,j)
            exString += 'float $rolev%s = $rollE%s - $irolE%s;\n' % (j,j,j)
            exString += 'float $rolsv%s = $rollS%s - $irolS%s;\n\n' % (j,j,j)
            exString += 'float $rx%s = %s%s.rotateX;\n' % (j, rotDirection, ctrer[j])
            exString += 'float $ry%s = %s%s.rotateY;\n' % (j, rotDirection, ctrer[j])
            exString += 'float $rz%s = %s%s.rotateZ;\n\n' % (j, rotDirection, ctrer[j])
            exString += 'float $outRate%s[];\n\n' % j
            exString += 'int $num_jnt%s = %s;\n\n' % (j,len(conJoint))
            exString += 'for($i = 0; $i < $num_jnt%s; $i++)\n{\n' % j
            exString += ' if($rollE%s > $i)\n   $outRate%s[$i] = 0;' % (j,j)
            exString += ' if($rollE%s > $i && $rollE%s < $i+1)\n   $outRate%s[$i] = 1-$rolev%s;\n' % (j,j,j,j)
            exString += ' if($rollE%s <= $i)\n   $outRate%s[$i] = 1;\n\n' % (j,j)
            exString += ' if($rollS%s > $i)\n   $outRate%s[$i] *= 1;\n' % (j,j)
            exString += ' if($rollS%s > $i && $rollS%s < $i+1)\n   $outRate%s[$i] *= $rolsv%s;\n' % (j,j,j,j)
            exString += ' if($rollS%s <= $i)\n   $outRate%s[$i] *= 0;\n}\n\n' % (j,j)
        
        rotList = ['rx','ry','rz']
        
        for rot in rotList:
          for j in range(len(conJoint)):
            ra = rot.replace('r','ra')
            exString += '%s.%s = ' % (conJoint[j],ra)
            for k in range(len(ctrer)):
              if k == len(ctrer)-1:
               exString += '%s*$outRate%s[%s]*$%s%s;\n' % (aim[0]+aim[1]+aim[2],k,j,rot,k)
              else:
               exString += '%s*$outRate%s[%s]*$%s%s+' % (aim[0]+aim[1]+aim[2],k,j,rot,k)
          exString+= '\n'
        
        if len(ctrer) != 0: cmds.expression(s=exString, name = mainName+'_ctrEx')
  cmds.select(cl=1)
Ejemplo n.º 11
0
def polyExtrudeEdge(*args, **kwargs):
    res = cmds.polyExtrudeEdge(*args, **kwargs)
    if not kwargs.get('query', kwargs.get('q', False)):
        res = _factories.maybeConvert(res, _general.PyNode)
    return res