예제 #1
0
def B_BtoC(*args):
    
    getSelect=mc.ls(sl=True)
    
    for each in getSelect:
        #mc.select(each)        
        #mc.ConvertSelectionToEdgePerimeter()
        #sel = mc.ls(sl= True)
        #selA = mc.select(sel[1])
        #mc.SelectEdgeLoopSp()
        #mc.CreateCluster()
        #mc.rename("ClusterTps")
        #selClu = mc.ls(sl= True)
        mc.select(each)        
        mc.ConvertSelectionToEdgePerimeter()
        mc.ConvertSelectionToFaces()
        mc.ConvertSelectionToContainedEdges()
        sel = mc.ls(sl= True)
        selO = mc.ls(os= True)
        selA = mc.select(selO[1])
        mc.SelectEdgeLoopSp()
        mc.polyToCurve(form= 2,degree= 1,conformToSmoothMeshPreview= 0)      
        mc.CenterPivot()
        mc.DeleteHistory()
        mc.rename("Curve_0")
        selCurv = mc.ls(sl= True)
        posX = mc.getAttr(selCurv[0]+".controlPoints[0].xValue")
        posY = mc.getAttr(selCurv[0]+".controlPoints[0].yValue")
        posZ = mc.getAttr(selCurv[0]+".controlPoints[0].zValue")
        mc.move(posX, posY, posZ, selCurv[0] + ".scalePivot", selCurv[0] + ".rotatePivot", absolute=True)
예제 #2
0
def preparecurve(crv, crvtrm, frac):
    cmds.polyToCurve(f=3, dg=3, n='tmpcrv')
    cmds.duplicate('tmpcrv', n=crvtrm)
    cmds.delete('tmpcrv')
    cmds.rebuildCurve(crv,
                      s=frac,
                      kr=2,
                      d=3,
                      tol=0.01,
                      rt=0,
                      kep=1,
                      kt=0,
                      kcp=0,
                      end=1)
예제 #3
0
def edgeLoopCrv(meshEdgeList,rebuild=False,rebuildSpans=0,form=2,keepHistory=True,prefix=''):
	'''
	Generate a curve from a mesh edge loop.
	@param meshEdgeList: List of mesh edges to generate curve from
	@type meshEdgeList: list
	@param rebuild: Rebuild curve to degree 3
	@type rebuild: bool
	@param rebuildSpans: Number of spans to rebuild the resulting curve to
	@type rebuildSpans: int
	@param form: Form of the resulting curve. 0 = Open, 1 = Periodic, 2 = Best Guess.
	@type form: str
	@param keepHistory: Maintain construction history
	@type keepHistory: bool
	@param prefix: Name prefix for newly created nodes
	@type prefix: str
	'''
	# Check edge list
	if not meshEdgeList:
		raise Exception('Invalid mesh edge list provided!!')
	meshEdgeList = mc.ls(meshEdgeList,fl=True)
	# Check prefix
	if not prefix: prefix = glTools.utils.stringUtils.stripSuffix(meshEdgeList[0].split('.')[0])
	# Convert edge selection to nurbs curve
	crvDegree = 1
	if rebuild: crvDegree = 3
	curve = mc.polyToCurve(ch=keepHistory,form=form,degree=crvDegree)[0]
	# Rebuild as degree 3
	if rebuild and rebuildSpans:
		curve = mc.rebuildCurve(curve,ch=keepHistory,rpo=1,rt=0,end=1,kr=0,kcp=1,kep=1,kt=1,s=rebuildSpans,d=3,tol=0.01)[0]
	# Rename curve
	curve = mc.rename(curve,prefix+'_curve')
	
	# Return result
	return curve
예제 #4
0
파일: mario_mel.py 프로젝트: rkadich/Mario
def make_curve():
	new_curve = cmds.polyToCurve(degree=1, form=2, conformToSmoothMeshPreview=1)[0]
	spans =  num_spans(new_curve) *2
	cmds.rebuildCurve(new_curve, rt=0, ch=1, end=1, d=3, kr=2, s=spans, kcp=0, tol=0.01, kt=0, rpo=1, kep=1)
	first_cv = new_curve + '.cv[0]'
	cmds.move(0.0001, 0.0001, 0.0001, first_cv ,r=True, )
	return new_curve
예제 #5
0
def buildEdgeCurves(edges,name,color=None):
	'''
	Build poly edge curves.
	Group, name and color resulting curves.
	@param edges: List of poly edges to extract as curves.
	@type edges: str
	@param name: Curve and group name prefix.
	@type name: str
	@param color: Color to apply to the edge curve (group).
	@type color: int or str or None
	'''
	# Get Edges
	edges = mc.filterExpand(ex=True,sm=32) # Poly Edges
	if not edges: raise Exception('Invalid or empty edge list!')
	
	# Get Master Group
	masterGrp = buildMasterCurveGroup('edgeCurveGroup')
	
	# Get Curve Group
	curveGrp = buildCurveGroup(name,color)
	try: mc.parent(curveGrp,masterGrp)
	except: pass
	
	# Build Edge Curves
	crvList = []
	for edge in edges:
		crv = mc.polyToCurve(edge,form=2,degree=1)[0]
		for at in 'trs': mc.setAttr(crv+'.'+at,l=True,cb=False)
		mc.parent(crv,curveGrp)
	
	# Return Result
	return curveGrp
예제 #6
0
 def dpCreateCurveFromEdge(self, zipperId, *args):
     """ Create curve from selected polygon edges.
     """
     self.dpGetCurveDirection()
     # declaring names:
     thisName = self.firstName
     if zipperId == "c115_second":
         thisName = self.secondName
     curveName = self.zipperName + "_" + thisName + "_Crv"
     pecName = self.zipperName + "_" + thisName + "_PEC"
     # get selected edges:
     edgeList = cmds.ls(selection=True, flatten=True)
     if not edgeList == None and not edgeList == [] and not edgeList == "":
         # delete old curve:
         self.dpDeleteOldCurve(zipperId)
         # create curve:
         baseCurve = cmds.polyToCurve(name=curveName,
                                      form=2,
                                      degree=3,
                                      conformToSmoothMeshPreview=0)[0]
         # rename polyEdgeToCurve node:
         cmds.rename(
             cmds.listConnections(baseCurve + ".create")[0], pecName)
         # add attributes:
         cmds.addAttr(baseCurve, longName=ZIPPER_ATTR, attributeType='bool')
         cmds.addAttr(baseCurve, longName=ZIPPER_ID, dataType='string')
         cmds.setAttr(baseCurve + "." + ZIPPER_ATTR, 1)
         cmds.setAttr(baseCurve + "." + ZIPPER_ID, zipperId, type="string")
         # load curve data:
         self.dpLoadData(baseCurve)
     else:
         mel.eval('warning \"' +
                  self.langDic[self.langName]['i188_selectEdges'] + '\";')
예제 #7
0
파일: mesh.py 프로젝트: auqeyjf/glTools
def edgeLoopsToCurve(edgeList,form=2,degree=1):
	'''
	Generate edge loop curves from the specified list of edges.
	@param edgeList: The list of mesh edges to generate edge loop curves from.
	@type edgeList: list
	@param form: NURBS curve form. 0 = Periodic, 1 = Open, 2 = Best Guess.
	@type form: str
	@param degree: NURBS curve degree.
	@type degree: str
	'''
	# Filter/Check Edge List
	edgeList = mc.filterExpand(edgeList,ex=True,sm=32)
	if not edgeList: raise Exception('Invalid edge list!')
	
	# For Each Edge
	edgeCurveList = []
	for edge in edgeList:
		
		# Get Mesh
		edgeId = glTools.utils.component.index(edge)
		meshShape = mc.ls(edge,o=True)[0]
		mesh = mc.listRelatives(meshShape,p=True)[0]
		prefix = mesh.split(':')[-1]
		
		# To Edge Loop
		mc.polySelect(mesh,edgeLoop=edgeId)
		
		# Edge Loop to Curve
		edgeCurve = mc.polyToCurve(ch=False,form=form,degree=degree)[0]
		
		# Append List
		edgeCurveList.append(edgeCurve)
	
	# Return Result
	return edgeCurveList
예제 #8
0
def createCurveToEdgeLoop( edge ):

    cmds.select( edge )
    cmds.SelectEdgeLoopSp()
    curve = cmds.polyToCurve( form=0, degree=3 )[0]
    
    return curve
예제 #9
0
    def run(self,*args):

        name = mc.textFieldGrp(self.name, q=True, tx=True)
        joint = mc.intSliderGrp(self.joint, q=True, v=True)
        obj = mc.ls(sl=True, o=True)

        if name == '':
            print 'ERROR!!'
            return

        for i in obj:
            mc.select(i)
            if mc.objectType(i) == 'mesh':
                mc.hilite(i)
                curves = mc.polyToCurve(usm=False, f=2, dg=1)
            else:
                curves = mc.duplicate(rr=True)
            if mc.checkBoxGrp(self.reverse, q=True, v1=True):
                mc.reverseCurve()
            
            joints = []
            for j in range(joint):
                mc.select(cl=True)
                joints.append(mc.joint(n=name))
            
            mc.select(mc.ls(joints, curves,  tr=True))
            apg.positionAlongCurve()

            for j in range(joint - 1):
                mc.parent(joints[j + 1], joints[j])
                mc.joint(joints[j], e=True, zso=True, oj='xyz', sao='yup')
                if j == joint - 2:
                    mc.rename(joints[j + 1], name + '_end')
            mc.delete(curves)
        mc.select(cl=True)
예제 #10
0
def edgeLoopsToCurve(edgeList,form=2,degree=1):
	'''
	Generate edge loop curves from the specified list of edges.
	@param edgeList: The list of mesh edges to generate edge loop curves from.
	@type edgeList: list
	@param form: NURBS curve form. 0 = Periodic, 1 = Open, 2 = Best Guess.
	@type form: str
	@param degree: NURBS curve degree.
	@type degree: str
	'''
	# Filter/Check Edge List
	edgeList = mc.filterExpand(edgeList,ex=True,sm=32)
	if not edgeList: raise Exception('Invalid edge list!')

	# For Each Edge
	edgeCurveList = []
	for edge in edgeList:

		# Get Mesh
		edgeId = glTools.utils.component.index(edge)
		meshShape = mc.ls(edge,o=True)[0]
		mesh = mc.listRelatives(meshShape,p=True)[0]
		prefix = mesh.split(':')[-1]

		# To Edge Loop
		mc.polySelect(mesh,edgeLoop=edgeId)

		# Edge Loop to Curve
		edgeCurve = mc.polyToCurve(ch=False,form=form,degree=degree)[0]

		# Append List
		edgeCurveList.append(edgeCurve)

	# Return Result
	return edgeCurveList
