Пример #1
0
def leafSetting( inputTargetMesh, edgeList=[29, 34, 39, 44, 77, 128], **options ):
    
    reverseOrder = False
    if options.has_key( 'reverseOrder' ):
        reverseOrder = True
    
    targetMesh = pymel.core.ls( inputTargetMesh )[0]
    
    edges = []
    for edgeIndex in edgeList:
        edges.append( targetMesh + '.e[%d]' % edgeIndex )
    
    bindJoints = sgCmds.edgeToJointLine( edges, 4, reverseOrder=reverseOrder )
    ctls = sgCmds.createFkControl( bindJoints[0], 5 )
    
    for ctl in ctls:
        sgCmds.setIndexColor( ctl.getShape(), 6 )
Пример #2
0
def leafSetting(inputTargetMesh,
                edgeList=[29, 34, 39, 44, 77, 128],
                **options):

    reverseOrder = False
    if options.has_key('reverseOrder'):
        reverseOrder = True

    targetMesh = pymel.core.ls(inputTargetMesh)[0]

    edges = []
    for edgeIndex in edgeList:
        edges.append(targetMesh + '.e[%d]' % edgeIndex)

    bindJoints = sgCmds.edgeToJointLine(edges, 4, reverseOrder=reverseOrder)
    ctls = sgCmds.createFkControl(bindJoints[0], 5)

    for ctl in ctls:
        sgCmds.setIndexColor(ctl.getShape(), 6)
Пример #3
0
from sgMaya import sgCmds, sgModel
import pymel.core

sels = pymel.core.ls(sl=1)
for sel in sels:
    bb = pymel.core.exactWorldBoundingBox(sel)
    bbmin = bb[:3]
    bbmax = bb[-3:]

    xLength = bbmax[0] - bbmin[0]
    zLength = bbmax[2] - bbmin[2]

    bbc = [(bbmin[i] + bbmax[i]) / 2.0 for i in range(3)]

    maxLength = max([xLength, zLength])

    ctl = sgCmds.makeController(sgModel.Controller.circlePoints,
                                maxLength / 2.0 * 1.2,
                                makeParent=1)
    ctl.getParent().t.set(bbc)
    ctl.rename('Ctl_%s' % sel.name())
    sgCmds.setIndexColor(ctl, 29)

    sgCmds.setGeometryMatrixToTarget(sel, ctl)
    sgCmds.constrain(ctl, sel, ct=1, cr=1, cs=1, csh=1)
from sgMaya import sgCmds, sgModel
import pymel.core

sels = pymel.core.ls(sl=1)
target = sels[0]
pymel.core.delete(target.getShape())

