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 )
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)
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)
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 )
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 )
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 )
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)