예제 #11
0
def buildEdgeCurves(edges, name, color=None):
    """
    Build poly edge curves.
    Group, name and color resulting curves.
    @param edges: List of poly edges to extract as curves.
    @type edges: str
    @param name: Curve and group name prefix.
    @type name: str
    @param color: Color to apply to the edge curve (group).
    @type color: int or str or None
    """
    # Get Edges
    edges = cmds.filterExpand(ex=True, sm=32)  # Poly Edges
    if not edges: raise Exception('Invalid or empty edge list!')

    # Get Master Group
    masterGrp = buildMasterCurveGroup('edgeCurveGroup')

    # Get Curve Group
    curveGrp = buildCurveGroup(name, color)
    try:
        cmds.parent(curveGrp, masterGrp)
    except:
        pass

    # Build Edge Curves
    crvList = []
    for edge in edges:
        crv = cmds.polyToCurve(edge, form=2, degree=1)[0]
        for at in 'trs':
            cmds.setAttr(crv + '.' + at, l=True, cb=False)
        cmds.parent(crv, curveGrp)

    # Return Result
    return curveGrp
예제 #12
0
def extractEdgeCurves(edgeList, form=2, degree=1, keepHistory=True):
    """
    Extract mesh edges as nurbs curves.
    @param edgeList: Geometry to get shading group from
    @type edgeList: list
    @param form: Curve form. 0=Open, 1=Periodic, 2=Best Guess
    @type form: int
    @param degree: Curve degree
    @type degree: int
    @param keepHistory: Maintain polyToCurve construction nodes
    @type keepHistory: bool
    """
    # Check Edge List
    if not edgeList:
        raise Exception('Invalid or empty edge list! Unable to extract edge curves...')

    # Partition Connected Edges
    connectedEdges = getConnectedEdges(edgeList)

    # Get Mesh from Edges
    mesh = cmds.ls(edgeList, o=True)[0]

    # Extract Edge Curves
    crvList = []
    nodeList = []
    for connectedEdgeList in connectedEdges:
        edgeLine = [mesh + '.e[' + str(i) + ']' for i in connectedEdgeList]
        cmds.select(edgeLine)
        polyToCurve = cmds.polyToCurve(form=form, degree=degree, ch=keepHistory)
        crvList.append(polyToCurve[0])
        if keepHistory: nodeList.append(polyToCurve[1])

    # Return Result
    cmds.select(crvList)
    return crvList
예제 #13
0
def createNewCurveShapes(obj):
    newCurves = []
    d = findAllShapes(obj)
    for one in d:
        loc = []
        borderEdges = {}
        borderEdges = set()
        edges = cmd.polyListComponentConversion(d[one], fv=True, te=True)
        cmd.select(edges)
        mel.eval('polyConvertToShellBorder')
        borders = cmd.ls(sl=True, fl=True)
        for b in borders:
            borderEdges.add(b)
        h = 0
        while len(borderEdges) > 0:
            if h > 100:
                break
            start = (borderEdges.pop())
            borderEdges.add(start)
            cmd.select(start)
            firstEdge = int(start[start.find('[') + 1:start.find(']')])
            cmd.polySelect(obj, eb=firstEdge)
            borderEdge = cmd.ls(sl=True, fl=True)
            newCurve = cmd.polyToCurve(form=1, degree=1, ch=False)[0]
            newCurves.append(newCurve)
            for this in borderEdge:
                borderEdges.remove(this)
            h += 1
    return newCurves
예제 #14
0
def edgeLoopCrv(meshEdgeList,
                rebuild=False,
                rebuildSpans=0,
                form=2,
                keepHistory=True,
                prefix=''):
    '''
	INPUT:
	meshEdgeList (TIPO: list, DESCROPCION: edges seleccionados)
	rebuild (TIPO: bool, DESCROPCION: rebuild de la curva)
	rebuildSpans (TIPO: int, DESCROPCION: rebuild cantidad de spans)
	form (TIPO: int, DESCROPCION: cantidad de suavisado)
	keepHistory (TIPO: bool, DESCROPCION: keepHistory colapce)
	prefix (TIPO: string, DESCROPCION: nombre de la curva )
	OUPUT:
	curve (TIPO: string, DESCROPCION: nombre de la curva )
	EJEMPLO:
	Crear curva segun edge con joints
	tambien podras aderir algun modificador.

	seleccion=cmds.ls(sl=1,o=True)
	seleccionEdge=cmds.ls(sl=1)
	cosas={}
	crv=ere.edgeLoopCrv(seleccionEdge)
	cosas[0]=ere.creaLocWithJointsInPositionVertexOfCurve([crv],step=2)
	ere.aimConsecutiveList(cosas[0][0],'coco')
	lowCRV=ere.crearLowCrvControl([crv])

	ere.nonlinearDeformer([lowCRV[0]],'twist',rotate=(0,0,90))
	ere.nonlinearDeformer([lowCRV[0]],'sine',rotate=(0,0,90))
	'''
    # Nombro igual al objeto
    if prefix == '': prefix = str(meshEdgeList[0]).split('.')[0]
    #obtengo los edge seleccionados
    meshEdgeList = cmds.ls(meshEdgeList, fl=True)
    rebuldSpans = len(meshEdgeList)
    # Convert edge selection to nurbs curve
    crvDegree = 1
    if rebuild:
        crvDegree = 3
    curve = cmds.polyToCurve(ch=keepHistory, form=form, degree=crvDegree)[0]
    # Rebuild as degree 3
    if rebuild and rebuildSpans:
        curve = cmds.rebuildCurve(curve,
                                  ch=keepHistory,
                                  rpo=1,
                                  rt=0,
                                  end=1,
                                  kr=0,
                                  kcp=1,
                                  kep=1,
                                  kt=1,
                                  s=rebuildSpans,
                                  d=3,
                                  tol=0.01)[0]
    # Rename curve
    curve = cmds.rename(curve, prefix + '_CRV')
    # Return result
    return curve
예제 #15
0
def getCenterCurve():
    edges=mc.ls(sl=1)
    loftCurves=[]
    for i in edges:
        obj=i.split('.')[0]
        edgeID=int(i.split('.')[1].split('[')[1].split(']')[0])
        edgeLoop=mc.polySelect(obj,el=edgeID)
        loftCurves.append(mc.polyToCurve(form=2,degree=1)[0])
    mc.loft(loftCurves[0],loftCurves[1],ch=0,u=1,c=0,ar=1,d=1,ss=2,rn=0,po=0,rsn=1,n='NLoftPlane')
    loftPlane=mc.nurbsToPoly('NLoftPlane',mnd=1,ch=0,f=3,pt=0,pc=200,chr=0.1,ft=0.01,mel=0.001,d=0.1,ut=1,un=3,vt=1,vn=3,uch=0,ucr=0,cht=0.2,es=0,ntr=0,mrt=0,uss=1)[0]
    edgeLoop=mc.polySelect(loftPlane,el=2)
    centerCurve=mc.polyToCurve(form=2,degree=1)[0]
    mc.rebuildCurve(centerCurve,ch=0,rpo=1,rt=0,end=1,kr=0,kcp=1,kep=0,kt=0,s=16,d=3,tol=0.01);mc.DeleteHistory(centerCurve)
    mc.delete('NLoftPlane',loftPlane,loftCurves)
    mc.setAttr(centerCurve+'.overrideEnabled',1)
    mc.setAttr(centerCurve+'.overrideColor',16)
    loftCurves=[]
예제 #16
0
 def sqGenerateCurves(self, *args):
     self.edgeList = cmds.ls(selection=True, flatten=True)
     if not self.edgeList == None and not self.edgeList == [] and not self.edgeList == "":
         self.baseCurve = cmds.polyToCurve(name="baseCurve", form=2, degree=1)[0]
         cmds.select(self.baseCurve+".ep[*]")
         cmds.insertKnotCurve(cmds.ls(selection=True, flatten=True), constructionHistory=True, curveOnSurface=True, numberOfKnots=1, addKnots=False, insertBetween=True, replaceOriginal=True)
         
         pointListA, pointListB, sideA, sideB = self.sqGetPointLists()
         
         toDeleteList = []
         p = 2
         for k in range((sideA+2), (sideB-1)):
             if p%2 == 0:
                 toDeleteList.append(self.baseCurve+".cv["+str(k)+"]")
                 toDeleteList.append(self.baseCurve+".cv["+str(k+len(pointListA)-1)+"]")
             p = p+1
         q = 2
         m = sideA-2
         if m >= 0:
             while m >= 0:
                 if not m == sideA and not m == sideB:
                     if q%2 == 0:
                         toDeleteList.append(self.baseCurve+".cv["+str(m)+"]")
                 m = m-1
                 q = q+1
         
         cmds.delete(toDeleteList)
         cmds.insertKnotCurve([self.baseCurve+".u["+str(len(pointListA)-1)+"]", self.baseCurve+".ep["+str(len(pointListA)-1)+"]"], constructionHistory=True, curveOnSurface=True, numberOfKnots=1, addKnots=False, insertBetween=True, replaceOriginal=True)
         
         pointListA, pointListB, sideA, sideB = self.sqGetPointLists()
         
         posListA, posListB = [], []
         for i in range(0, len(pointListA)-1):
             posListA.append(cmds.xform(pointListA[i], query=True, worldSpace=True, translation=True))
             posListB.append(cmds.xform(pointListB[i], query=True, worldSpace=True, translation=True))
         
         self.mainCurveA = cmds.curve(name="StickyLips_Main_A_Crv", degree=1, point=posListA)
         self.mainCurveB = cmds.curve(name="StickyLips_Main_B_Crv", degree=1, point=posListB)
         
         cmds.rename(cmds.listRelatives(self.mainCurveA, children=True, shapes=True)[0], self.mainCurveA+"Shape")
         cmds.rename(cmds.listRelatives(self.mainCurveB, children=True, shapes=True)[0], self.mainCurveB+"Shape")
         
         cmds.select(self.mainCurveA+".cv[*]")
         self.curveLenght = len(cmds.ls(selection=True, flatten=True))
         cmds.select(clear=True)
         
         self.sqCheckCurveDirection(self.mainCurveA)
         self.sqCheckCurveDirection(self.mainCurveB)
         
         self.baseCurveA = cmds.duplicate(self.mainCurveA, name=self.mainCurveA.replace("_Main_", "_Base_"))[0]
         self.baseCurveB = cmds.duplicate(self.mainCurveB, name=self.mainCurveB.replace("_Main_", "_Base_"))[0]
         
         cmds.delete(self.baseCurve)
         self.maxIter = len(posListA)
         
         cmds.group(self.mainCurveA, self.mainCurveB, self.baseCurveA, self.baseCurveB, name="StickyLips_StaticData_Grp")
     else:
         mel.eval("warning \"Please, select an closed edgeLoop.\";")