circle = sgCmds.makeController(sgModel.Controller.circlePoints, 5)
circle.shape_rz.set(90)
pymel.core.parent(circle.getShape(), target, add=1, shape=1)
sgCmds.setIndexColor(target, 13)
pymel.core.refresh()
pymel.core.delete(circle)
pymel.core.select(target)
Пример #5
0
def createGrassController( meshs, ground ):
    
    import pymel.core
    from sgMaya import sgCmds, sgModel
    reload( sgCmds )
    from maya import mel, cmds, OpenMaya
    
    curves = []
    ctlsList = []
    
    bbys = []
    for mesh in meshs:
        bb = pymel.core.exactWorldBoundingBox( mesh )
        bbys.append( bb[4] )
    meshMaxY = max( bbys )
    
    coreGrp = pymel.core.createNode( 'transform', n='grassRigCoreGrp' )
    pivCtls = []
    for mesh in meshs:
        pymel.core.select( mesh + '.e[15]' )
        mel.eval( 'SelectEdgeLoopSp;' )
        targetCurve = pymel.core.ls( mel.eval( 'polyToCurve -form 2 -degree 3;' )[0] )[0]
        curveCuted = sgCmds.cutCurve( targetCurve, ground )
        
        curveBB = pymel.core.exactWorldBoundingBox( curveCuted )
        curvePos = [ ( curveBB[0] + curveBB[3] )/2 , 0, ( curveBB[2] + curveBB[5] )/2 ]
        curveScaleY = meshMaxY/curveBB[4]
        curveP = pymel.core.createNode( 'transform' )
        curveP.t.set( curvePos )
        curveCuted.setParent( curveP )
        curveP.sy.set( curveScaleY )
        curveCuted.setParent( w=1 )
        pymel.core.makeIdentity( curveCuted, apply=1, t=1, r=1, s=1, n=0, pn=1 )
        pymel.core.delete( targetCurve, curveP )
        
        mel.eval( 'rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s 7 -d 3 -tol 0.01 "%s";' % curveCuted.name() )
        wire = pymel.core.ls( mel.eval( 'wire -gw false -en 1.000000 -ce 0.000000 -li 0.000000 -w %s %s;' % ( curveCuted.name(), mesh ) )[0] )[0]
        pymel.core.setAttr( wire + '.dropoffDistance[0]', 10000 )
        curves = wire.listConnections( s=1, d=0, type='nurbsCurve' )
        
        ctls = sgCmds.createControllerByCurveCVs( curveCuted )
        
        curves.append( curveCuted )
        ctlsList.append( ctls )
        
        firstCtl = ctls[0]
        pFirstCtl = firstCtl.getParent()
        pivCtl = pymel.core.createNode( 'transform', n='Piv_' + firstCtl.nodeName() )
        pivCtl.t.set( pymel.core.xform( pFirstCtl, q=1, ws=1, t=1 ) )
        pFirstCtl.setParent( pivCtl )
        pivCtl.v.set( 0 )
        pivCtls.append( pivCtl )
        pymel.core.parent( curves, pivCtl, coreGrp )
        for curve in curves:
            curve.v.set( 0 )
    
    bbAllCtls = OpenMaya.MBoundingBox()
    for pivCtl in pivCtls:
        bbAllCtls.expand( OpenMaya.MPoint( *pymel.core.xform( pivCtl, q=1, ws=1, t=1 ) ) )
    duCurvePivPoint = bbAllCtls.center()
    duCurvePivPoint = [ duCurvePivPoint.x, duCurvePivPoint.y, duCurvePivPoint.z ]
    duCurveEndPoint = [ duCurvePivPoint[0], meshMaxY, duCurvePivPoint[2] ]
    
    duCurve = pymel.core.curve( p=[ duCurvePivPoint, duCurveEndPoint ], d=1 )
    duCurve.v.set( 0 )
    mel.eval( 'rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s 7 -d 3 -tol 0.01 "%s";' % duCurve.name() )
    
    duCtls = sgCmds.createControllerByCurveCVs( duCurve )
    pivCtl = pymel.core.createNode( 'transform', n='Piv_' + duCtls[0].nodeName() )
    pivCtlPos = pymel.core.xform( duCtls[0], q=1, ws=1, t=1 )
    pivCtl.t.set( pivCtlPos )
    duCtls[0].getParent().setParent( pivCtl )
    sgCmds.makeParent( pivCtl )
    
    pivCtlMaxY = pymel.core.exactWorldBoundingBox( pivCtl )[4]
    lookAtCtl = sgCmds.makeController( sgModel.Controller.conePoints, makeParent=1, n='Ctl_LookAt_%s' % duCurve.nodeName() )
    lookAtCtl.getParent().t.set( pivCtlPos[0], pivCtlMaxY, pivCtlPos[2] )
    sgCmds.lookAtConnect( lookAtCtl, pivCtl )
    
    composeMatrix = pymel.core.createNode( 'composeMatrix' )
    wtAddMtx = pymel.core.createNode( 'wtAddMatrix' )
    composeMatrix.outputMatrix >> wtAddMtx.i[0].m
    wtAddMtx.i[0].w.set( 0.5 )
    lookAtCtl.matrix >> wtAddMtx.i[1].m
    wtAddMtx.i[1].w.set( 0.5)
    dcmpWtAdd = sgCmds.getDecomposeMatrix( wtAddMtx.matrixSum )
    
    for i in range( len( duCtls ) ):
        sgCmds.makeParent( duCtls[i].getParent(), n= 'Piv_' + duCtls[i].nodeName() )
        dcmpWtAdd.outputRotate >> duCtls[i].getParent().r
    
    for i in range( len( duCtls ) ):
        dcmp = sgCmds.getLocalDecomposeMatrix( duCtls[i].wm, duCtls[i].getParent().pim )
        for j in range( len( ctlsList ) ):
            dcmp.outputTranslate >> ctlsList[j][i].t
            dcmp.outputRotate >> ctlsList[j][i].r
            dcmp.outputScale >> ctlsList[j][i].s
    
    for eachPiv in pivCtls:
        pivCtl.r >> eachPiv.r
    
    sgCmds.addOptionAttribute( lookAtCtl )
    sgCmds.addAttr( lookAtCtl, ln='showDetail', k=1, min=0, max=1 )
    lookAtCtl.attr( 'showDetail' ) >> pivCtl.v
    
    pymel.core.parent( coreGrp )
    coreGrp.attr( 'inheritsTransform' ).set( 0 )
    coreGrp.t.set( lock=1 )
    coreGrp.r.set( lock=1 )
    coreGrp.s.set( lock=1 )
    
    mainGrp = pymel.core.createNode( 'transform', n='grassRigMainGrp' )
    jnt = pymel.core.joint()
    pymel.core.move( mainGrp, duCurvePivPoint[0], duCurvePivPoint[1], duCurvePivPoint[2], ws=1 )
    pymel.core.parent( duCurve, coreGrp, pivCtl.getParent(), lookAtCtl.getParent(), mainGrp )
    pymel.core.skinCluster( meshs, jnt )
    
    for duCtl in duCtls:
        sgCmds.setIndexColor( duCtl, 28 )

    sgCmds.setIndexColor( lookAtCtl, 22 )
    pymel.core.select( lookAtCtl )
    
    
    