예제 #17
0
def cici():
    import maya.cmds as lj
    import maya.mel as mm
    sele = cmds.ls(sl=1)
    pipei = cmds.radioButtonGrp('pipei',q=1,sl=1)
    maya=cmds.textFieldButtonGrp('zong',q=1,tx=1)
    name = cmds.textField('w',q=1,tx=1)
    for i in sele:
        a = []
        a =i.split('.')
        c=a[1][2:-1]
        curve1 = cmds.polyToCurve(i,form=2,degree=3)
        cmds.DeleteHistory(curve1)
        edge =cmds.createNode("curveFromMeshEdge",n='new_CFME_#')
        poc =cmds.createNode("pointOnCurveInfo",n='new_poc_#')
        joint_t =cmds.createNode("joint",n=name+'_Jt_#')
        jt_grp = cmds.group(joint_t,n=name+'_Jt_Gp_#')
        cmds.setAttr(poc+'.turnOnPercentage',1)
        cmds.setAttr(poc+'.parameter',1)
        MD =cmds.createNode("multiplyDivide",n='new_MD_#')
        cmds.setAttr(MD+'.input2Z',-1)
        cmds.setAttr(MD+'.input2X',-1)
        cmds.setAttr(MD+'.input2Y',-1)
        shape = cmds.listRelatives(a[0],s=1)
        shape1 = cmds.listRelatives(curve1[0],s=1)
        cmds.setAttr(edge+'.edgeIndex[0]',int(c))
        kong = cmds.curve(n=name,d=1,p=[(0,0,1),(0,0.5,0.866025),(0,0.866025,0.5),(0,1,0),(0,0.866025,-0.5),(0,0.5,-0.866025),(0,0,-1),(0,-0.5,-0.866025),(0,-0.866025,-0.5),(0,-1,0),(0,-0.866025,0.5),(0,-0.5,0.866025),(0,0,1),(0.707107,0,0.707107),(1,0,0),(0.707107,0,-0.707107),(0,0,-1),(-0.707107,0,-0.707107),(-1,0,0),(-0.866025,0.5,0),(-0.5,0.866025,0),(0,1,0),(0.5,0.866025,0),(0.866025,0.5,0),(1,0,0),(0.866025,-0.5,0),(0.5,-0.866025,0),(0,-1,0),(-0.5,-0.866025,0),(-0.866025,-0.5,0),(-1,0,0),(-0.707107,0,0.707107),(0,0,1)],k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])
        grp0 = cmds.group(kong,n=name+'_Subtract')
        grp1 = cmds.group(grp0,n=name+'_Offset')
        grp2 = cmds.group(grp1,n=name+'_Attach')
        cmds.connectAttr(shape[0]+'.worldMesh[0]',edge+'.inputMesh')
        cmds.connectAttr(edge+'.outputCurve',shape1[0]+'.create')
        cmds.connectAttr(shape1[0]+'.worldSpace[0]',poc+'.inputCurve')
        cmds.connectAttr(poc+'.position',grp2+'.translate')
        cmds.connectAttr(kong+'.translate',MD+'.input1')
        cmds.connectAttr(MD+'.output',grp0+'.translate')
        cmds.delete(cmds.parentConstraint(kong,jt_grp,w=1))
        cmds.connectAttr(kong+'.translate',joint_t+'.translate')
        cmds.connectAttr(kong+'.rotate',joint_t+'.rotate')
        cmds.connectAttr(kong+'.scale',joint_t+'.scale')
        cmds.select(kong+'.cv[0:32]')
        cmds.scale(0.01,0.01,0.01)
        se = cmds.listRelatives(kong,shapes=True)
        cmds.setAttr(se[0]+'.overrideEnabled',1)
        cmds.setAttr(se[0]+'.overrideColor',17)
        cmds.select(cl=1)
        if (pipei == 1):
            cmds.connectAttr('Brs.rotate',grp2+'.rotate')
            cmds.connectAttr('Brs.scale',grp2+'.scale')
            cmds.parent(curve1[0],'ClusterSetup')
            cmds.parent(jt_grp,'FaceAttachToHead')
            cmds.setAttr(curve1[0]+'.v',0)
        if (pipei == 2):
            cmds.connectAttr(maya+'.rotate',grp2+'.rotate')
            cmds.connectAttr(maya+'.scale',grp2+'.scale')
예제 #18
0
    def polyCenterCurves(self, *args):
        cmd.select(self.curve1)
        cur1 = cmd.polyToCurve(f=2, dg=3)
        cmd.DeleteHistory(cur1[0])
        cmd.select(self.curve2)
        cur2 = cmd.polyToCurve(f=2, dg=3)
        cmd.DeleteHistory(cur2[0])

        self.point = []
        self.pointOnCur(cur1[0], cur2[0])
        cmd.delete(cur1[0], cur2[0])

        int_i = len(self.point)
        for pi in range(0, int_i):
            if pi == 0:
                centerCur = cmd.curve(d=3, p=self.point[pi], k=[0, 0, 0])
            else:
                cmd.curve(centerCur, a=1, p=self.point[pi])
        cmd.select(cl=1)
        print "////生成完毕" + "\n",
예제 #19
0
	def createEyelidsCrv (self, eyePrefix, upperLidVtx, lowerLidVtx, rigGrp):
		'''Creates nurbsCurve out of each lid vertices.
		
		Called by 'buildRig' function.
		Call functions: None '''
		
		cmds.select (cl = 1)
		
		# Organize rig hierarchy
		self.hierarchyCrvGrp = cmds.group (n = (eyePrefix + "_Eyelids_curves_GRP"), em = 1)
		self.hierarchyUpCrvGrp = cmds.group (n = (eyePrefix + "_UpEyelid_curves_GRP"), em = 1)
		self.hierarchyLowCrvGrp = cmds.group (n = (eyePrefix + "_LowEyelid_curves_GRP"), em = 1)
		
		cmds.parent (self.hierarchyUpCrvGrp, self.hierarchyCrvGrp)
		cmds.parent (self.hierarchyLowCrvGrp, self.hierarchyCrvGrp)
		cmds.parent (self.hierarchyCrvGrp, rigGrp)
		
		# Upper eyelid
		cmds.select (upperLidVtx)
		edgeUpLid = cmds.polyListComponentConversion (fv = 1, te = 1, internal = 1)
		cmds.select (edgeUpLid)
		tempCrvUp = cmds.polyToCurve (form = 0, degree = 1) [0]
		cmds.select (tempCrvUp)
		cmds.delete (ch = 1)
		upLidCrvName = eyePrefix + "_UpEyelid_BASE_curve"
		self.upLidCrv = cmds.rename (tempCrvUp, upLidCrvName)
		cmds.parent (self.upLidCrv, self.hierarchyUpCrvGrp)
		
		# Lower eyelid
		cmds.select (lowerLidVtx)
		edgeLowLid = cmds.polyListComponentConversion (fv = 1, te = 1, internal = 1)
		cmds.select (edgeLowLid)
		tempCrvLow = cmds.polyToCurve (form = 0, degree = 1) [0]
		cmds.select (tempCrvLow)
		cmds.delete (ch = 1)
		lowLidCrvName = eyePrefix + "_LowEyelid_BASE_curve"
		self.lowLidCrv = cmds.rename (tempCrvLow, lowLidCrvName)
		cmds.parent (self.lowLidCrv, self.hierarchyLowCrvGrp)
예제 #20
0
def createCurveFromEdge( value, degree=3 ):
    
    print "degree : ", degree
    sels = cmds.ls( sl=1 )
    if not sels: return None
    
    if cmds.nodeType( sels[0] ) == 'transform':
        sels[0] = cmds.listRelatives( sels[0], s=1 )[0]
    if cmds.nodeType( sels[0] ) == 'nurbsCurve':
        if not value: return None
        cmds.rebuildCurve( sels[0], ch=0, rpo=1, rt=0, end=1, kr=0, kcp=0, kep=0, kt=0, s=value, tol=0.01 )
    else:
        curveObject, node = cmds.polyToCurve( form=0, degree=degree )
        crvShape= cmds.listRelatives( curveObject, s=1 )[0]
        cmds.setAttr( crvShape+'.dispCV', 1 )
        if value:
            cmds.rebuildCurve( curveObject, ch=0, rpo=1, rt=0, end=1, kr=0, kcp=0, kep=0, kt=0, s=value, tol=0.01 )
예제 #21
0
파일: lib.py 프로젝트: dayelov/MayaPython
def createCurve(edgeList,
                rebuild=True,
                spans=4):
    """
    Create a fine curve from selection
    :param edgeList: list(str), flattened edge list to created new curve.
    :param rebuild: bool, whether rebuild the created line or not.
    :param spans: int, if rebuild the created line, spans of the rebuilded curve.
    :return: str, new curve.
    """
    # check the edge list
    for i in edgeList:
        if getComponentType(i) != 'e':
            cmds.error('Please select edges')
            return

    # create each line
    curves = []
    if edgeList and len(edgeList) >= 2:
        for crv in edgeList:
            curve = cmds.polyToCurve(crv, form=0, degree=1, ch=0)[0]
            curves.append(curve)

    else:
        cmds.error('Please select at least 2 lines!')
        return
    # attach each line and clean the trash lines
    outputCurve = []
    if curves:
        outputCurve = cmds.attachCurve(curves[:], ch=0, method=0, kmk=0)

    trashGrp = cmds.group(em=1)
    for i in xrange(len(outputCurve) - 1):
        cmds.parent(outputCurve[i+1], trashGrp)

    cmds.delete(trashGrp)

    # if needed, rebuild the attached line
    finalCurve = None

    if rebuild and spans:
        finalCurve = cmds.rebuildCurve(outputCurve[0], ch=0, degree=3, spans=spans, end=1, rebuildType=0)
    else:
        finalCurve = outputCurve[0]

    return finalCurve
예제 #22
0
def createCurveToEdgeLoop():

    sels = cmds.ls(sl=1, fl=1)
    selObject = cmds.ls(sl=1, o=1)[0]
    selObject = cmds.listRelatives(selObject, p=1)[0]
    excutedEdges = []
    curves = []
    for sel in sels:
        if sel in excutedEdges: continue
        cmds.select(sel)
        cmds.SelectEdgeLoopSp()
        excutedEdges += cmds.ls(sl=1, fl=1)
        curves.append(cmds.polyToCurve(form=0, degree=3)[0])

    cmds.select(curves)
    cmds.DeleteHistory()
    return cmds.ls(sl=1)
예제 #23
0
def createCurveToEdgeLoop():
    
    sels = cmds.ls( sl=1, fl=1 )
    selObject = cmds.ls( sl=1, o=1 )[0]
    selObject = cmds.listRelatives( selObject, p=1 )[0]
    excutedEdges = []
    curves = []
    for sel in sels:
        if sel in excutedEdges: continue
        cmds.select( sel )
        cmds.SelectEdgeLoopSp()
        excutedEdges += cmds.ls(sl=1, fl=1 )
        curves.append( cmds.polyToCurve( form=0, degree=3 )[0] )
    
    cmds.select( curves )
    cmds.DeleteHistory()
    return cmds.ls( sl=1 )
예제 #24
0
    def ctrlFromEdges(cls, *args):
        '''
		This function create control from selected polygon for selected joint.
		First select a joint and select polygons.
		'''
        jnt = cmds.textFieldButtonGrp(UI.widgets['jntTxtFldBtnGrp'],
                                      q=True,
                                      text=True)
        edges = cmds.textScrollList(UI.widgets['edgeTxtScrLs'],
                                    q=True,
                                    allItems=True)

        jntSrchStr = cmds.textFieldGrp(UI.widgets['jntsrchTxtFldGrp'],
                                       q=True,
                                       text=True)
        jntRplcStr = cmds.textFieldGrp(UI.widgets['jntrplcTxtFldGrp'],
                                       q=True,
                                       text=True)

        # Convert selected faces to control shape
        cmds.select(edges, r=True)
        ctrlCrv = cmds.polyToCurve(form=2, degree=1)[0]
        cmds.delete(ctrlCrv, ch=True)

        # Match control transform node to the joint
        ctrlName = re.sub(jntSrchStr, jntRplcStr, jnt)
        trnsf = cmds.createNode('transform', n=ctrlName)
        cnst = cmds.parentConstraint(jnt, trnsf, mo=False)
        cmds.delete(cnst)

        # Parent control shape to the control transform node in place
        tak_lib.parentShpInPlace(ctrlCrv, trnsf)

        # Match shape name to transform name
        shapName = cmds.listRelatives(trnsf, s=True)[0]
        if shapName != '%sShape' % trnsf:
            cmds.rename(shapName, '%sShape' % trnsf)

        # tak_misc.doGroup(trnsf, '_zero')

        # Connect joint to the control
        cmds.parentConstraint(trnsf, jnt, mo=False)

        cmds.delete(ctrlCrv)
예제 #25
0
def edge_loop_to_curve(edge_name, delete_edges=False):
    cmds.select(edge_name)
    cmds.pickWalk(edge_name, type="edgeloop", d="right")
    curve_name, shape_name = cmds.polyToCurve(form=2, degree=3)
    cvs = cmds.getAttr("{}.spans".format(curve_name))
    curve_points = []
    for cv_id in range(cvs):
        cv_name = "{}.cv[{}]".format(curve_name, cv_id)
        pos = get_position(cv_name)
        curve_points.append(Component(cv_name, *pos))

    if delete_edges:
        cmds.select(edge_name)
        cmds.pickWalk(edge_name, type="edgeloop", d="right")
        cmds.polyDelEdge(cv=True)

    cmds.select(curve_name)
    cmds.Delete()
    return curve_points
예제 #26
0
 def polytoCurve(self):
     blist = cmds.ls(sl=1)
     for i in blist:
         vnum = cmds.polyEvaluate(i, v=1)
         for v in range(vnum):
             enum = cmds.ls(cmds.polyListComponentConversion(i + '.vtx[' + str(v) + ']', fv=1, ff=1, fuv=1, fvf=1, te=1), fl=1)
             if len(enum) == 4:
                 break
         arclen = []
         for e in enum:
             elist = cmds.polySelectSp(e, q=1, loop=1)
             earclen = 0.0
             for el in elist:
                 earclen += cmds.arclen(el)
             arclen.append(earclen)
         cmds.polySelectSp(enum[arclen.index(max(arclen))], loop=1)
         cname = cmds.rename(cmds.polyToCurve(
             ch=0, form=2, degree=3), i + '_Cur')
         if cmds.xform(cname + '.cv[0]', q=1, ws=1, t=1)[1] < cmds.xform(cname + '.cv[' + str(cmds.getAttr(cname + ".controlPoints", size=1)) + ']', q=1, ws=1, t=1)[1]:
             cmds.reverseCurve(cname, ch=0, rpo=1)
예제 #27
0
def distribute(edgeLoop):

    edgeSel = cmds.ls(edgeLoop, fl=True)
    vertList = cmds.ls(cmds.polyListComponentConversion(edgeSel,
                                                        toVertex=True),
                       fl=True)

    tempCurveName = uniqueNameGenerator()

    if cmds.radioCollection('interpolation_radioCollection2',
                            select=True,
                            q=True) == 'curved_radioButton':
        cmds.polyToCurve(n=tempCurveName, form=2, degree=3, ch=False)

    else:
        cmds.polyToCurve(n=tempCurveName, form=2, degree=1, ch=False)
        CVtoDelete = []
        for i in range(1, len(vertList) - 1):
            CVtoDelete.append(tempCurveName + '.cv[' + str(i) + ']')
        cmds.delete(CVtoDelete)

    cmds.rebuildCurve(tempCurveName,
                      ch=False,
                      replaceOriginal=True,
                      rt=0,
                      end=1,
                      kr=0,
                      kep=1,
                      kt=0,
                      s=len(vertList) - 1,
                      d=3,
                      tol=0.01)

    accuracy = 4

    firstEPPos = [
        round(elem, accuracy)
        for elem in cmds.pointPosition(tempCurveName + '.ep[0]')
    ]
    vertListOrdered = []
    for edge in edgeSel:

        edgeVert = cmds.ls(cmds.polyListComponentConversion(edge,
                                                            toVertex=True),
                           fl=True)

        for v in edgeVert:

            vPos = [round(elem, accuracy) for elem in cmds.pointPosition(v)]

            if vPos == firstEPPos:
                vertListOrdered.append(v)

    while len(vertListOrdered) < len(vertList):
        for edge in edgeSel:
            vertEdge = cmds.ls(cmds.polyListComponentConversion(edge,
                                                                toVertex=True),
                               fl=True)

            counter = []

            for v in vertEdge:
                if v not in vertListOrdered:
                    counter.append(v)
                else:
                    pass

            if len(counter) == 1:
                vertListOrdered.append(counter[0])
            else:
                pass

    for v in vertListOrdered:
        epPos = cmds.pointPosition(tempCurveName + '.ep[' +
                                   str(vertListOrdered.index(v)) + ']')
        cmds.move(epPos[0], epPos[1], epPos[2], v, absolute=True)

    cmds.delete(tempCurveName)
예제 #28
0
	def execute(self):

		sx = self.sx
		sy = self.sy
		sdv = self.sdv
		sdu = self.sdu
		tap = self.tap
		degs = self.degs
		subCurve = self.subCurve
		clean = self.clean
		do_uvs = self.do_uvs
		rbc = self.rbc
		cTol = self.cTol
		cSubd = self.cSubd
		
		if cmds.checkBox(self.aUACCB, q=True, v=True):
			useAltShape = True
		else:
			useAltShape = False
		
		multSel = cmds.ls(sl=True,fl=True, ap=True)
		if cmds.objectType(multSel[0]) == 'mesh':
			thisIsAMesh = True
		else:
			thisIsAMesh = False
		# Select curve type to extrude along - convert and store
		for x in multSel:
			print x
			if thisIsAMesh != True:
				cmds.select(x)
			else:
				cmds.select(multSel)
				
			objSel = cmds.ls(sl=True,fl=True, ap=True)
			if self.ko == 1:
				dupObj = cmds.duplicate(objSel)
				objSel = dupObj
			if len(objSel) > 1:
				print objSel
				if degs == 0:
					curveDg = cmds.promptDialog(t='Enter Degrees:', m='Enter Degrees - ie. 1 for linear, 3 for curved')
					objSel = cmds.polyToCurve(f=2, dg=int(cmds.promptDialog(q=True, tx=True)))
				else:
					objSel = cmds.polyToCurve(f=2, dg=int(degs), n='%s_curve' %objSel[0].split('.')[0])
			else:
				objType = cmds.listRelatives(objSel[0], f=True)
				if cmds.objectType(objType[0]) != 'nurbsCurve' and cmds.objectType(objType[0]) != 'bezierCurve':
				    cmds.error('Select the nurbs curve first, then the object to align')
				if cmds.objectType(objType[0]) == 'bezierCurve':
					mm.eval("bezierCurveToNurbs;")
			# Create a nurbs curve for the extrusion
			if useAltShape:
				nurbsCir = self.objToUse
			else:	
				nurbsCir = cmds.circle(n='extrudeCircle', d=3, r=1, nr=(0,0,1), sw=360, ch=True, s=8)
			objCV = cmds.ls('%s.ep[*]' %objSel[0], fl=True)
			
			noOfCV = len(objCV)
			firstCV = 0
			lastCV = noOfCV - 1
			cvNumberToUse=firstCV
			
			# Rebuild the curve to help with uniformity
			if self.rev == 1:
				cmds.reverseCurve(objSel[0], ch=0, rpo=1)
			
			if rbc == 1:
				try:
					cmds.rebuildCurve(objSel[0], ch=0,rpo=1,rt=4,end=1,kr=0, kcp=0, kep=1, kt=0, s=cSubd, d=3, tol=cTol)
					cmds.rebuildCurve(objSel[0], ch=0,rpo=1,rt=0,end=1,kr=0, kcp=0, kep=1, kt=0, s=cSubd, d=3, tol=cTol)
				except:
					cmds.warning('Tolerance for rebuild likely to low, try a higher value or turn Rebuild Curve off')
			
			if do_uvs == 1:
				objShape = cmds.listRelatives(objSel[0], c=True, type='shape')
				mInfo = cmds.shadingNode('curveInfo', n='cMeasure', asUtility=True)
				cmds.connectAttr('%s.local' %objShape[0], '%s.inputCurve' %mInfo)
				curveLength = cmds.getAttr('%s.arcLength' %mInfo)
				cmds.delete(mInfo)
				
				self.uvRatio = float((((sx * sy)*2.0) * math.pi) / curveLength)
				print "uvRatio:  " + str(self.uvRatio)
				
			
			# Create a tangent contraint to position nurbs circle to the first cv
			cvPos = cmds.xform('%s.ep[%d]' %(objSel[0],cvNumberToUse), query=True, ws=True, t=True)
			cmds.xform(nurbsCir[0], ws=True, t=(cvPos[0],cvPos[1],cvPos[2]))
			fastCon = cmds.tangentConstraint(objSel[0], nurbsCir[0], aim=(0,0,1))
			cmds.delete(fastCon[0])
			
			# Extrude along curve and set attributes
			pipeExt = cmds.extrude(nurbsCir[0], objSel[0], n='%s_pipe' %objSel[0], ch=True, rn=subCurve, po=1, et=2, ucp=1, fpt=1,upn=1, rotation=0, scale=1,rsp=1) 
			pipeTes = cmds.listConnections(pipeExt[1], type='nurbsTessellate')
			if subCurve != 0:
				pipeSubCurve = cmds.listConnections(pipeExt[1], type='subCurve')
			
			cmds.setAttr('%s.format' %pipeTes[0],2)
			cmds.setAttr('%s.polygonType' %pipeTes[0],1)
			cmds.setAttr('%s.uType' %pipeTes[0],2)
			cmds.setAttr('%s.vType' %pipeTes[0],2)
			cmds.setAttr('%s.vNumber' %pipeTes[0],sdv)
			cmds.setAttr('%s.uNumber' %pipeTes[0],sdu)
			
			# Add attributes
			if clean == 0:
				cmds.addAttr(pipeExt[0], ln='________', k=True)
				cmds.setAttr('%s.________' %pipeExt[0], l=True)
				cmds.addAttr(pipeExt[0], ln='Ext_ScaleX', k=True, dv=sx)
				cmds.addAttr(pipeExt[0], ln='Ext_ScaleY', k=True, dv=sy)
				cmds.connectAttr('%s.Ext_ScaleX' %pipeExt[0], '%s.scaleX' %nurbsCir[0])
				cmds.connectAttr('%s.Ext_ScaleY' %pipeExt[0], '%s.scaleY' %nurbsCir[0])
				cmds.addAttr(pipeExt[0], ln='Ext_DivisionV', at='short', k=True, dv=sdv)
				cmds.connectAttr('%s.Ext_DivisionV' %pipeExt[0], '%s.vNumber' %pipeTes[0])
				cmds.addAttr(pipeExt[0], ln='Ext_DivisionU', at='short', k=True, dv=sdu)
				cmds.connectAttr('%s.Ext_DivisionU' %pipeExt[0], '%s.uNumber' %pipeTes[0])
				if subCurve != 0:
					cmds.addAttr(pipeExt[0], ln='Ext_Length', k=True, dv=1, max=1, min=0)
					cmds.connectAttr('%s.Ext_Length' %pipeExt[0], '%s.maxValue' %pipeSubCurve[1])
				cmds.addAttr(pipeExt[0], ln='Ext_Taper', k=True, dv=tap, min=0)
				cmds.connectAttr('%s.Ext_Taper' %pipeExt[0], '%s.scale' %pipeExt[1])
				cmds.addAttr(pipeExt[0], ln='Ext_Twist', k=True, dv=1)
				cmds.connectAttr('%s.Ext_Twist' %pipeExt[0], '%s.rotation' %pipeExt[1])
				cmds.addAttr(pipeExt[0], ln='Ext_ComponentPivot', k=True, dv=1)
				cmds.connectAttr('%s.Ext_ComponentPivot' %pipeExt[0], '%s.useComponentPivot' %pipeExt[1])

			curveGrpNode = cmds.createNode('transform', n='pipeCurves')
			cmds.parent(nurbsCir, curveGrpNode)
			cmds.parent(objSel, curveGrpNode)
	
			cmds.setAttr('%s.inheritsTransform' %curveGrpNode, 0)
			cmds.setAttr('%s.visibility' %curveGrpNode, 1)
			cmds.parent(curveGrpNode, pipeExt[0])
			cmds.select(pipeExt[0])
			if do_uvs == 1:
				cmds.polyLayoutUV(ps=0.2)
				cmds.polyEditUV(sv=1, su=self.uvRatio)
				cmds.polyEditUV(sv=0.95, su=0.95)
				cmds.select(pipeExt[0])
				CentreUVs()
				if clean == 1:
					cmds.delete(ch=True)
					cmds.delete(curveGrpNode)
					cmds.select(pipeExt[0])
			if thisIsAMesh == True:
				print 'hello'
				break					