Пример #6
0
from sgMaya import sgCmds
import pymel.core


def renameParent(*targets):
    for target in targets:
        target.getParent().rename('P' + target.shortName())


sels = pymel.core.ls(sl=1)
topGrp = sels[-1].getAllParents()[-1]

ctlTops = []
for i in range(len(sels) - 1):
    topJoint = sels[i]
    ctls, pinCtls = sgCmds.createFkControl(topJoint, 1.0, 0)
    for j in range(len(ctls)):
        ctls[j].rename('Ctl_' + topGrp + '_bs_%d_%d' % (i, j))
        renameParent(ctls[j])
        sgCmds.setIndexColor(ctls[j], 29)

    ctlsTop = ctls[0].getAllParents()[0]
    ctlTops.append(ctlsTop)

grp = pymel.core.group(ctlTops)
grp.rename('CtlsGrp_bs_' + topGrp)
    for target in targets:
        target.getParent().rename( 'P' + target.shortName() )

sels = pymel.core.ls( sl=1 )
topGrp = sels[1].getAllParents()[-1]

firstCtl, endCtl, middleCtl, eachCtls, ctlsGrp, etcGrp = sgCmds.createLineController( sels[0] )
firstCtl.shape_sy.set( 6 )
firstCtl.shape_sz.set( 6 )
endCtl.shape_sy.set( 6 )
endCtl.shape_sz.set( 6 )
middleCtl.scaleMult.set( 2 )

firstCtl.rename( 'Ctl_' + topGrp + '_Root00' )
middleCtl.rename( 'Ctl_' + topGrp + '_Root01' )
endCtl.rename( 'Ctl_' + topGrp + '_Root02' )
renameParent( firstCtl, middleCtl, endCtl )
ctlsGrp.rename( 'CtlsGrp_' + topGrp )
etcGrp.rename( 'EtcGrp_' + topGrp )

sgCmds.setIndexColor( firstCtl, 17 )
sgCmds.setIndexColor( middleCtl, 20 )
sgCmds.setIndexColor( endCtl, 17 )

for i in range( len( eachCtls ) ):
    eachCtl = eachCtls[i]
    sgCmds.setIndexColor( eachCtl, 10 )
    eachCtl.shape_sx.set( 2.4 )
    eachCtl.shape_sz.set( 2.4 )
    eachCtl.rename( 'Ctl_' + topGrp + '_RootDt%d' % i )
    renameParent( eachCtl )
from sgMaya import sgCmds
import pymel.core

def renameParent( *targets ):
    for target in targets:
        target.getParent().rename( 'P' + target.shortName() )

sels = pymel.core.ls( sl=1 )
topGrp = sels[-1].getAllParents()[-1]

ctlTops = []
for i in range( len( sels )-1 ):
    topJoint = sels[i]
    ctls, pinCtls = sgCmds.createFkControl( topJoint, 1.0, 0 )
    for j in range( len( ctls ) ):
        ctls[j].rename( 'Ctl_' + topGrp + '_bs_%d_%d' % ( i, j ) )
        renameParent( ctls[j] )
        sgCmds.setIndexColor( ctls[j], 29 )
        
    ctlsTop = ctls[0].getAllParents()[0]
    ctlTops.append( ctlsTop )