예제 #29
0
def createConveyerBeltSet( meshName, firstEdgeIndex, secondEdgeIndex ):
    
    firstEdges = cmds.polySelectSp( meshName+'.e[%d]' % firstEdgeIndex,  loop=1 )
    secondEdges = cmds.polySelectSp( meshName+'.e[%d]' % secondEdgeIndex, loop=1 )
    
    cmds.select( firstEdges )
    firstCurve  = cmds.polyToCurve( form=2, degree=3, n=meshName+'_loopCurve_First' )[0]
    cmds.select( secondEdges )
    secondCurve = cmds.polyToCurve( form=2, degree=3, n=meshName+'_loopCurve_Second' )[0]
    
    firstCurveShape = sgModelDag.getShape( firstCurve )
    secondCurveShape = sgModelDag.getShape( secondCurve )
    
    firstSpans  = cmds.getAttr( firstCurveShape +'.spans' )
    secondSpans = cmds.getAttr( secondCurveShape+'.spans' )
    
    firstTangent = sgModelCurve.getTangentAtParam( firstCurveShape, 0.0 )
    firstParamPoint = sgModelCurve.getPointAtParam( firstCurveShape, 0.0 )
    secondParam = sgModelCurve.getParamAtPoint( secondCurveShape, firstParamPoint )
    secondTangent = sgModelCurve.getTangentAtParam( secondCurveShape, secondParam )
    
    if firstTangent * secondTangent < 0:
        cmds.reverseCurve( secondCurve, ch = 1, rpo = 1 )
    
    firstPointers = sgRigCurve.createRoofPointers( firstCurve, firstSpans )
    secondPointers = sgRigCurve.createRoofPointers( secondCurve, secondSpans )
    
    fPos = cmds.xform( firstPointers[0], q=1, ws=1, t=1 )
    
    minDistPointer = secondPointers[0]
    minDist = 1000000000.0
    for secondPointer in secondPointers:
        sPos = cmds.xform( secondPointer, q=1, ws=1, t=1 )
        dist = (fPos[0]-sPos[0])**2+(fPos[1]-sPos[1])**2+(fPos[2]-sPos[2])**2
        if dist < minDist:
            minDistPointer = secondPointer
            minDist = dist
    
    offset = int( minDistPointer.split( '_' )[-1] )
    
    crvs = []
    for i in range( len( firstPointers ) ):
        firstPointer = firstPointers[i]
        secondPointer = '_'.join( secondPointers[i].split( '_' )[:-1] ) + '_%d' %( (i + offset)%firstSpans )
        
        crv = sgRigCurve.createCurveOnTargetPoints( [firstPointer, secondPointer] )
        crv = cmds.rename( crv, meshName+'_line_%d' % i )
        crvs.append( crv )
        
    cmds.select( crvs )
    loftSurf = cmds.loft( n=meshName+'_loft' )[0]
    resultObject = cmds.nurbsToPoly( loftSurf ,mnd=1 ,ch=1,f=3,pt=0,pc=200,chr=0.9,ft=0.01,mel=0.001, d=0.1, 
                                    ut=1, un=3, vt=1, vn=3, uch=0, ucr=0, cht=0.2, es=0,ntr=0,mrt=0, uss=1, n=meshName+'_conveyorBelt' )
    crvGrp = cmds.group( crvs, n=meshName+'_lines' )
    conveyorRig = cmds.group( firstCurve, secondCurve, crvGrp, loftSurf, resultObject, meshName, n=meshName+'_conveyorRig' )
    
    import sgRigAttribute
    sgRigAttribute.addAttr( conveyorRig, ln='offset', k=1 )
    cmds.connectAttr( conveyorRig+'.offset', firstCurve+'.roofValue' )
    cmds.connectAttr( conveyorRig+'.offset', secondCurve+'.roofValue' )

    cmds.setAttr( conveyorRig+'.v', 0 )
예제 #30
0
extrudeFaces = []
for i in range(0, div):
    curFace = rail[0] + '.f[' + str(2 + div + i) + ']'  # left side faces
    extrudeFaces.append(curFace)
for i in range(0, div):
    curFace = rail[0] + '.f[' + str(2 + (div * 3) + i) + ']'  # right side faces
    extrudeFaces.append(curFace)
mc.polyExtrudeFacet(extrudeFaces, thickness=1.6)

edgeForCurveLeft = []
for i in range(0, div):
    curFace = rail[0] + '.e[' + str(10 + (div * 6) + (i * 5)) + ']'  # left side faces
    edgeForCurveLeft.append(curFace)
mc.select(edgeForCurveLeft)
leftCurve = mc.polyToCurve()

pos = mc.pointOnCurve(leftCurve[0], pr=0, top=True)
tan = mc.pointOnCurve(leftCurve[0], pr=0, t=True, top=True)
rot = math.degrees(math.atan2(tan[0], tan[2]))
leftRail = mc.polyPlane(sx=1, sy=1)
mc.move(pos[0], pos[1], pos[2])
mc.rotate(90, rot, 0)
mc.select(leftRail[0] + '.f[0]', leftCurve[0])
div = numSleepers * 2
mc.polyExtrudeFacet(leftRail[0] + '.f[0]', inputCurve=leftCurve[0], divisions=div)

edgeForCurveRight = []
for i in range(0, div):
    curFace = rail[0] + '.e[' + str(16 + (div * 11) + (i * 5)) + ']'  # right side faces
    edgeForCurveRight.append(curFace)
예제 #31
0
def createCrvDriverSys(nodeName, ctlNum, form=0, attachGeo=None):
    '''
    Create driver system based on edge loop selection in viewport
    nodeName [string]
    ctlNum [int] - number of controls to add along curve
    form - [int] 0 = open, 1 = periodic
    Returns drvSysGrp, and a list of locators that can be used to drive offset controls
    '''
    
    # select edge loop in UI
    drvCrv, p2cNode = mc.polyToCurve(form=form, degree=1, n=nodeName+'_wireOffset_crv')
    p2cNode = mc.rename(p2cNode, nodeName+'_wireOffset_p2c')
    crvSpans = mc.getAttr(drvCrv+'.spans')

    
    # create control placement locators on drvCrv
    drvLocs = []
    for ctlId in range(ctlNum):
        loc = mc.spaceLocator(n=nodeName+'_wireOffset_drvLoc%d'%ctlId)[0]
        param = float(ctlId) / ctlNum * crvSpans
        rt.attachToMotionPath(drvCrv, param, loc, False)
        drvLocs.append(loc)
        
    # if curve is open, we will create an extra ctl, where param = crvSpans 
    if mc.getAttr(drvCrv+'.form') != 2:
        loc = mc.spaceLocator(n=nodeName+'_wireOffset_drvLoc%d'%ctlNum)[0]
        param = crvSpans
        rt.attachToMotionPath(drvCrv, param, loc, False)
        drvLocs.append(loc)
        
    
    drvLocGrp = mc.group(drvLocs, n=nodeName+'_wireOffset_drvLocs_grp')
    drvSysGrp = mc.group(drvCrv, drvLocGrp, n=nodeName+'_wireOffset_drvSys_grp')
    
    rt.connectVisibilityToggle(drvLocs, drvSysGrp, 'drvLocsVis', False)
    rt.connectVisibilityToggle(drvCrv, drvSysGrp, 'drvCrvVis', False)
    
    mc.addAttr(drvSysGrp, ln='enabled', at='bool', k=True, dv=True)
    rt.connectSDK(drvSysGrp+'.enabled', p2cNode+'.nodeState', {1:0, 0:2})
    
        
    # if attachGeo is defined, use attachGeo to drive polyToCurve
    if attachGeo:
        # make an origLoc for each driverLoc to preserve orig positions
        origLocs = []
        for eachLoc in drvLocs:
            origLoc = mc.group(n=eachLoc.replace('_drvLoc', '_drvLocOrig'), em=True)
            rt.parentSnap(origLoc, eachLoc)
            mc.parent(origLoc, w=True)
            origLocs.append(origLoc)
            
        # switch the input mesh for polyToCurve -> this will move drvLocs
        mc.connectAttr(attachGeo, p2cNode+'.inputPolymesh', f=True)
        
        # parent orig loc back under driver loc, preserving transforms
        for drv, orig in zip(drvLocs, origLocs):
            mc.parent(orig, drv)
            
        return drvSysGrp, origLocs
    
    return drvSysGrp, drvLocs
예제 #32
0
def Brow():
    Info = cm.textFieldGrp(TfbGrp, q=True, tx=True)
    Sec = cm.intSliderGrp(IsGrp01, q=True, v=True)
    Tw = cm.intSliderGrp(IsGrp02, q=True, v=True)
    cm.select(Info.split(","))
    Cbr = cm.polyToCurve(form=2,
                         degree=1,
                         conformToSmoothMeshPreview=1,
                         n="Brow_L_Cv")
    Lbr = cm.rebuildCurve(Cbr[0],
                          ch=1,
                          rpo=1,
                          rt=0,
                          end=1,
                          kr=0,
                          kcp=0,
                          kep=1,
                          kt=0,
                          s=Tw - 1,
                          d=1,
                          tol=0.01)
    Rbr = cm.duplicate(Lbr[0], rr=True, n="Brow_R_Cv")
    cm.setAttr(Rbr[0] + ".sx", -1)
    cm.makeIdentity(apply=True, t=0, r=0, s=1, n=0, pn=1)
    # Sp=cm.getAttr(Br[0]+"Shape.s")
    cm.select(cl=True)
    for i in range(0, Tw):
        Lwt = cm.xform(Lbr[0] + ".cv[" + str(i) + "]", ws=True, q=True, t=True)
        Rwt = cm.xform(Rbr[0] + ".cv[" + str(i) + "]", ws=True, q=True, t=True)
        Ljnt = cm.joint(n="brow_L0" + str(i) + "_fur_jnt",
                        p=(Lwt[0], Lwt[1], Lwt[2]),
                        a=True)
        select(cl=True)
        Rjnt = cm.joint(n="brow_R0" + str(i) + "_fur_jnt",
                        p=(Rwt[0], Rwt[1], Rwt[2]),
                        a=True)
        select(cl=True)
        if (i % 2 == 0) and (Sec):
            Lsc = cm.circle(c=(0, 0, 0),
                            nr=(0, 0, 1),
                            sw=360,
                            r=1,
                            d=3,
                            ut=0,
                            tol=0.01,
                            s=8,
                            ch=1,
                            n="brow_L_sec_0" + str(i) + "_ctl")
            Lscj = cm.joint(n="brow_L_sec_0" + str(i) + "_jnt")
            Lbnpo = cm.group(Lsc[0], n="brow_L_sec_0" + str(i) + "_bufferNpo")
            Lnpo = cm.group(Lsc[0], n="brow_L_sec_0" + str(i) + "_npo")
            cm.setAttr(Lbnpo + ".t", Lwt[0], Lwt[1], Lwt[2])
            Rsc = cm.circle(c=(0, 0, 0),
                            nr=(0, 0, 1),
                            sw=360,
                            r=1,
                            d=3,
                            ut=0,
                            tol=0.01,
                            s=8,
                            ch=1,
                            n="brow_R_sec_0" + str(i) + "_ctl")
            Rscj = cm.joint(n="brow_R_sec_0" + str(i) + "_jnt")
            Rbnpo = cm.group(Rsc[0], n="brow_R_sec_0" + str(i) + "_bufferNpo")
            Rnpo = cm.group(Rsc[0], n="brow_R_sec_0" + str(i) + "_npo")
            cm.setAttr(Rbnpo + ".t", Rwt[0], Rwt[1], Rwt[2])
            select(cl=True)
            Sec -= 1
    cm.select(cl=True)


# Ctl=cm.curve(d=1,p=[(-0.165186, 0.165186, 0.57),(0.165186, 0.165186, 0.57),(0.165186, -0.165186, 0.57),(-0.165186, -0.165186, 0.57),(-0.165186,0.165186,0.57),(-0.165186, 0.165186, -0.43),(0.165186, 0.165186, -0.43),( 0.165186, -0.165186, -0.43),(-0.165186, -0.165186, -0.43),(-0.165186, 0.165186, -0.43),(-0.165186, 0.165186, 0.57),(0.165186, 0.165186, 0.57),(0.165186, 0.165186, -0.43),(0.165186, -0.165186, -0.43),(0.165186, -0.165186, 0.57),(-0.165186, -0.165186, 0.57),(-0.165186, -0.165186, -0.43)],k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],n="brow_L0"+str(i)+"_tweakBrow_ctl")
# Grp=cm.group(Ctl[0],q
예제 #33
0
    def execute(self):

        sx = self.sx
        sy = self.sy
        sdv = self.sdv
        sdu = self.sdu
        tap = self.tap
        degs = self.degs
        subCurve = self.subCurve
        clean = self.clean
        do_uvs = self.do_uvs
        rbc = self.rbc
        cTol = self.cTol
        cSubd = self.cSubd

        if cmds.checkBox(self.aUACCB, q=True, v=True):
            useAltShape = True
        else:
            useAltShape = False

        multSel = cmds.ls(sl=True, fl=True, ap=True)
        if cmds.objectType(multSel[0]) == 'mesh':
            thisIsAMesh = True
        else:
            thisIsAMesh = False
        # Select curve type to extrude along - convert and store
        for x in multSel:
            print x
            if thisIsAMesh != True:
                cmds.select(x)
            else:
                cmds.select(multSel)

            objSel = cmds.ls(sl=True, fl=True, ap=True)
            if self.ko == 1:
                dupObj = cmds.duplicate(objSel)
                objSel = dupObj
            if len(objSel) > 1:
                print objSel
                if degs == 0:
                    curveDg = cmds.promptDialog(
                        t='Enter Degrees:',
                        m='Enter Degrees - ie. 1 for linear, 3 for curved')
                    objSel = cmds.polyToCurve(f=2,
                                              dg=int(
                                                  cmds.promptDialog(q=True,
                                                                    tx=True)))
                else:
                    objSel = cmds.polyToCurve(f=2,
                                              dg=int(degs),
                                              n='%s_curve' %
                                              objSel[0].split('.')[0])
            else:
                objType = cmds.listRelatives(objSel[0], f=True)
                if cmds.objectType(
                        objType[0]) != 'nurbsCurve' and cmds.objectType(
                            objType[0]) != 'bezierCurve':
                    cmds.error(
                        'Select the nurbs curve first, then the object to align'
                    )
                if cmds.objectType(objType[0]) == 'bezierCurve':
                    mm.eval("bezierCurveToNurbs;")
            # Create a nurbs curve for the extrusion
            if useAltShape:
                nurbsCir = self.objToUse
            else:
                nurbsCir = cmds.circle(n='extrudeCircle',
                                       d=3,
                                       r=1,
                                       nr=(0, 0, 1),
                                       sw=360,
                                       ch=True,
                                       s=8)
            objCV = cmds.ls('%s.ep[*]' % objSel[0], fl=True)

            noOfCV = len(objCV)
            firstCV = 0
            lastCV = noOfCV - 1
            cvNumberToUse = firstCV

            # Rebuild the curve to help with uniformity
            if self.rev == 1:
                cmds.reverseCurve(objSel[0], ch=0, rpo=1)

            if rbc == 1:
                try:
                    cmds.rebuildCurve(objSel[0],
                                      ch=0,
                                      rpo=1,
                                      rt=4,
                                      end=1,
                                      kr=0,
                                      kcp=0,
                                      kep=1,
                                      kt=0,
                                      s=cSubd,
                                      d=3,
                                      tol=cTol)
                    cmds.rebuildCurve(objSel[0],
                                      ch=0,
                                      rpo=1,
                                      rt=0,
                                      end=1,
                                      kr=0,
                                      kcp=0,
                                      kep=1,
                                      kt=0,
                                      s=cSubd,
                                      d=3,
                                      tol=cTol)
                except:
                    cmds.warning(
                        'Tolerance for rebuild likely to low, try a higher value or turn Rebuild Curve off'
                    )

            if do_uvs == 1:
                objShape = cmds.listRelatives(objSel[0], c=True, type='shape')
                mInfo = cmds.shadingNode('curveInfo',
                                         n='cMeasure',
                                         asUtility=True)
                cmds.connectAttr('%s.local' % objShape[0],
                                 '%s.inputCurve' % mInfo)
                curveLength = cmds.getAttr('%s.arcLength' % mInfo)
                cmds.delete(mInfo)

                self.uvRatio = float(
                    (((sx * sy) * 2.0) * math.pi) / curveLength)
                print "uvRatio:  " + str(self.uvRatio)

            # Create a tangent contraint to position nurbs circle to the first cv
            cvPos = cmds.xform('%s.ep[%d]' % (objSel[0], cvNumberToUse),
                               query=True,
                               ws=True,
                               t=True)
            cmds.xform(nurbsCir[0], ws=True, t=(cvPos[0], cvPos[1], cvPos[2]))
            fastCon = cmds.tangentConstraint(objSel[0],
                                             nurbsCir[0],
                                             aim=(0, 0, 1))
            cmds.delete(fastCon[0])

            # Extrude along curve and set attributes
            pipeExt = cmds.extrude(nurbsCir[0],
                                   objSel[0],
                                   n='%s_pipe' % objSel[0],
                                   ch=True,
                                   rn=subCurve,
                                   po=1,
                                   et=2,
                                   ucp=1,
                                   fpt=1,
                                   upn=1,
                                   rotation=0,
                                   scale=1,
                                   rsp=1)
            pipeTes = cmds.listConnections(pipeExt[1], type='nurbsTessellate')
            if subCurve != 0:
                pipeSubCurve = cmds.listConnections(pipeExt[1],
                                                    type='subCurve')

            cmds.setAttr('%s.format' % pipeTes[0], 2)
            cmds.setAttr('%s.polygonType' % pipeTes[0], 1)
            cmds.setAttr('%s.uType' % pipeTes[0], 2)
            cmds.setAttr('%s.vType' % pipeTes[0], 2)
            cmds.setAttr('%s.vNumber' % pipeTes[0], sdv)
            cmds.setAttr('%s.uNumber' % pipeTes[0], sdu)

            # Add attributes
            if clean == 0:
                cmds.addAttr(pipeExt[0], ln='________', k=True)
                cmds.setAttr('%s.________' % pipeExt[0], l=True)
                cmds.addAttr(pipeExt[0], ln='Ext_ScaleX', k=True, dv=sx)
                cmds.addAttr(pipeExt[0], ln='Ext_ScaleY', k=True, dv=sy)
                cmds.connectAttr('%s.Ext_ScaleX' % pipeExt[0],
                                 '%s.scaleX' % nurbsCir[0])
                cmds.connectAttr('%s.Ext_ScaleY' % pipeExt[0],
                                 '%s.scaleY' % nurbsCir[0])
                cmds.addAttr(pipeExt[0],
                             ln='Ext_DivisionV',
                             at='short',
                             k=True,
                             dv=sdv)
                cmds.connectAttr('%s.Ext_DivisionV' % pipeExt[0],
                                 '%s.vNumber' % pipeTes[0])
                cmds.addAttr(pipeExt[0],
                             ln='Ext_DivisionU',
                             at='short',
                             k=True,
                             dv=sdu)
                cmds.connectAttr('%s.Ext_DivisionU' % pipeExt[0],
                                 '%s.uNumber' % pipeTes[0])
                if subCurve != 0:
                    cmds.addAttr(pipeExt[0],
                                 ln='Ext_Length',
                                 k=True,
                                 dv=1,
                                 max=1,
                                 min=0)
                    cmds.connectAttr('%s.Ext_Length' % pipeExt[0],
                                     '%s.maxValue' % pipeSubCurve[1])
                cmds.addAttr(pipeExt[0], ln='Ext_Taper', k=True, dv=tap, min=0)
                cmds.connectAttr('%s.Ext_Taper' % pipeExt[0],
                                 '%s.scale' % pipeExt[1])
                cmds.addAttr(pipeExt[0], ln='Ext_Twist', k=True, dv=1)
                cmds.connectAttr('%s.Ext_Twist' % pipeExt[0],
                                 '%s.rotation' % pipeExt[1])
                cmds.addAttr(pipeExt[0], ln='Ext_ComponentPivot', k=True, dv=1)
                cmds.connectAttr('%s.Ext_ComponentPivot' % pipeExt[0],
                                 '%s.useComponentPivot' % pipeExt[1])

            curveGrpNode = cmds.createNode('transform', n='pipeCurves')
            cmds.parent(nurbsCir, curveGrpNode)
            cmds.parent(objSel, curveGrpNode)

            cmds.setAttr('%s.inheritsTransform' % curveGrpNode, 0)
            cmds.setAttr('%s.visibility' % curveGrpNode, 1)
            cmds.parent(curveGrpNode, pipeExt[0])
            cmds.select(pipeExt[0])
            if do_uvs == 1:
                cmds.polyLayoutUV(ps=0.2)
                cmds.polyEditUV(sv=1, su=self.uvRatio)
                cmds.polyEditUV(sv=0.95, su=0.95)
                cmds.select(pipeExt[0])
                CentreUVs()
                if clean == 1:
                    cmds.delete(ch=True)
                    cmds.delete(curveGrpNode)
                    cmds.select(pipeExt[0])
            if thisIsAMesh == True:
                print 'hello'
                break