grp = pymel.core.group( ctlTops )
grp.rename( 'CtlsGrp_bs_' + topGrp )
Пример #9
0
from sgMaya import sgCmds
import pymel.core

def renameParent( *targets ):
    for target in targets:
        target.getParent().rename( 'P' + target.shortName() )

sels = pymel.core.ls( sl=1 )
topGrp = sels[-1].getAllParents()[-1]

ctlTops = []
for i in range( len( sels )-1 ):
    topJoint = sels[i]
    ctls, pinCtls = sgCmds.createFkControl( topJoint, 1.5, True )
    for j in range( len( ctls ) ):
        ctls[j].rename( 'Ctl_' + topGrp + '_bf_%d_%d' % ( i, j ) )
        renameParent( ctls[j] )
        sgCmds.setIndexColor( ctls[j], 18 )
    for j in range( len( pinCtls ) ):
        if not pinCtls[j]: continue
        pinCtls[j].rename( 'Ctl_' + topGrp + '_bf_%d_%d_Move' % ( i, j ) )
        renameParent( pinCtls[j] )
        sgCmds.setIndexColor( pinCtls[j], 18 )
    
    ctlsTop = ctls[0].getAllParents()[0]
    ctlTops.append( ctlsTop )

grp = pymel.core.group( ctlTops )
grp.rename( 'CtlsGrp_bf_' + topGrp )
from sgMaya import sgCmds, sgModel
import pymel.core

sels = pymel.core.ls( sl=1 )
target = sels[0]
pymel.core.delete( target.getShape() )