def createNurb(uNumber=5, vNumber=5, side=None, name=None, mX=0, mY=0, mZ=0):
    name = '{}_{}_nurb'.format(name, side)

    try:
        crv = cmds.polyToCurve(n='deletableCurve',
                               form=2,
                               degree=3,
                               conformToSmoothMeshPreview=1)[0]

        degs = cmds.getAttr('{}.degree'.format(crv))
        spans = cmds.getAttr('{}.spans'.format(crv))

        cvs = degs + spans
        #
        #crv1 = cmds.duplicate(crv, n='deletableCurve1')[0]
        #cmds.select('{}.cv[0:{}]'.format(crv1, cvs))

        #cmds.move(mX, mY, mZ, r=True, os=True, wd=True)

        #crv2 = cmds.duplicate(crv, n='deletableCurve2')[0]
        #cmds.select('{}.cv[0:{}]'.format(crv2, cvs))

        #mX= mX*(-1)
        #mY= mY*(-1)
        #mZ= mZ*(-1)

        #cmds.move(mX, mY, mZ, r=True, os=True, wd=True)
        mnX = mX * (-1)
        offst_curve1 = cmds.offsetCurve(crv, d=mX)[0]
        offst_curve2 = cmds.offsetCurve(crv, d=mnX)[0]

        surf = cmds.loft(offst_curve1,
                         offst_curve2,
                         ch=1,
                         u=1,
                         c=0,
                         ar=1,
                         d=3,
                         ss=1,
                         rn=0,
                         po=0,
                         rsn=True,
                         n=name)[0]
        cmds.rebuildSurface(surf,
                            ch=1,
                            rpo=1,
                            rt=0,
                            end=1,
                            kr=0,
                            kcp=0,
                            kc=0,
                            su=uNumber,
                            du=3,
                            sv=vNumber,
                            dv=3,
                            tol=0.01,
                            fr=0,
                            dir=2)
        cmds.delete(surf, ch=True)
        for c in [crv, offst_curve1, offst_curve2]:
            cmds.delete(c)

    except:
        cmds.nurbsPlane(n=name,
                        ax=(0, 1, 0),
                        w=True,
                        lr=True,
                        d=3,
                        u=uNumber,
                        v=vNumber,
                        ch=1)
예제 #35
0
def sysFromEdgeLoop(edge, surface, name=""):
    # Extract curve from edge
    cmds.select(edge)
    anchor_curve = cmds.polyToCurve(name=name + '_Anchor_Crv',
                                    form=2,
                                    degree=1,
                                    conformToSmoothMeshPreview=0)[0]

    # Check curve direction and reverse
    reverse_crv = xDirection_positive(anchor_curve)
    if reverse_crv is False:
        cmds.reverseCurve(anchor_curve, ch=0, rpo=1)
    cmds.delete(anchor_curve, ch=1)

    # Create locators on each anchor curve CV
    locator_list = locatorOnCVs(anchor_curve, scale=0.2)
    # Connect locators to CVs
    loc_pci_node_list = connectLocatorToCrv(locator_list, anchor_curve)

    # Duplicate -> Rebuild to low res
    driver_crv = cmds.duplicate(anchor_curve, name=name + '_Driver_Crv')[0]
    cmds.rebuildCurve(driver_crv,
                      ch=0,
                      rpo=1,
                      rt=0,
                      end=1,
                      kr=0,
                      kcp=0,
                      kep=1,
                      kt=1,
                      s=6,
                      d=1,
                      tol=0.01)
    cmds.rebuildCurve(driver_crv,
                      ch=0,
                      rpo=1,
                      rt=0,
                      end=1,
                      kr=0,
                      kcp=1,
                      kep=1,
                      kt=1,
                      s=4,
                      d=3,
                      tol=0.01)
    cmds.delete(driver_crv, ch=1)

    # Wire high res to low res curve
    driver_wire_node = cmds.wire(anchor_curve,
                                 w=driver_crv,
                                 gw=False,
                                 en=1.000000,
                                 ce=0.000000,
                                 li=0.000000)

    # Create joints on each low res CV
    cv_postion = getCVAngle(driver_crv)
    driver_jnt_list = []
    ctrl_dict = {}
    ctrl_list = []
    remoteCtrl_loc_dict = {}
    remoteCtrl_loc_list = []

    for n, position in enumerate(cv_postion):
        cmds.select(cl=1)
        driver_jnt = cmds.joint(rad=0.3,
                                n="{}_{:02d}_Ctrl_Jnt".format(name, n))
        driver_jnt_list.append(driver_jnt)
        cmds.xform(driver_jnt, t=position[0], ro=[0, position[1][1], 0])

        # Create controls for each joint
        ctrl_data = tpu.build_ctrl(ctrl_type="cube",
                                   name="{}_{:02d}".format(name, n),
                                   scale=0.3,
                                   spaced=1)
        ctrl_dict.update({ctrl_data['control']: ctrl_data['group']})
        ctrl_list.append(ctrl_data['control'])
        cmds.xform(ctrl_data['group'],
                   t=position[0],
                   ro=[0, position[1][1], 0])

        # Create remote ctrl locator
        remoteCtrl_loc = cmds.spaceLocator(
            n="{}_{:02d}_RemoteCtrl_Loc".format(name, n))[0]
        for i in "X,Y,Z".split(","):
            cmds.setAttr("{}.localScale{}".format(remoteCtrl_loc, i), 0.3)
        remoteCtrl_loc_grp = cmds.group(remoteCtrl_loc,
                                        n=remoteCtrl_loc + "_Grp")
        remoteCtrl_loc_dict.update({remoteCtrl_loc: remoteCtrl_loc_grp})
        remoteCtrl_loc_list.append(remoteCtrl_loc)
        cmds.xform(remoteCtrl_loc_grp,
                   t=position[0],
                   ro=[0, position[1][1], 0])

        # Connect control/joint transforms
        cmds.parentConstraint(remoteCtrl_loc, driver_jnt, mo=1)
        for attr in ".t,.rotate,.s".split(','):
            cmds.connectAttr(ctrl_data['control'] + attr,
                             remoteCtrl_loc + attr,
                             f=1)

    # Bind low res curve to joints
    skinCluster_node = cmds.skinCluster(driver_jnt_list, driver_crv)

    # Create system on surface
    surface_sys_data = follicleOnClosestPoint(surface, locator_list, name)
    follicle_dict = surface_sys_data[0]

    # Create joints for each follicle
    follicle_jnt_list = jointsOnSelection(follicle_dict.keys(),
                                          constraint=True,
                                          rad=0.2)

    # Group and organize system on Outliner
    crv_grp = cmds.group(anchor_curve,
                         driver_crv,
                         driver_crv + "BaseWire",
                         n="{}_Crv_Grp".format(name))
    # Locator Groups
    remoteCtrl_loc_grp = cmds.group(remoteCtrl_loc_dict.values(),
                                    n="{}_RemoteCtrl_Loc_Grp".format(name))
    aim_loc_grp = cmds.group(locator_list, n="{}_Aim_Loc_Grp".format(name))
    locator_grp = cmds.group(remoteCtrl_loc_grp,
                             aim_loc_grp,
                             n="{}_Loc_Grp".format(name))
    # Joint groups
    bind_joint_grp = cmds.group(follicle_jnt_list,
                                n="{}_Bind_Jnt_Grp".format(name))
    ctrl_joint_grp = cmds.group(driver_jnt_list,
                                n="{}_Ctrl_Jnt_Grp".format(name))
    joint_grp = cmds.group(bind_joint_grp,
                           ctrl_joint_grp,
                           n="{}_Jnt_Grp".format(name))
    # Controls group
    ctrl_grp = cmds.group(ctrl_dict.values(), n="{}_Ctrl_Grp".format(name))
    # Follicle group
    follicle_grp = cmds.group(follicle_dict.keys(),
                              n="{}_Flc_Grp".format(name))

    main_sys_grp = cmds.group(crv_grp,
                              locator_grp,
                              ctrl_grp,
                              follicle_grp,
                              joint_grp,
                              n="{}_Sys_Grp".format(name))

    sys_data = {
        "main_sys_grp": main_sys_grp,
        "loc_pci_node_list": loc_pci_node_list,
        "driver_wire_node": driver_wire_node,
        "skinCluster_node": skinCluster_node,
        "surface_closestPoint_node_list": surface_sys_data[1],
        "surface_setRange_node_list": surface_sys_data[2],
        "ctrl_list": ctrl_list,
        "ctrl_dict": ctrl_dict,
        "remoteCtrl_dict": remoteCtrl_loc_dict,
        "remoteCtrl_list": remoteCtrl_loc_list
    }

    return sys_data