circle = sgCmds.makeController( sgModel.Controller.circlePoints, 5 )
circle.shape_rz.set( 90 )
pymel.core.parent( circle.getShape(), target, add=1, shape=1 )
sgCmds.setIndexColor( target, 13 )
pymel.core.refresh()
pymel.core.delete( circle )
pymel.core.select( target )
Пример #11
0
def createGrassController(meshs, ground):

    import pymel.core
    from sgMaya import sgCmds, sgModel
    reload(sgCmds)
    from maya import mel, cmds, OpenMaya

    curves = []
    ctlsList = []

    bbys = []
    for mesh in meshs:
        bb = pymel.core.exactWorldBoundingBox(mesh)
        bbys.append(bb[4])
    meshMaxY = max(bbys)

    coreGrp = pymel.core.createNode('transform', n='grassRigCoreGrp')
    pivCtls = []
    for mesh in meshs:
        pymel.core.select(mesh + '.e[15]')
        mel.eval('SelectEdgeLoopSp;')
        targetCurve = pymel.core.ls(
            mel.eval('polyToCurve -form 2 -degree 3;')[0])[0]
        curveCuted = sgCmds.cutCurve(targetCurve, ground)

        curveBB = pymel.core.exactWorldBoundingBox(curveCuted)
        curvePos = [(curveBB[0] + curveBB[3]) / 2, 0,
                    (curveBB[2] + curveBB[5]) / 2]
        curveScaleY = meshMaxY / curveBB[4]
        curveP = pymel.core.createNode('transform')
        curveP.t.set(curvePos)
        curveCuted.setParent(curveP)
        curveP.sy.set(curveScaleY)
        curveCuted.setParent(w=1)
        pymel.core.makeIdentity(curveCuted, apply=1, t=1, r=1, s=1, n=0, pn=1)
        pymel.core.delete(targetCurve, curveP)

        mel.eval(
            'rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s 7 -d 3 -tol 0.01 "%s";'
            % curveCuted.name())
        wire = pymel.core.ls(
            mel.eval(
                'wire -gw false -en 1.000000 -ce 0.000000 -li 0.000000 -w %s %s;'
                % (curveCuted.name(), mesh))[0])[0]
        pymel.core.setAttr(wire + '.dropoffDistance[0]', 10000)
        curves = wire.listConnections(s=1, d=0, type='nurbsCurve')

        ctls = sgCmds.createControllerByCurveCVs(curveCuted)

        curves.append(curveCuted)
        ctlsList.append(ctls)

        firstCtl = ctls[0]
        pFirstCtl = firstCtl.getParent()
        pivCtl = pymel.core.createNode('transform',
                                       n='Piv_' + firstCtl.nodeName())
        pivCtl.t.set(pymel.core.xform(pFirstCtl, q=1, ws=1, t=1))
        pFirstCtl.setParent(pivCtl)
        pivCtl.v.set(0)
        pivCtls.append(pivCtl)
        pymel.core.parent(curves, pivCtl, coreGrp)
        for curve in curves:
            curve.v.set(0)

    bbAllCtls = OpenMaya.MBoundingBox()
    for pivCtl in pivCtls:
        bbAllCtls.expand(
            OpenMaya.MPoint(*pymel.core.xform(pivCtl, q=1, ws=1, t=1)))
    duCurvePivPoint = bbAllCtls.center()
    duCurvePivPoint = [duCurvePivPoint.x, duCurvePivPoint.y, duCurvePivPoint.z]
    duCurveEndPoint = [duCurvePivPoint[0], meshMaxY, duCurvePivPoint[2]]

    duCurve = pymel.core.curve(p=[duCurvePivPoint, duCurveEndPoint], d=1)
    duCurve.v.set(0)
    mel.eval(
        'rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s 7 -d 3 -tol 0.01 "%s";'
        % duCurve.name())

    duCtls = sgCmds.createControllerByCurveCVs(duCurve)
    pivCtl = pymel.core.createNode('transform',
                                   n='Piv_' + duCtls[0].nodeName())
    pivCtlPos = pymel.core.xform(duCtls[0], q=1, ws=1, t=1)
    pivCtl.t.set(pivCtlPos)
    duCtls[0].getParent().setParent(pivCtl)
    sgCmds.makeParent(pivCtl)

    pivCtlMaxY = pymel.core.exactWorldBoundingBox(pivCtl)[4]
    lookAtCtl = sgCmds.makeController(sgModel.Controller.conePoints,
                                      makeParent=1,
                                      n='Ctl_LookAt_%s' % duCurve.nodeName())
    lookAtCtl.getParent().t.set(pivCtlPos[0], pivCtlMaxY, pivCtlPos[2])
    sgCmds.lookAtConnect(lookAtCtl, pivCtl)

    composeMatrix = pymel.core.createNode('composeMatrix')
    wtAddMtx = pymel.core.createNode('wtAddMatrix')
    composeMatrix.outputMatrix >> wtAddMtx.i[0].m
    wtAddMtx.i[0].w.set(0.5)
    lookAtCtl.matrix >> wtAddMtx.i[1].m
    wtAddMtx.i[1].w.set(0.5)
    dcmpWtAdd = sgCmds.getDecomposeMatrix(wtAddMtx.matrixSum)

    for i in range(len(duCtls)):
        sgCmds.makeParent(duCtls[i].getParent(),
                          n='Piv_' + duCtls[i].nodeName())
        dcmpWtAdd.outputRotate >> duCtls[i].getParent().r

    for i in range(len(duCtls)):
        dcmp = sgCmds.getLocalDecomposeMatrix(duCtls[i].wm,
                                              duCtls[i].getParent().pim)
        for j in range(len(ctlsList)):
            dcmp.outputTranslate >> ctlsList[j][i].t
            dcmp.outputRotate >> ctlsList[j][i].r
            dcmp.outputScale >> ctlsList[j][i].s

    for eachPiv in pivCtls:
        pivCtl.r >> eachPiv.r

    sgCmds.addOptionAttribute(lookAtCtl)
    sgCmds.addAttr(lookAtCtl, ln='showDetail', k=1, min=0, max=1)
    lookAtCtl.attr('showDetail') >> pivCtl.v

    pymel.core.parent(coreGrp)
    coreGrp.attr('inheritsTransform').set(0)
    coreGrp.t.set(lock=1)
    coreGrp.r.set(lock=1)
    coreGrp.s.set(lock=1)

    mainGrp = pymel.core.createNode('transform', n='grassRigMainGrp')
    jnt = pymel.core.joint()
    pymel.core.move(mainGrp,
                    duCurvePivPoint[0],
                    duCurvePivPoint[1],
                    duCurvePivPoint[2],
                    ws=1)
    pymel.core.parent(duCurve, coreGrp, pivCtl.getParent(),
                      lookAtCtl.getParent(), mainGrp)
    pymel.core.skinCluster(meshs, jnt)

    for duCtl in duCtls:
        sgCmds.setIndexColor(duCtl, 28)

    sgCmds.setIndexColor(lookAtCtl, 22)
    pymel.core.select(lookAtCtl)