예제 #36
0
def doLayeredFkTongue():
    sides = ['L', 'R']
    facialFGrp = 'facial_fGrp'
    facialDriversGrp = 'facialDrivers'
    tongueRoot = 'tongue_jnt_1_orig'
    storeGroup = 'tongue_noXformGrp'
    headSKN = 'head_SKN'

    bcsNode = mc.ls(type='DPK_bcs')[0]
    headMeshShape = mel.eval('DPK_bcs -q -g %s' % bcsNode)[0]
    '''
    #get edges Manually
    getEdges = mc.ls(sl=True,fl=True)
    Edges = []
    for edge in getEdges:
        asciiName = edge.encode('ascii','ignore')
        Edges.append(asciiName)
    print Edges
    '''

    # get list of edges to generate base tongue surf
    lVertices = [
        u'head_hi_bcsObj.vtx[5677]', u'head_hi_bcsObj.vtx[5678]',
        u'head_hi_bcsObj.vtx[5683]', u'head_hi_bcsObj.vtx[5686]',
        u'head_hi_bcsObj.vtx[5689]', u'head_hi_bcsObj.vtx[5692]',
        u'head_hi_bcsObj.vtx[5693]', u'head_hi_bcsObj.vtx[5697]',
        u'head_hi_bcsObj.vtx[5699]', u'head_hi_bcsObj.vtx[5700]',
        u'head_hi_bcsObj.vtx[5710]', u'head_hi_bcsObj.vtx[5714]',
        u'head_hi_bcsObj.vtx[5715]', u'head_hi_bcsObj.vtx[5775]',
        u'head_hi_bcsObj.vtx[7369]', u'head_hi_bcsObj.vtx[7558]',
        u'head_hi_bcsObj.vtx[7561]', u'head_hi_bcsObj.vtx[7564]',
        u'head_hi_bcsObj.vtx[7567]', u'head_hi_bcsObj.vtx[7570]',
        u'head_hi_bcsObj.vtx[7572]', u'head_hi_bcsObj.vtx[7574]',
        u'head_hi_bcsObj.vtx[7576]', u'head_hi_bcsObj.vtx[7582]',
        u'head_hi_bcsObj.vtx[7586]', u'head_hi_bcsObj.vtx[7590]',
        u'head_hi_bcsObj.vtx[7600]', u'head_hi_bcsObj.vtx[8259]',
        u'head_hi_bcsObj.vtx[8291]', u'head_hi_bcsObj.vtx[8303]'
    ]
    rVertices = [
        u'head_hi_bcsObj.vtx[1274]', u'head_hi_bcsObj.vtx[1275]',
        u'head_hi_bcsObj.vtx[1280]', u'head_hi_bcsObj.vtx[1283]',
        u'head_hi_bcsObj.vtx[1286]', u'head_hi_bcsObj.vtx[1289]',
        u'head_hi_bcsObj.vtx[1290]', u'head_hi_bcsObj.vtx[1294]',
        u'head_hi_bcsObj.vtx[1296]', u'head_hi_bcsObj.vtx[1297]',
        u'head_hi_bcsObj.vtx[1307]', u'head_hi_bcsObj.vtx[1311]',
        u'head_hi_bcsObj.vtx[1312]', u'head_hi_bcsObj.vtx[1372]',
        u'head_hi_bcsObj.vtx[2966]', u'head_hi_bcsObj.vtx[3155]',
        u'head_hi_bcsObj.vtx[3158]', u'head_hi_bcsObj.vtx[3161]',
        u'head_hi_bcsObj.vtx[3164]', u'head_hi_bcsObj.vtx[3167]',
        u'head_hi_bcsObj.vtx[3169]', u'head_hi_bcsObj.vtx[3171]',
        u'head_hi_bcsObj.vtx[3173]', u'head_hi_bcsObj.vtx[3179]',
        u'head_hi_bcsObj.vtx[3183]', u'head_hi_bcsObj.vtx[3187]',
        u'head_hi_bcsObj.vtx[3197]', u'head_hi_bcsObj.vtx[3856]',
        u'head_hi_bcsObj.vtx[3888]', u'head_hi_bcsObj.vtx[3900]'
    ]
    lEdges = mc.polyListComponentConversion(lVertices,
                                            fv=True,
                                            te=True,
                                            internal=True)
    rEdges = mc.polyListComponentConversion(rVertices,
                                            fv=True,
                                            te=True,
                                            internal=True)
    edgesLists = [lEdges, rEdges]

    #creates store group for futur cleanup
    mc.group(n=storeGroup, em=True)
    mc.setAttr('%s.inheritsTransform' % storeGroup, False)
    mc.hide(storeGroup)
    mc.parent(storeGroup, facialFGrp)
    #create head_SKN decomposeMatrix for later use
    headSKMDM = mc.createNode('decomposeMatrix', n='%s_dm' % headSKN)
    mc.connectAttr('%s.worldMatrix[0]' % headSKN, '%s.inputMatrix' % headSKMDM)

    #creates nodeBased surf from edges selection
    baseTongueLoft = mc.createNode('loft', n='tongueBase_loft')
    mc.setAttr('%s.autoReverse' % baseTongueLoft, False)
    tongueBaseSurf = mc.createNode('nurbsSurface', n='tongueBase_surfShape')
    mc.connectAttr('%s.outputSurface' % baseTongueLoft,
                   '%s.create' % tongueBaseSurf)
    mc.parent(mc.listRelatives(tongueBaseSurf, p=True)[0], facialDriversGrp)

    petcList = []
    for i, list in enumerate(edgesLists):
        mc.select(list)
        baseTongueCrv = mc.polyToCurve(ch=True,
                                       degree=3,
                                       form=0,
                                       n='%s_tongueBase_crv' % sides[i])
        baseTonguePetc = mc.rename(baseTongueCrv[1],
                                   '%s_tongueBase_petc' % sides[i])
        petcList.append(baseTonguePetc)
        curveShape = mc.listRelatives(baseTongueCrv[0], s=True)[0]
        mc.connectAttr('%s.outputcurve' % baseTonguePetc,
                       '%s.inputCurve[%d]' % (baseTongueLoft, i))
        mc.delete(baseTongueCrv[0])

    #Generate FK proxy hierarchy from template tongue
    ## get all tongue Pose nodes
    allTongueObj = mc.listRelatives(tongueRoot, ad=True, type='transform')
    tonguePose = []
    for obj in allTongueObj:
        splitName = obj.rsplit('_', 2)
        if splitName[1] == 'pose':
            tonguePose.append(obj)
    ## create FK proxy  hyerarchy
    ###creates proxy Nodes
    tonguePoseProxy = []
    for pose in tonguePose:
        mc.select(cl=True)
        newPose = mc.joint(n='%s_proxy' % pose)
        tonguePoseProxy.append(newPose)
        mc.setAttr('%s.radius' % newPose, 0.02)
        newSkin = mc.duplicate(newPose, n=newPose.replace('pose', 'SKN'))
        mc.parent(newSkin, newPose)
        mewOrig = orig.orig(objlist=[newPose],
                            suffix=['_orig'],
                            origtype='joint',
                            fromsel=False,
                            viz=False,
                            get_ssc=False,
                            rtyp='auto')[0]
        mc.rename(mewOrig, mewOrig.replace('pose', 'jnt'))

    ### recreates parenting
    firstProxyNode = ''
    for pose in tonguePose:
        poseOrig = mc.listRelatives(pose, p=True)[0]
        poseProxy = '%s_proxy' % pose
        poseOrigProxy = mc.listRelatives(poseProxy, p=True)[0]

        poseOrigParent = mc.listRelatives(poseOrig, p=True)[0]
        poseOrigProxyParent = '%s_proxy' % poseOrigParent

        if not poseOrigParent == 'jaw_SKN':
            mc.parent(poseOrigProxy, poseOrigProxyParent)
        elif poseOrigParent == 'jaw_SKN':
            firstProxyNode = poseOrigProxy

    ### match proxy nodes on local nodes
    mc.parent(firstProxyNode, 'jaw_SKN')
    firstNode = firstProxyNode.replace('_proxy', '')
    patchLib.smartcopyAttr(firstNode, firstProxyNode)

    allProxyNodes = mc.listRelatives(firstProxyNode, ad=True)
    for node in allProxyNodes:
        rigNode = node.replace('_proxy', '')
        patchLib.smartcopyAttr(rigNode, node)

    # create cns nodes
    tongueCns = []
    for pose in tonguePoseProxy:
        ### create cns and hooks hierarchy
        poseTest = int(pose.rsplit('_', 2)[1])
        cnsNode = mc.group(n=pose.replace('proxy', 'cns'), em=True)
        mc.parent(cnsNode, pose, r=True)
        mc.parent(cnsNode, w=True)
        cnsHookNode = mc.duplicate(cnsNode, n=cnsNode.replace('cns', 'hook'))
        tongueCns.append(cnsNode)

        ### connect cns nodes to surface with Xrivet, then constraint proxy nodes to cns nodes
        surf = mc.listRelatives(tongueBaseSurf, p=True)[0]

        if poseTest <= (len(tonguePoseProxy) - 3):
            xRivet = xrivetTrOnNurbs(cnsNode,
                                     surf,
                                     mainDirection=1,
                                     out='worldSpace[0]',
                                     u=None,
                                     v=None,
                                     offsetOrient=[0, 0, 0],
                                     min=False)
            mc.parentConstraint(cnsHookNode, pose, mo=True)
            massConnect(pose, pose.replace('_proxy', ''))
            mc.connectAttr('%s.outputScale' % headSKMDM, '%s.scale' % cnsNode)
        else:
            mc.parentConstraint('jaw_SKN', cnsNode, mo=True)
            mc.parentConstraint(cnsHookNode, pose, mo=True)
            massConnect(pose, pose.replace('_proxy', ''))
        mc.parent(cnsHookNode, cnsNode)

        ### connect local poseNodes rotate ORders to proxy rotate ORders
        source = pose.replace('_proxy', '')
        mc.connectAttr('%s.rotateOrder' % source, '%s.rotateOrder' % pose)

        #### cleanup
        mc.parent(cnsNode, storeGroup)
예제 #37
0
def makeCurve(edgeloop):
	return cmds.polyToCurve(form=2, degree=1)