Beispiel #1
0
def createRivetOnSurfacePoint( surfacePoint, firstDirection='u' ):
    
    import sgBFunction_dag
    import sgBFunction_attribute
    
    if firstDirection.lower() == 'u':
        fString = 'U'
        sString = 'V'
    else:
        fString = 'V'
        sString = 'U'

    surfaceName, uv = surfacePoint.split( '.uv' )
    
    surfaceName = sgBFunction_dag.getShape( surfaceName )
    
    uvSplits = uv.split( '][' )
    
    uValue = float( uvSplits[0].replace( '[', '' ) )
    vValue = float( uvSplits[1].replace( ']', '' ) )
    
    pointOnSurf = cmds.createNode( 'pointOnSurfaceInfo' )
    vectorNode  = cmds.createNode( 'vectorProduct' )
    fbfNode     = cmds.createNode( 'fourByFourMatrix' )
    mmdcNode    = cmds.createNode( 'multMatrixDecompose' )
    rivetNode   = cmds.createNode( 'transform' )
    
    cmds.setAttr( pointOnSurf+'.u', uValue )
    cmds.setAttr( pointOnSurf+'.v', vValue )
    cmds.setAttr( vectorNode+'.operation', 2 )
    cmds.setAttr( rivetNode+'.dla',1 )
    cmds.setAttr( rivetNode+'.dh', 1 )
    
    cmds.connectAttr( surfaceName +'.worldSpace[0]', pointOnSurf+'.inputSurface' )
    cmds.connectAttr( pointOnSurf+'.tangent%s' % fString, vectorNode+'.input1' )
    cmds.connectAttr( pointOnSurf+'.tangent%s' % sString, vectorNode+'.input2' )
    
    cmds.connectAttr( pointOnSurf+'.tangent%sx' % fString, fbfNode+'.i00' )
    cmds.connectAttr( pointOnSurf+'.tangent%sy' % fString, fbfNode+'.i01' )
    cmds.connectAttr( pointOnSurf+'.tangent%sz' % fString, fbfNode+'.i02' )
    cmds.connectAttr( pointOnSurf+'.tangent%sx' % sString, fbfNode+'.i10' )
    cmds.connectAttr( pointOnSurf+'.tangent%sy' % sString, fbfNode+'.i11' )
    cmds.connectAttr( pointOnSurf+'.tangent%sz' % sString, fbfNode+'.i12' )
    cmds.connectAttr( vectorNode+'.outputX', fbfNode+'.i20' )
    cmds.connectAttr( vectorNode+'.outputY', fbfNode+'.i21' )
    cmds.connectAttr( vectorNode+'.outputZ', fbfNode+'.i22' )
    cmds.connectAttr( pointOnSurf+'.positionX', fbfNode+'.i30' )
    cmds.connectAttr( pointOnSurf+'.positionY', fbfNode+'.i31' )
    cmds.connectAttr( pointOnSurf+'.positionZ', fbfNode+'.i32' )
    
    cmds.connectAttr( fbfNode+'.output', mmdcNode+'.i[0]' )
    cmds.connectAttr( rivetNode+'.pim',  mmdcNode+'.i[1]' )
    cmds.connectAttr( mmdcNode+'.ot',  rivetNode+'.t' )
    cmds.connectAttr( mmdcNode+'.or',  rivetNode+'.r' )
    
    sgBFunction_attribute.addAttr( rivetNode, ln='paramU', min=0, dv=uValue, k=1 )
    sgBFunction_attribute.addAttr( rivetNode, ln='paramV', min=0, dv=vValue, k=1 )
    
    cmds.connectAttr( rivetNode+'.paramU', pointOnSurf+'.u' )
    cmds.connectAttr( rivetNode+'.paramV', pointOnSurf+'.v' )
Beispiel #2
0
    def getBindConnectObjectDcmp(jnt):
        sgBFunction_attribute.addAttr(jnt,
                                      ln='bindConnectObject',
                                      at='message')

        cons = cmds.listConnections(jnt + '.bindConnectObject', d=1, s=0)
        if not cons:
            bindConnectObject = cmds.createNode('transform',
                                                n='BindCObj_' + jnt)
            sgBFunction_attribute.addAttr(bindConnectObject,
                                          ln='bindConnectObject_target',
                                          at='message')
            cmds.connectAttr(jnt + '.bindConnectObject',
                             bindConnectObject + '.bindConnectObject_target')
            cmds.parent(bindConnectObject, jnt)
        else:
            bindConnectObject = cons[0]

        cons = cmds.listConnections(bindConnectObject + '.wm',
                                    type='decomposeMatrix')
        if not cons:
            dcmp = cmds.createNode('decomposeMatrix')
            cmds.connectAttr(bindConnectObject + '.wm', dcmp + '.imat')
        else:
            dcmp = cons[0]

        cmds.xform(bindConnectObject,
                   ws=1,
                   matrix=sgBModel_data.getDefaultMatrix())
        return dcmp
Beispiel #3
0
def setEyeRotation(topJoint, closeValue=40):

    import sgBFunction_attribute

    childJnts = cmds.listRelatives(topJoint, c=1, f=1)

    leftChild = ''
    rightChild = ''
    for child in childJnts:
        if cmds.xform(child, q=1, os=1, t=1)[0] > 0:
            leftChild = child
        else:
            rightChild = child

    lfAnim = cmds.createNode('animCurveUA')
    rfAnim = cmds.createNode('animCurveUA')

    sgBFunction_attribute.addAttr(topJoint, ln='closeL', min=0, max=1, k=1)
    sgBFunction_attribute.addAttr(topJoint, ln='closeR', min=0, max=1, k=1)

    cmds.connectAttr(topJoint + '.closeL', lfAnim + '.input')
    cmds.connectAttr(topJoint + '.closeR', rfAnim + '.input')

    cmds.setKeyframe(lfAnim, f=0, v=0)
    cmds.setKeyframe(lfAnim, f=1, v=closeValue)
    cmds.setKeyframe(rfAnim, f=0, v=0)
    cmds.setKeyframe(rfAnim, f=1, v=closeValue)

    cmds.connectAttr(lfAnim + '.output', leftChild + '.rotateX')
    cmds.connectAttr(rfAnim + '.output', rightChild + '.rotateX')
Beispiel #4
0
def setEyeRotation( topJoint, closeValue = 40 ):
    
    import sgBFunction_attribute
    
    childJnts = cmds.listRelatives( topJoint, c=1, f=1 )
    
    leftChild = ''
    rightChild = ''
    for child in childJnts:
        if cmds.xform( child, q=1, os=1, t=1 )[0] > 0:
            leftChild = child
        else:
            rightChild = child
    
    lfAnim = cmds.createNode( 'animCurveUA' )
    rfAnim = cmds.createNode( 'animCurveUA' )
    
    sgBFunction_attribute.addAttr( topJoint, ln='closeL', min=0, max=1, k=1 )
    sgBFunction_attribute.addAttr( topJoint, ln='closeR', min=0, max=1, k=1 )
    
    cmds.connectAttr( topJoint+'.closeL', lfAnim+'.input' )
    cmds.connectAttr( topJoint+'.closeR', rfAnim+'.input' )
    
    cmds.setKeyframe( lfAnim, f=0, v=0 )
    cmds.setKeyframe( lfAnim, f=1, v=closeValue )
    cmds.setKeyframe( rfAnim, f=0, v=0 )
    cmds.setKeyframe( rfAnim, f=1, v=closeValue )
    
    cmds.connectAttr( lfAnim+'.output', leftChild +'.rotateX' )
    cmds.connectAttr( rfAnim+'.output', rightChild+'.rotateX' )
def createWorldBlendTwoMatrixObject( first, second, target = None ):
    
    import sgBFunction_attribute
    
    blMtx = cmds.createNode( 'blendTwoMatrix' )
    mmdc  = cmds.createNode( 'multMatrixDecompose' )
    cmds.connectAttr( first+'.wm', blMtx+'.inMatrix1' )
    cmds.connectAttr( second+'.wm', blMtx+'.inMatrix2' )
    cmds.connectAttr( blMtx+'.outMatrix', mmdc+'.i[0]' )
    
    if not target: target = cmds.createNode( 'transform' )
    cmds.connectAttr( target+'.pim', mmdc+'.i[1]' )
    
    sgBFunction_attribute.addAttr( target, ln='blend', min=0, max=1, dv=0.5, k=1 )
    cmds.connectAttr( target+'.blend', blMtx+'.attributeBlender' )
    
    if not cmds.isConnected( mmdc+'.ot', target+'.t' ):
        cmds.connectAttr( mmdc+'.ot', target+'.t', f=1 )
    if not cmds.isConnected( mmdc+'.or', target+'.r' ):
        cmds.connectAttr( mmdc+'.or', target+'.r', f=1 )
    if not cmds.isConnected( mmdc+'.os', target+'.s' ):
        cmds.connectAttr( mmdc+'.os', target+'.s', f=1 )
    if not cmds.isConnected( mmdc+'.osh', target+'.sh' ):
        cmds.connectAttr( mmdc+'.osh', target+'.sh', f=1 )
    
    cmds.select( blMtx, target )
    return blMtx, target
def followMatrixConnection( ctl, others ):
    
    import sgBFunction_attribute
    ctlP = cmds.listRelatives( ctl, p=1 )[0]
    
    followMatrix = cmds.createNode( 'followMatrix' )
    mmdc = cmds.createNode( 'multMatrixDecompose' )
    
    cmds.connectAttr( others[0]+'.wm', followMatrix+'.originalMatrix' )
    
    sgBFunction_attribute.addAttr( ctl, ln='_______', at='enum', en='Parent:', cb=1 )
    
    for other in others[1:]:
        i = others.index( other ) - 1
        cmds.connectAttr( other+'.wm', followMatrix+'.inputMatrix[%d]' % i )
        
        attrName = 'parent' + other.split( '_' )[-1]
        print other, attrName
        sgBFunction_attribute.addAttr( ctl, ln= attrName, min=0, max=10, k=1 )
        cmds.connectAttr( ctl+'.'+attrName, followMatrix+'.inputWeight[%d]' % i )
    
    cmds.connectAttr( followMatrix+'.outputMatrix', mmdc+'.i[0]' )
    cmds.connectAttr( ctlP+'.pim', mmdc+'.i[1]' )
    cmds.connectAttr( mmdc+'.ot', ctlP+'.t' )
    cmds.connectAttr( mmdc+'.or', ctlP+'.r' )
Beispiel #7
0
def removeUiSeparateView( cam ):
    
    import sgBFunction_attribute
    import sgBFunction_dag
    
    uiPrefix = 'separatedViewCam_'
    
    uis = cmds.lsUI( wnd=1 )
    for ui in uis:
        if not len( ui ) > len( uiPrefix ): continue
        if ui[ : len( uiPrefix ) ] != uiPrefix: continue
        cmds.deleteUI( ui, wnd=1 )
    
    if not cmds.objExists( cam ): return None
    
    for cam in cmds.ls( type='camera' ):
        if not cmds.objExists( cam ): continue
        cam = sgBFunction_dag.getTransform( cam )
        sgBFunction_attribute.addAttr( cam, ln='filmTranslateCams', at='message' )
        sgBFunction_attribute.addAttr( cam, ln='aniamtionCam', at='message' )
        cons1 = cmds.listConnections( cam+'.filmTranslateCams', d=1, s=0 )
        cons2 = cmds.listConnections( cam+'.aniamtionCam', d=1, s=0 )

        if cons1: cmds.delete( cons1 )
        if cons2: cmds.delete( cons2 )
def createLocalBlendTwoMatrixObject( first, second, target = None ):
    
    import sgBFunction_attribute
    
    blMtx = cmds.createNode( 'blendTwoMatrixDecompose' )
    cmds.connectAttr( first+'.m', blMtx+'.inMatrix1' )
    cmds.connectAttr( second+'.m', blMtx+'.inMatrix2' )
    
    if not target: target = cmds.createNode( 'transform' )
    
    sgBFunction_attribute.addAttr( target, ln='blend', min=0, max=1, dv=0.5, k=1 )
    cmds.connectAttr( target+'.blend', blMtx+'.attributeBlender' )
    
    if cmds.nodeType( target ) == 'joint':
        try:cmds.setAttr( target+'.jo', 0,0,0 )
        except:pass
    
    if not cmds.isConnected( blMtx+'.ot', target+'.t' ):
        cmds.connectAttr( blMtx+'.ot', target+'.t', f=1 )
    if not cmds.isConnected( blMtx+'.or', target+'.r' ):
        cmds.connectAttr( blMtx+'.or', target+'.r', f=1 )
    if not cmds.isConnected( blMtx+'.os', target+'.s' ):
        cmds.connectAttr( blMtx+'.os', target+'.s', f=1 )
    if not cmds.isConnected( blMtx+'.osh', target+'.sh' ):
        cmds.connectAttr( blMtx+'.osh', target+'.sh', f=1 )
    
    cmds.select( blMtx, target )
    return blMtx, target
Beispiel #9
0
def removeUiSeparateView(cam):

    import sgBFunction_attribute
    import sgBFunction_dag

    uiPrefix = 'separatedViewCam_'

    uis = cmds.lsUI(wnd=1)
    for ui in uis:
        if not len(ui) > len(uiPrefix): continue
        if ui[:len(uiPrefix)] != uiPrefix: continue
        cmds.deleteUI(ui, wnd=1)

    if not cmds.objExists(cam): return None

    for cam in cmds.ls(type='camera'):
        if not cmds.objExists(cam): continue
        cam = sgBFunction_dag.getTransform(cam)
        sgBFunction_attribute.addAttr(cam,
                                      ln='filmTranslateCams',
                                      at='message')
        sgBFunction_attribute.addAttr(cam, ln='aniamtionCam', at='message')
        cons1 = cmds.listConnections(cam + '.filmTranslateCams', d=1, s=0)
        cons2 = cmds.listConnections(cam + '.aniamtionCam', d=1, s=0)

        if cons1: cmds.delete(cons1)
        if cons2: cmds.delete(cons2)
Beispiel #10
0
def makeCloneObject2( target, replaceName=['SOURCENAME_', 'TARGETNAME_'], **options ):
    
    import sgBModel_dag
    import sgBFunction_attribute
    import sgBFunction_value
    import sgBFunction_connection
    
    op_cloneAttrName = None
    op_shapeOn       = None
    op_connectionOn  = None
    
    op_cloneAttrName = sgBFunction_value.getValueFromDict( options, 'cloneAttrName' )
    op_shapeOn = sgBFunction_value.getValueFromDict( options, 'shapeOn' )
    op_connectionOn = sgBFunction_value.getValueFromDict( options, 'connectionOn' )
    
    if op_cloneAttrName:
        attrName = op_cloneAttrName
    else:
        attrName = sgBModel_dag.cloneTargetAttrName
    
    targets = getParents( target )
    targets.append( target )
    
    targetCloneParent = None
    for cuTarget in targets:
        sgBFunction_attribute.addAttr( cuTarget, ln=attrName, at='message' )
        cloneConnection = cmds.listConnections( cuTarget+'.'+attrName, s=1, d=0 )
        if not cloneConnection:
            print "replaceName : ", cuTarget.split( '|' )[-1].replace( replaceName[0], replaceName[1] )
            targetClone = cmds.createNode( 'transform', n= cuTarget.split( '|' )[-1].replace( replaceName[0], replaceName[1] ) )
            cmds.connectAttr( targetClone+'.message', cuTarget+'.'+attrName )
            
            if op_shapeOn:
                cuTargetShape = getShape( cuTarget )
                if cuTargetShape:
                    duObj = cmds.duplicate( cuTarget, n=targetClone+'_du' )[0]
                    duShape = cmds.listRelatives( duObj, s=1, f=1 )[0]
                    duShape = cmds.parent( duShape, targetClone, add=1, shape=1 )[0]
                    cmds.delete( duObj )
                    cmds.rename( duShape, targetClone+'Shape' )
            if op_connectionOn:
                sgBFunction_connection.getSourceConnection( cuTarget, targetClone )
                cuTargetShape    = getShape( cuTarget )
                targetCloneShape = getShape( targetClone )
                
                if cuTargetShape and targetCloneShape:
                    sgBFunction_connection.getSourceConnection( cuTargetShape, targetCloneShape )
        else:
            targetClone = cloneConnection[0]
        
        targetCloneParentExpected = getParent( targetClone )
        if cmds.ls( targetCloneParentExpected ) != cmds.ls( targetCloneParent ) and targetCloneParent:
            targetClone = cmds.parent( targetClone, targetCloneParent )[0]

        cuTargetPos = cmds.getAttr( cuTarget+'.m' )
        cmds.xform( targetClone, os=1, matrix=cuTargetPos )

        targetCloneParent = targetClone
    return targetCloneParent
Beispiel #11
0
def setKeyCurveMatrixObjects( curves, mtxObj ):
    
    import sgBFunction_attribute
    
    sgBFunction_attribute.addAttr( mtxObj, ln='keyCurveTarget', at='message' )
    
    for curve in curves:
        sgBFunction_attribute.addAttr( curve, ln='mtxObj_forKeyCurve', at='message' )
        if cmds.isConnected( mtxObj + '.keyCurveTarget', curve + '.mtxObj_forKeyCurve' ): continue
        cmds.connectAttr( mtxObj + '.keyCurveTarget', curve + '.mtxObj_forKeyCurve', f=1 )
Beispiel #12
0
 def getGlobalAttr(self):
     
     import sgBFunction_attribute
     
     globalValueAttrs = cmds.ls( '*.' + WinA_Global.globalValueAttr )
     if not globalValueAttrs:
         cmds.undoInfo( swf=1 )
         node = cmds.createNode( 'addDoubleLinear' )
         sgBFunction_attribute.addAttr( node, ln= WinA_Global.globalValueAttr )
         globalValueAttrs = [node + '.' + WinA_Global.globalValueAttr]
     return globalValueAttrs[0]
Beispiel #13
0
 def cmdCreatePattern( arg=0 ):
     
     import sgBFunction_dag
     import sgBFunction_attribute
     
     PatternSize = cmds.floatField( WinA_Global.ff_patternSize, q=1, v=1 )
     OffsetMult  = cmds.floatField( WinA_Global.ff_offsetMult, q=1, v=1 )
     
     sels = cmds.ls( sl=1 )
     
     curve = sels[0]
     surf  = sels[1]
     
     curveShape = sgBFunction_dag.getShape( curve )
     surfShape =  sgBFunction_dag.getShape( surf )
     
     numSpansU = cmds.getAttr( surfShape + '.spansU' )
     numSpansV = cmds.getAttr( surfShape + '.spansV' )
     
     rebuildSurf = cmds.createNode( 'rebuildSurface' )
     cmds.setAttr( rebuildSurf + '.keepCorners', 0 )
     cmds.setAttr( rebuildSurf + '.spansU', numSpansU )
     cmds.setAttr( rebuildSurf + '.spansV', numSpansV )
     
     trGeo = cmds.createNode( 'transformGeometry' )
     node = cmds.createNode( 'sgPatternCurveOnSurface' )
     
     sgBFunction_attribute.addAttr( curve, ln='patternSize', min=0.1, dv=PatternSize, k=1 )
     sgBFunction_attribute.addAttr( curve, ln='offsetMult',  min=0.25, dv=OffsetMult, k=1  )
     
     cmds.connectAttr( curve + '.patternSize', node + '.patternSize' )
     cmds.connectAttr( curve + '.offsetMult' , node + '.offsetMult' )
     
     newSurface = cmds.createNode( 'nurbsSurface' )
     cmds.setAttr( newSurface + '.io', 1 )
     
     cmds.connectAttr( surfShape + '.local', rebuildSurf + '.inputSurface' )
     cmds.connectAttr( rebuildSurf + '.outputSurface', trGeo + '.inputGeometry' )
     cmds.connectAttr( surf + '.wm', trGeo + '.transform' )
     cmds.connectAttr( trGeo + '.outputGeometry', newSurface+'.create' )
     cmds.connectAttr( newSurface + '.local', node + '.surface' )
     cmds.connectAttr( curveShape + '.local', node + '.curve' )
     
     surfShape = cmds.listRelatives( curve, s=1, f=1 )[0]
     nodes = cmds.listConnections( surfShape, s=0, d=1, type='sgPatternCurveOnSurface' )
     
     outputNum = cmds.getAttr( nodes[0] + '.numOutput' )
     
     for i in range( outputNum ):
         cons = cmds.listConnections( nodes[0] +'.outputCurves[%d]' % i )
         if not cons:
             outputCurve = cmds.createNode( 'nurbsCurve' )
             cmds.connectAttr( nodes[0] + '.outputCurves[%d]' % i, outputCurve + '.create' )
def addMultDoubleLinearConnection( sel, attr ):
    import sgBFunction_attribute
    newAttrName = 'mult_' + attr
    sgBFunction_attribute.addAttr( sel, ln=newAttrName, cb=1, dv=1 )
    multDouble = cmds.createNode( 'multDoubleLinear' )
    
    separateParentConnection( sel, attr )
    
    cons = cmds.listConnections( sel + '.' + attr, s=1, d=0, p=1, c=1 )
    cmds.connectAttr( cons[1], multDouble+'.input1' )
    cmds.connectAttr( sel+'.'+newAttrName, multDouble + '.input2' )
    cmds.connectAttr( multDouble + '.output', sel+'.'+attr, f=1 )
Beispiel #15
0
def addMultDoubleLinearConnection(sel, attr):
    import sgBFunction_attribute
    newAttrName = 'mult_' + attr
    sgBFunction_attribute.addAttr(sel, ln=newAttrName, cb=1, dv=1)
    multDouble = cmds.createNode('multDoubleLinear')

    separateParentConnection(sel, attr)

    cons = cmds.listConnections(sel + '.' + attr, s=1, d=0, p=1, c=1)
    cmds.connectAttr(cons[1], multDouble + '.input1')
    cmds.connectAttr(sel + '.' + newAttrName, multDouble + '.input2')
    cmds.connectAttr(multDouble + '.output', sel + '.' + attr, f=1)
def createSquashObject( distTarget, distBase, scaleTarget ):
    
    import sgBFunction_attribute
    import sgBFunction_base
    import math
    
    scaleTargetMtx = cmds.getAttr( scaleTarget+'.wm' )
    
    xVector = om.MVector( *scaleTargetMtx[0:3] )
    yVector = om.MVector( *scaleTargetMtx[4:4+3] )
    zVector = om.MVector( *scaleTargetMtx[8:8+3] )
    
    targetPos = cmds.xform( distTarget, q=1, ws=1, t=1 )
    basePos   = cmds.xform( distBase, q=1, ws=1, t=1 )
    aimVector = om.MVector( targetPos[0] - basePos[0], targetPos[1] - basePos[1], targetPos[2] - basePos[2] )
    
    vectors = [ xVector, yVector, zVector ]
    maxDotValue = 0
    aimIndex = 0
    for i in range( 3 ):
        dotValue = math.fabs( aimVector * vectors[i] )
        if dotValue > maxDotValue:
            maxDotValue = dotValue
            aimIndex = i

    print "max dot value : ", maxDotValue
    otherIndex1 = ( aimIndex + 1 ) % 3
    otherIndex2 = ( aimIndex + 2 ) % 3
        
    sgBFunction_base.autoLoadPlugin( 'sgLocusChRig' )
    
    mmdc = cmds.createNode( 'multMatrixDecompose' )
    cmds.connectAttr( distTarget+'.wm', mmdc+'.i[0]' )
    cmds.connectAttr( distBase+'.wim', mmdc+'.i[1]' )
    
    sgBFunction_attribute.addAttr( scaleTarget, ln='distanceDefault', k=1 )
    sgBFunction_attribute.addAttr( scaleTarget, ln='distanceCurrent', cb=1 )
    sgBFunction_attribute.addAttr( scaleTarget, ln='squashRate', k=1 )
    sgBFunction_attribute.addAttr( scaleTarget, ln='forceScale', k=1 )
    
    cmds.connectAttr( mmdc+'.outputDistance', scaleTarget+'.distanceCurrent', f=1 )
    cmds.setAttr( scaleTarget+'.distanceDefault', cmds.getAttr( mmdc+'.outputDistance' ) )
    
    squashNode = cmds.createNode( 'squash' )
    divNode    = cmds.createNode( 'multiplyDivide' )
    cmds.setAttr( divNode+'.operation', 2 )
    
    cmds.connectAttr( scaleTarget+'.distanceDefault', squashNode+'.lengthOriginal' )
    cmds.connectAttr( scaleTarget+'.distanceCurrent', squashNode+'.lengthModify' )
    cmds.connectAttr( scaleTarget+'.distanceDefault', divNode+'.input2X' )
    cmds.connectAttr( scaleTarget+'.distanceCurrent', divNode+'.input1X' )
    
    axisChar = ['X', 'Y', 'Z' ]
    cmds.connectAttr( squashNode+'.output', scaleTarget+'.scale%s' % axisChar[ otherIndex1 ] )
    cmds.connectAttr( squashNode+'.output', scaleTarget+'.scale%s' % axisChar[ otherIndex2 ] )
    cmds.connectAttr( divNode+'.outputX', scaleTarget+'.scale%s' % axisChar[ aimIndex ] )
    
    cmds.connectAttr( scaleTarget+'.squashRate', squashNode+'.squashRate' )
    cmds.connectAttr( scaleTarget+'.forceScale', squashNode+'.forceValue' )
Beispiel #17
0
def setKeyCurveMatrixObjects(curves, mtxObj):

    import sgBFunction_attribute

    sgBFunction_attribute.addAttr(mtxObj, ln='keyCurveTarget', at='message')

    for curve in curves:
        sgBFunction_attribute.addAttr(curve,
                                      ln='mtxObj_forKeyCurve',
                                      at='message')
        if cmds.isConnected(mtxObj + '.keyCurveTarget',
                            curve + '.mtxObj_forKeyCurve'):
            continue
        cmds.connectAttr(mtxObj + '.keyCurveTarget',
                         curve + '.mtxObj_forKeyCurve',
                         f=1)
def ctlVisConnection( ctl, targets, attrName = 'ctlVis' ):

    import sgBFunction_attribute
    
    sgBFunction_attribute.addAttr( ctl, ln=attrName, min=0, max=1, at='long', k=1 )
        
    for target in targets:
        targetP = cmds.listRelatives( target, p=1, f=1 )[0]
        
        if not cmds.isConnected( ctl+'.'+attrName, target+'.v' ):
            try:
                cmds.connectAttr( ctl+'.'+attrName, target+'.v' )
            except:
                if not cmds.isConnected( ctl+'.'+attrName, targetP+'.v' ):
                    try:cmds.connectAttr( ctl+'.'+attrName, targetP+'.v' )
                    except:pass
Beispiel #19
0
def createClosestPointObjectOnCurve( target, curve, attach=False ):
    
    import sgBFunction_dag
    import sgBFunction_curve
    import sgBFunction_attribute
    
    crvShape = sgBFunction_dag.getShape( curve )
    
    crvMin, crvMax = cmds.getAttr( crvShape + '.minMaxValue' )[0]
    
    tr = cmds.createNode( 'transform' )
    cmds.setAttr( tr + '.dh', 1 )
    
    sgBFunction_attribute.addAttr( tr, ln='param', min=crvMin, max=crvMax, k=1 )
    
    
    if attach:
        nearInfo = cmds.createNode( 'nearestPointOnCurve' )
        dcmp = cmds.createNode( 'decomposeMatrix' )
        cmds.connectAttr( crvShape + '.worldSpace', nearInfo + '.inputCurve' )
        cmds.connectAttr( target + '.wm', dcmp + '.imat' )
        cmds.connectAttr( dcmp + '.ot', nearInfo + '.inPosition' )
        
        vectorProduct = cmds.createNode( 'vectorProduct' )
        cmds.setAttr( vectorProduct + '.operation', 4 )
        
        cmds.connectAttr( nearInfo+'.position', vectorProduct+'.input1' )
        cmds.connectAttr( tr+'.pim', vectorProduct + '.matrix' )
        cmds.connectAttr( vectorProduct + '.output', tr+'.t' )
        
    else:
        pointOnCurve = cmds.createNode( 'pointOnCurveInfo' )
        cmds.connectAttr( crvShape + '.worldSpace', pointOnCurve + '.inputCurve' )    
        vectorProduct = cmds.createNode( 'vectorProduct' )
        cmds.setAttr( vectorProduct + '.operation', 4 )
    
        cmds.connectAttr( pointOnCurve+'.position', vectorProduct+'.input1' )
        cmds.connectAttr( tr+'.pim', vectorProduct + '.matrix' )
        cmds.connectAttr( vectorProduct + '.output', tr+'.t' )
    
        parameter = sgBFunction_curve.getClosestParameter( target, curve )
        cmds.setAttr( tr + '.param', parameter )
        cmds.connectAttr( tr + '.param', pointOnCurve + '.parameter' )
    
    return tr
Beispiel #20
0
def createClosestPointObjectOnCurve(target, curve, attach=False):

    import sgBFunction_dag
    import sgBFunction_curve
    import sgBFunction_attribute

    crvShape = sgBFunction_dag.getShape(curve)

    crvMin, crvMax = cmds.getAttr(crvShape + '.minMaxValue')[0]

    tr = cmds.createNode('transform')
    cmds.setAttr(tr + '.dh', 1)

    sgBFunction_attribute.addAttr(tr, ln='param', min=crvMin, max=crvMax, k=1)

    if attach:
        nearInfo = cmds.createNode('nearestPointOnCurve')
        dcmp = cmds.createNode('decomposeMatrix')
        cmds.connectAttr(crvShape + '.worldSpace', nearInfo + '.inputCurve')
        cmds.connectAttr(target + '.wm', dcmp + '.imat')
        cmds.connectAttr(dcmp + '.ot', nearInfo + '.inPosition')

        vectorProduct = cmds.createNode('vectorProduct')
        cmds.setAttr(vectorProduct + '.operation', 4)

        cmds.connectAttr(nearInfo + '.position', vectorProduct + '.input1')
        cmds.connectAttr(tr + '.pim', vectorProduct + '.matrix')
        cmds.connectAttr(vectorProduct + '.output', tr + '.t')

    else:
        pointOnCurve = cmds.createNode('pointOnCurveInfo')
        cmds.connectAttr(crvShape + '.worldSpace',
                         pointOnCurve + '.inputCurve')
        vectorProduct = cmds.createNode('vectorProduct')
        cmds.setAttr(vectorProduct + '.operation', 4)

        cmds.connectAttr(pointOnCurve + '.position', vectorProduct + '.input1')
        cmds.connectAttr(tr + '.pim', vectorProduct + '.matrix')
        cmds.connectAttr(vectorProduct + '.output', tr + '.t')

        parameter = sgBFunction_curve.getClosestParameter(target, curve)
        cmds.setAttr(tr + '.param', parameter)
        cmds.connectAttr(tr + '.param', pointOnCurve + '.parameter')

    return tr
def createWristAngle( rotBase, target ):
    
    import sgBFunction_attribute

    targetP = cmds.listRelatives( target, p=1, f=1 )[0]
    
    mm = cmds.createNode( 'multMatrix' )
    wa = cmds.createNode( 'wristAngle' )
    
    cmds.connectAttr( rotBase+'.wm', mm+'.i[0]' )
    cmds.connectAttr( targetP+'.wim', mm+'.i[1]' )
    cmds.connectAttr( mm+'.matrixSum', wa+'.inputMatrix' )
    cmds.connectAttr( wa+'.outAngle', target+'.rx' )
    
    sgBFunction_attribute.addAttr( target, ln='wristAngle_Rate', cb=1, dv=1 )
    sgBFunction_attribute.addAttr( target, ln='wristAngle_Axis', cb=1, at='enum', el=':X:Y:Z' )
    cmds.connectAttr( target+'.wristAngle_Rate', wa+'.angleRate' )
    cmds.connectAttr( target+'.wristAngle_Axis', wa+'.axis' )
Beispiel #22
0
def translateBlend_toAimTarget( target, aimTarget ):
    
    targetP = cmds.listRelatives( target, p=1, f=1 )[0]
    
    
    blendNode = cmds.createNode( 'blendTwoAttr' )
    mmdc      = cmds.createNode( 'multMatrixDecompose' )
    cmds.connectAttr( aimTarget+'.wm', mmdc+'.i[0]' )
    cmds.connectAttr( targetP+'.pim',  mmdc+'.i[1]' )
    
    sgBFunction_attribute.addAttr( target, ln='origTx', k=1, dv= cmds.getAttr( mmdc+'.otx' ) )
    sgBFunction_attribute.addAttr( targetP, ln='blend', min=0, max=1, dv=0.5, k=1 )
    
    cmds.connectAttr( target+'.origTx', blendNode+'.input[0]' )
    cmds.connectAttr( mmdc+'.otx', blendNode+'.input[1]' )
    cmds.connectAttr( targetP+'.blend', blendNode+'.attributesBlender' )
 
    cmds.connectAttr( blendNode+'.output', target+'.tx' )
Beispiel #23
0
def getConstrainedObject( target, constLabel = '_coned' ):
    
    import sgBModel_dag
    import sgBFunction_attribute
    import sgBFunction_connection
    
    attrName = sgBModel_dag.constrainedTargetAttrName
    
    sgBFunction_attribute.addAttr( target, ln= attrName, at='message' )
    connections = cmds.listConnections( target+'.'+attrName, s=1, d=0 )
    if not connections:
        constTarget = cmds.createNode( 'transform', n= target.split( '|' )[-1].replace( ':', '_' ) + constLabel )
        cmds.connectAttr( constTarget+'.message', target+'.'+attrName )
        sgBFunction_connection.constraintAll( target, constTarget )
    else:
        constTarget = connections[0]
    
    return constTarget
Beispiel #24
0
def getConstrainedObject(target, constLabel='_coned'):

    import sgBModel_dag
    import sgBFunction_attribute
    import sgBFunction_connection

    attrName = sgBModel_dag.constrainedTargetAttrName

    sgBFunction_attribute.addAttr(target, ln=attrName, at='message')
    connections = cmds.listConnections(target + '.' + attrName, s=1, d=0)
    if not connections:
        constTarget = cmds.createNode(
            'transform',
            n=target.split('|')[-1].replace(':', '_') + constLabel)
        cmds.connectAttr(constTarget + '.message', target + '.' + attrName)
        sgBFunction_connection.constraintAll(target, constTarget)
    else:
        constTarget = connections[0]

    return constTarget
 def getBindConnectObjectDcmp( jnt ):
     sgBFunction_attribute.addAttr( jnt, ln='bindConnectObject', at='message' ) 
     
     cons = cmds.listConnections( jnt+'.bindConnectObject', d=1, s=0 )
     if not cons:
         bindConnectObject = cmds.createNode( 'transform', n= 'BindCObj_' + jnt )
         sgBFunction_attribute.addAttr( bindConnectObject, ln='bindConnectObject_target', at='message' )
         cmds.connectAttr( jnt+'.bindConnectObject', bindConnectObject+'.bindConnectObject_target' )
         cmds.parent( bindConnectObject, jnt )
     else:
         bindConnectObject = cons[0]
     
     cons = cmds.listConnections( bindConnectObject+'.wm', type='decomposeMatrix' )
     if not cons:
         dcmp = cmds.createNode( 'decomposeMatrix' )
         cmds.connectAttr( bindConnectObject+'.wm', dcmp+'.imat' )
     else:
         dcmp = cons[0]
     
     cmds.xform( bindConnectObject, ws=1, matrix=sgBModel_data.getDefaultMatrix() )
     return dcmp
def addModification( meshObjs ):
    
    import sgBFunction_attribute
    import sgBFunction_dag
    
    meshObjs = sgBFunction_dag.getChildrenMeshExists( meshObjs )
    softMod = cmds.deformer( meshObjs, type='softMod' )[0]
    
    ctlGrp = cmds.createNode( 'transform' )
    cmds.setAttr( ctlGrp+'.dh', 1 )
    dcmp   = cmds.createNode( 'decomposeMatrix' )
    ctl = cmds.sphere()[0]
    ctl = cmds.parent( ctl, ctlGrp )[0]
    sgBFunction_attribute.addAttr( ctl, ln='__________', at='enum', enumName = ':Modify Attr', cb=1 )
    sgBFunction_attribute.addAttr( ctl, ln='falloffRadius', min=0, dv=1, k=1 )
    sgBFunction_attribute.addAttr( ctl, ln='envelope', min=0, max=1, dv=1, k=1 )
    
    cmds.connectAttr( ctlGrp+'.wim', softMod+'.bindPreMatrix' )
    cmds.connectAttr( ctlGrp+'.wm', softMod+'.preMatrix' )
    cmds.connectAttr( ctl+'.wm', softMod+'.matrix' )
    cmds.connectAttr( ctl+'.m',  softMod+'.weightedMatrix' )
    
    cmds.connectAttr( ctlGrp+'.wm', dcmp+'.imat' )
    
    cmds.connectAttr( dcmp+'.ot', softMod+'.falloffCenter' )
    for i in range( len( meshObjs ) ):
        cmds.connectAttr( meshObjs[i]+'.wm', softMod+'.geomMatrix[%d]' % i )
    
    cmds.connectAttr( ctl+'.envelope', softMod+'.envelope' )
    cmds.connectAttr( ctl+'.falloffRadius', softMod+'.falloffRadius' )
    
    cmds.xform( ctlGrp, ws=1, t=cmds.getAttr( meshObjs[0]+'.wm' )[-4:-1] )
    cmds.select( ctlGrp )
Beispiel #27
0
def addDistanceAttribute( curve ):
    
    import sgBFunction_attribute
    import sgBFunction_dag
    
    curveLength = getCurveLength( curve )
    sgBFunction_attribute.addAttr( curve, ln='initCurveLength', k=1 )
    sgBFunction_attribute.addAttr( curve, ln='curveLength', k=1 )
    
    cmds.setAttr( curve+'.initCurveLength', e=1, lock=0 )
    cmds.setAttr( curve+'.curveLength', e=1, lock=0 )
    
    cmds.setAttr( curve+'.initCurveLength', curveLength )
    
    if not cmds.listConnections( curve+'.curveLength', s=1, d=0, type='curveInfo' ):
        curveShape = sgBFunction_dag.getShape( curve )
        curveInfo = cmds.createNode( 'curveInfo' )
        cmds.connectAttr( curveShape+'.local', curveInfo+'.inputCurve' )
        cmds.connectAttr( curveInfo+'.arcLength', curve+'.curveLength' )
    
    cmds.setAttr( curve+'.initCurveLength', e=1, lock=1 )
    cmds.setAttr( curve+'.curveLength', e=1, lock=1 )
Beispiel #28
0
def addDistanceAttribute(curve):

    import sgBFunction_attribute
    import sgBFunction_dag

    curveLength = getCurveLength(curve)
    sgBFunction_attribute.addAttr(curve, ln='initCurveLength', k=1)
    sgBFunction_attribute.addAttr(curve, ln='curveLength', k=1)

    cmds.setAttr(curve + '.initCurveLength', e=1, lock=0)
    cmds.setAttr(curve + '.curveLength', e=1, lock=0)

    cmds.setAttr(curve + '.initCurveLength', curveLength)

    if not cmds.listConnections(
            curve + '.curveLength', s=1, d=0, type='curveInfo'):
        curveShape = sgBFunction_dag.getShape(curve)
        curveInfo = cmds.createNode('curveInfo')
        cmds.connectAttr(curveShape + '.local', curveInfo + '.inputCurve')
        cmds.connectAttr(curveInfo + '.arcLength', curve + '.curveLength')

    cmds.setAttr(curve + '.initCurveLength', e=1, lock=1)
    cmds.setAttr(curve + '.curveLength', e=1, lock=1)
def createFollowMatrixObject( base, targets, attrName='followWeight' ):
    
    import sgBFunction_attribute
    
    followMatrix = cmds.createNode( 'followMatrix' )
    mmdc = cmds.createNode( 'multMatrixDecompose' )
    
    cmds.connectAttr( base+'.wm', followMatrix+'.originalMatrix' )
    
    for other in targets:
        i = targets.index( other )
        cmds.connectAttr( other+'.wm', followMatrix+'.inputMatrix[%d]' % i )
        
        addAttrName = attrName + '_' + other.split( '_' )[-1]
        
        sgBFunction_attribute.addAttr( base, ln= addAttrName, min=0, max=10, k=1 )
        cmds.connectAttr( base+'.'+addAttrName, followMatrix+'.inputWeight[%d]' % i )
    
    followTarget = cmds.createNode( 'transform' )
    cmds.connectAttr( followMatrix+'.outputMatrix', mmdc+'.i[0]' )
    cmds.connectAttr( followTarget+'.pim', mmdc+'.i[1]' )
    cmds.connectAttr( mmdc+'.ot', followTarget+'.t' )
    cmds.connectAttr( mmdc+'.or', followTarget+'.r' )
Beispiel #30
0
def ctlVisConnection(ctl, targets, attrName='ctlVis'):

    import sgBFunction_attribute

    sgBFunction_attribute.addAttr(ctl,
                                  ln=attrName,
                                  min=0,
                                  max=1,
                                  at='long',
                                  k=1)

    for target in targets:
        targetP = cmds.listRelatives(target, p=1, f=1)[0]

        if not cmds.isConnected(ctl + '.' + attrName, target + '.v'):
            try:
                cmds.connectAttr(ctl + '.' + attrName, target + '.v')
            except:
                if not cmds.isConnected(ctl + '.' + attrName, targetP + '.v'):
                    try:
                        cmds.connectAttr(ctl + '.' + attrName, targetP + '.v')
                    except:
                        pass
def getDistanceAttribute( first, second ):
    
    import sgBFunction_attribute
    
    sgBFunction_attribute.addAttr( second, ln='dist_orig', cb=1 )
    sgBFunction_attribute.addAttr( second, ln='dist_current', cb=1 )
    sgBFunction_attribute.addAttr( second, ln='dist_stretchValue', cb=1 )
    
    mmdc = cmds.createNode( 'multMatrixDecompose' )
    mult = cmds.createNode( 'multiplyDivide' )
    cmds.setAttr( mult+'.op', 2 )
    cmds.connectAttr( first+'.wm', mmdc+'.i[0]' )
    cmds.connectAttr( second+'.wim', mmdc+'.i[1]' )
    cmds.connectAttr( mmdc+'.outputDistance', mult+'.input1X' )
    cmds.setAttr( mult+'.input2X', cmds.getAttr( mmdc+'.outputDistance' ) )
    cmds.connectAttr( mult+'.outputX', second+'.dist_stretchValue' )
    
    cmds.setAttr( second+'.dist_orig', cmds.getAttr( mmdc+'.outputDistance' ) )
    cmds.connectAttr( mmdc+'.outputDistance', second+'.dist_current' )
Beispiel #32
0
def addPositionBasedController(controller, relative=True):

    import sgBFunction_connection
    import sgBFunction_attribute
    import sgCFnc_connection

    controllerName = controller.split('|')[-1]

    controllerP = cmds.listRelatives(controller, p=1, f=1)[0]
    replaceObj = cmds.createNode('transform', n=controllerName + '_replace')

    replaceObj = cmds.parent(replaceObj, controllerP)[0]

    cmds.xform(replaceObj, ws=1, matrix=cmds.getAttr(controller + '.wm'))
    sgBFunction_connection.getSourceConnection(controller, replaceObj)

    outputCons, inputCons = sgCFnc_connection.getSourceConnection(controller)

    for i in range(len(outputCons)):
        cmds.disconnectAttr(outputCons[i], inputCons[i])

    locC = cmds.createNode('transform', n='locC')
    locCR = cmds.createNode('transform', n='locCR')
    locCS = cmds.createNode('transform', n='locCS')
    loc = cmds.spaceLocator()[0]
    locP = cmds.group(loc)
    pivCtl = cmds.createNode('transform')
    cmds.setAttr(pivCtl + '.dh', 1)
    locBase = cmds.group(locP, pivCtl)

    locC, locCR, locCS = cmds.parent(locC, locCR, locCS, loc)

    cmds.connectAttr(pivCtl + '.t', locP + '.t')
    cmds.connectAttr(pivCtl + '.r', locP + '.r')
    cmds.connectAttr(pivCtl + '.s', locP + '.s')
    cmds.connectAttr(pivCtl + '.sh', locP + '.sh')

    mmdcLocCR = cmds.createNode('multMatrixDecompose')
    cmds.connectAttr(locBase + '.wm', mmdcLocCR + '.i[0]')
    cmds.connectAttr(pivCtl + '.wim', mmdcLocCR + '.i[1]')
    cmds.connectAttr(mmdcLocCR + '.ot', locCR + '.t')
    cmds.connectAttr(mmdcLocCR + '.or', locCR + '.r')
    cmds.connectAttr(mmdcLocCR + '.os', locCR + '.s')
    cmds.connectAttr(mmdcLocCR + '.osh', locCR + '.sh')

    mmdcLocCS = cmds.createNode('multMatrixDecompose')
    cmds.connectAttr(replaceObj + '.wm', mmdcLocCS + '.i[0]')
    cmds.connectAttr(loc + '.wim', mmdcLocCS + '.i[1]')
    cmds.connectAttr(mmdcLocCS + '.ot', locCS + '.t')
    cmds.connectAttr(mmdcLocCS + '.or', locCS + '.r')
    cmds.connectAttr(mmdcLocCS + '.os', locCS + '.s')
    cmds.connectAttr(mmdcLocCS + '.osh', locCS + '.sh')

    blendMtx = cmds.createNode('blendTwoMatrixDecompose')
    blendCS = cmds.createNode('blendColors')
    blendCSH = cmds.createNode('blendColors')
    mmdcOutput = cmds.createNode('multMatrixDecompose')

    cmds.connectAttr(locCR + '.s', blendCS + '.color1')
    cmds.connectAttr(locCS + '.s', blendCS + '.color2')
    cmds.connectAttr(locCR + '.sh', blendCSH + '.color1')
    cmds.connectAttr(locCS + '.sh', blendCSH + '.color2')

    cmds.connectAttr(locCS + '.m', blendMtx + '.inMatrix1')
    cmds.connectAttr(locCR + '.m', blendMtx + '.inMatrix2')
    cmds.connectAttr(blendMtx + '.ot', locC + '.t')
    cmds.connectAttr(blendMtx + '.or', locC + '.r')
    cmds.connectAttr(blendCS + '.output', locC + '.s')
    cmds.connectAttr(blendCSH + '.output', locC + '.sh')

    cmds.connectAttr(locC + '.wm', mmdcOutput + '.i[0]')
    cmds.connectAttr(controller + '.pim', mmdcOutput + '.i[1]')
    cmds.connectAttr(mmdcOutput + '.ot', controller + '.t')
    cmds.connectAttr(mmdcOutput + '.or', controller + '.r')
    cmds.connectAttr(mmdcOutput + '.os', controller + '.s')
    cmds.connectAttr(mmdcOutput + '.osh', controller + '.sh')

    sgBFunction_attribute.addAttr(loc, ln='blend', min=0, max=1, dv=1, k=1)
    cmds.connectAttr(loc + '.blend', blendMtx + '.attributeBlender')
    cmds.connectAttr(loc + '.blend', blendCS + '.blender')
    cmds.connectAttr(loc + '.blend', blendCSH + '.blender')

    if relative: sgBFunction_connection.constraintAll(replaceObj, locBase)
    else: cmds.xform(locBase, ws=1, matrix=cmds.getAttr(replaceObj + '.wm'))
def addAngleDriverAttribute( sel ):
    
    import sgBFunction_attribute
    
    sgBFunction_attribute.addAttr( sel, ln='angleRate0', cb=1 )
    sgBFunction_attribute.addAttr( sel, ln='angleRate1', cb=1 )
    sgBFunction_attribute.addAttr( sel, ln='angleRate2', cb=1 )
    
    if cmds.listConnections( sel, s=1, d=0, type='angleDriver' ): return None
    
    selP = cmds.listRelatives( sel, p=1, f=1 )[0]
    selName = sel.split( '|' )[-1]
    targetDriver = cmds.createNode( 'angleDriver', n= 'angleDriver_' + selName )
    mm = cmds.createNode( 'multMatrix', n='mm_' + selName )
    base = cmds.createNode( 'transform', n= 'angleBase_' + selName )

    base = cmds.parent( base, selP )[0]

    cmds.xform( base, ws=1, matrix= cmds.getAttr( sel+'.wm' ) )
    
    cmds.connectAttr( sel+'.wm', mm+'.i[0]' )
    cmds.connectAttr( base+'.wim', mm+'.i[1]' )
    cmds.connectAttr( mm+'.matrixSum', targetDriver+'.angleMatrix' )
        
    
    sgBFunction_attribute.addAttr( sel, ln='angleRate0', cb=1 )
    sgBFunction_attribute.addAttr( sel, ln='angleRate1', cb=1 )
    sgBFunction_attribute.addAttr( sel, ln='angleRate2', cb=1 )
    if not cmds.isConnected( targetDriver+'.outDriver0', sel+'.angleRate0' ):
        cmds.connectAttr( targetDriver+'.outDriver0', sel+'.angleRate0' )
    if not cmds.isConnected( targetDriver+'.outDriver1', sel+'.angleRate1' ):
        cmds.connectAttr( targetDriver+'.outDriver1', sel+'.angleRate1' )
    if not cmds.isConnected( targetDriver+'.outDriver2', sel+'.angleRate2' ):
        cmds.connectAttr( targetDriver+'.outDriver2', sel+'.angleRate2' )
Beispiel #34
0
def makeCloneObject2(target,
                     replaceName=['SOURCENAME_', 'TARGETNAME_'],
                     **options):

    import sgBModel_dag
    import sgBFunction_attribute
    import sgBFunction_value
    import sgBFunction_connection

    op_cloneAttrName = None
    op_shapeOn = None
    op_connectionOn = None

    op_cloneAttrName = sgBFunction_value.getValueFromDict(
        options, 'cloneAttrName')
    op_shapeOn = sgBFunction_value.getValueFromDict(options, 'shapeOn')
    op_connectionOn = sgBFunction_value.getValueFromDict(
        options, 'connectionOn')

    if op_cloneAttrName:
        attrName = op_cloneAttrName
    else:
        attrName = sgBModel_dag.cloneTargetAttrName

    targets = getParents(target)
    targets.append(target)

    targetCloneParent = None
    for cuTarget in targets:
        sgBFunction_attribute.addAttr(cuTarget, ln=attrName, at='message')
        cloneConnection = cmds.listConnections(cuTarget + '.' + attrName,
                                               s=1,
                                               d=0)
        if not cloneConnection:
            print "replaceName : ", cuTarget.split('|')[-1].replace(
                replaceName[0], replaceName[1])
            targetClone = cmds.createNode('transform',
                                          n=cuTarget.split('|')[-1].replace(
                                              replaceName[0], replaceName[1]))
            cmds.connectAttr(targetClone + '.message',
                             cuTarget + '.' + attrName)

            if op_shapeOn:
                cuTargetShape = getShape(cuTarget)
                if cuTargetShape:
                    duObj = cmds.duplicate(cuTarget, n=targetClone + '_du')[0]
                    duShape = cmds.listRelatives(duObj, s=1, f=1)[0]
                    duShape = cmds.parent(duShape, targetClone, add=1,
                                          shape=1)[0]
                    cmds.delete(duObj)
                    cmds.rename(duShape, targetClone + 'Shape')
            if op_connectionOn:
                sgBFunction_connection.getSourceConnection(
                    cuTarget, targetClone)
                cuTargetShape = getShape(cuTarget)
                targetCloneShape = getShape(targetClone)

                if cuTargetShape and targetCloneShape:
                    sgBFunction_connection.getSourceConnection(
                        cuTargetShape, targetCloneShape)
        else:
            targetClone = cloneConnection[0]

        targetCloneParentExpected = getParent(targetClone)
        if cmds.ls(targetCloneParentExpected) != cmds.ls(
                targetCloneParent) and targetCloneParent:
            targetClone = cmds.parent(targetClone, targetCloneParent)[0]

        cuTargetPos = cmds.getAttr(cuTarget + '.m')
        cmds.xform(targetClone, os=1, matrix=cuTargetPos)

        targetCloneParent = targetClone
    return targetCloneParent
Beispiel #35
0
def setKeyCurves( curves ):
    
    import sgBFunction_dag
    import sgBFunction_attribute
    import math
    
    curves = sgBFunction_dag.getChildrenCurveExists( curves )
    
    currentFrame = str( '%.2f' % cmds.currentTime( q=1 ) ).replace( '.', '_' ).replace( '-', 'm' )
    
    frameGroup = 'keyCurveGroup_%s' % currentFrame
    if not cmds.objExists( frameGroup ):
        cmds.group( em =1, n=frameGroup )
        sgBFunction_attribute.addAttr( frameGroup, ln='frameValue', dt='string' )
        cmds.setAttr( frameGroup+'.frameValue', currentFrame, type='string' )
        
        cmds.setAttr( frameGroup+'.overrideEnabled', 1 )
        cmds.setAttr( frameGroup+'.overrideColor', int( math.fabs( cmds.currentTime( q=1 ) ) )%32 )
        
    
    keyCurves = []
    for curve in curves:
        sgBFunction_attribute.addAttr( curve, ln='keyCurveBase', at='message' )
        cons = cmds.listConnections( curve+'.keyCurveBase', d=1, s=0  )
        if cons:
            targetCurve = None
            for con in cons:
                conP = cmds.listRelatives( con, p=1, f=1 )[0]
                if cmds.getAttr( conP+'.frameValue' ) == currentFrame:
                    targetCurve = con
            if targetCurve:
                keyCurves.append( targetCurve )
                continue
        
        keyCurveShape = cmds.createNode( 'nurbsCurve' )
        curveShape = sgBFunction_dag.getShape( curve )
        cmds.connectAttr( curveShape+'.local', keyCurveShape+'.create' )
        keyCurve = sgBFunction_dag.getTransform( keyCurveShape )
        
        curveName = curve.split( '|' )[-1]
        keyCurve = cmds.rename( keyCurve, curveName+'_'+currentFrame )
        keyCurves.append( keyCurve )
        
        sgBFunction_attribute.addAttr( keyCurve, ln='keyCurve', at='message' )
        cmds.connectAttr( curve+'.keyCurveBase', keyCurve+'.keyCurve' )
    
    cmds.refresh()
    
    for i in range( len( curves ) ):
        baseCurve = sgBFunction_dag.getShape( curves[i] )
        keyCurve  = sgBFunction_dag.getShape( keyCurves[i] )
        if cmds.isConnected( baseCurve+'.local', keyCurve+'.create' ):
            cmds.disconnectAttr( baseCurve+'.local', keyCurve+'.create' )
        try:keyCurves[i] = cmds.parent( keyCurves[i], frameGroup )[0]
        except:continue
    
    targetKeyCurves = []
    for i in range( len( curves ) ):
        baseCurve = curves[i]
        keyCurve  = keyCurves[i]
        if not cmds.attributeQuery( 'mtxObj_forKeyCurve', node=baseCurve, ex=1 ): 
            cmds.delete( keyCurve )
            continue
        mtxObj = cmds.listConnections( baseCurve + '.mtxObj_forKeyCurve', s=1, d=0 )
        if not mtxObj:
            cmds.delete( keyCurve )
            continue
        targetKeyCurves.append( keyCurve )
        setKeyCurve( keyCurve, baseCurve, mtxObj[0] )
    
    return targetKeyCurves
Beispiel #36
0
    def cmdCreatePattern(arg=0):

        import sgBFunction_dag
        import sgBFunction_attribute

        PatternSize = cmds.floatField(WinA_Global.ff_patternSize, q=1, v=1)
        OffsetMult = cmds.floatField(WinA_Global.ff_offsetMult, q=1, v=1)

        sels = cmds.ls(sl=1)

        curve = sels[0]
        surf = sels[1]

        curveShape = sgBFunction_dag.getShape(curve)
        surfShape = sgBFunction_dag.getShape(surf)

        numSpansU = cmds.getAttr(surfShape + '.spansU')
        numSpansV = cmds.getAttr(surfShape + '.spansV')

        rebuildSurf = cmds.createNode('rebuildSurface')
        cmds.setAttr(rebuildSurf + '.keepCorners', 0)
        cmds.setAttr(rebuildSurf + '.spansU', numSpansU)
        cmds.setAttr(rebuildSurf + '.spansV', numSpansV)

        trGeo = cmds.createNode('transformGeometry')
        node = cmds.createNode('sgPatternCurveOnSurface')

        sgBFunction_attribute.addAttr(curve,
                                      ln='patternSize',
                                      min=0.1,
                                      dv=PatternSize,
                                      k=1)
        sgBFunction_attribute.addAttr(curve,
                                      ln='offsetMult',
                                      min=0.25,
                                      dv=OffsetMult,
                                      k=1)

        cmds.connectAttr(curve + '.patternSize', node + '.patternSize')
        cmds.connectAttr(curve + '.offsetMult', node + '.offsetMult')

        newSurface = cmds.createNode('nurbsSurface')
        cmds.setAttr(newSurface + '.io', 1)

        cmds.connectAttr(surfShape + '.local', rebuildSurf + '.inputSurface')
        cmds.connectAttr(rebuildSurf + '.outputSurface',
                         trGeo + '.inputGeometry')
        cmds.connectAttr(surf + '.wm', trGeo + '.transform')
        cmds.connectAttr(trGeo + '.outputGeometry', newSurface + '.create')
        cmds.connectAttr(newSurface + '.local', node + '.surface')
        cmds.connectAttr(curveShape + '.local', node + '.curve')

        surfShape = cmds.listRelatives(curve, s=1, f=1)[0]
        nodes = cmds.listConnections(surfShape,
                                     s=0,
                                     d=1,
                                     type='sgPatternCurveOnSurface')

        outputNum = cmds.getAttr(nodes[0] + '.numOutput')

        for i in range(outputNum):
            cons = cmds.listConnections(nodes[0] + '.outputCurves[%d]' % i)
            if not cons:
                outputCurve = cmds.createNode('nurbsCurve')
                cmds.connectAttr(nodes[0] + '.outputCurves[%d]' % i,
                                 outputCurve + '.create')
Beispiel #37
0
def createRivetOnSurfacePoint(surfacePoint, firstDirection='u'):

    import sgBFunction_attribute

    if firstDirection.lower() == 'u':
        fString = 'U'
        sString = 'V'
    else:
        fString = 'V'
        sString = 'U'

    surfaceName, uv = surfacePoint.split('.uv')

    surfaceName = sgModelDag.getShape(surfaceName)

    uvSplits = uv.split('][')

    uValue = float(uvSplits[0].replace('[', ''))
    vValue = float(uvSplits[1].replace(']', ''))

    pointOnSurf = cmds.createNode('pointOnSurfaceInfo')
    vectorNode = cmds.createNode('vectorProduct')
    fbfNode = cmds.createNode('fourByFourMatrix')
    mmdcNode = cmds.createNode('multMatrixDecompose')
    rivetNode = cmds.createNode('transform')

    cmds.setAttr(pointOnSurf + '.u', uValue)
    cmds.setAttr(pointOnSurf + '.v', vValue)
    cmds.setAttr(vectorNode + '.operation', 2)
    cmds.setAttr(rivetNode + '.dla', 1)
    cmds.setAttr(rivetNode + '.dh', 1)

    cmds.connectAttr(surfaceName + '.worldSpace[0]',
                     pointOnSurf + '.inputSurface')
    cmds.connectAttr(pointOnSurf + '.tangent%s' % fString,
                     vectorNode + '.input1')
    cmds.connectAttr(pointOnSurf + '.tangent%s' % sString,
                     vectorNode + '.input2')

    cmds.connectAttr(pointOnSurf + '.tangent%sx' % fString, fbfNode + '.i00')
    cmds.connectAttr(pointOnSurf + '.tangent%sy' % fString, fbfNode + '.i01')
    cmds.connectAttr(pointOnSurf + '.tangent%sz' % fString, fbfNode + '.i02')
    cmds.connectAttr(pointOnSurf + '.tangent%sx' % sString, fbfNode + '.i10')
    cmds.connectAttr(pointOnSurf + '.tangent%sy' % sString, fbfNode + '.i11')
    cmds.connectAttr(pointOnSurf + '.tangent%sz' % sString, fbfNode + '.i12')
    cmds.connectAttr(vectorNode + '.outputX', fbfNode + '.i20')
    cmds.connectAttr(vectorNode + '.outputY', fbfNode + '.i21')
    cmds.connectAttr(vectorNode + '.outputZ', fbfNode + '.i22')
    cmds.connectAttr(pointOnSurf + '.positionX', fbfNode + '.i30')
    cmds.connectAttr(pointOnSurf + '.positionY', fbfNode + '.i31')
    cmds.connectAttr(pointOnSurf + '.positionZ', fbfNode + '.i32')

    cmds.connectAttr(fbfNode + '.output', mmdcNode + '.i[0]')
    cmds.connectAttr(rivetNode + '.pim', mmdcNode + '.i[1]')
    cmds.connectAttr(mmdcNode + '.ot', rivetNode + '.t')
    cmds.connectAttr(mmdcNode + '.or', rivetNode + '.r')

    sgBFunction_attribute.addAttr(rivetNode,
                                  ln='paramU',
                                  min=0,
                                  dv=uValue,
                                  k=1)
    sgBFunction_attribute.addAttr(rivetNode,
                                  ln='paramV',
                                  min=0,
                                  dv=vValue,
                                  k=1)

    cmds.connectAttr(rivetNode + '.paramU', pointOnSurf + '.u')
    cmds.connectAttr(rivetNode + '.paramV', pointOnSurf + '.v')
 def getCamControllerAndCamControled( targetCam ):
 
     import sgBFunction_dag
     import sgBFunction_connection
     import sgBFunction_attribute
     
     cloneObject = sgBFunction_dag.getConstrainedObject( targetCam )
     sgBFunction_attribute.addAttr( targetCam, ln='transController', at='message' )
     sgBFunction_attribute.addAttr( targetCam, ln='transControllerP', at='message' )
     sgBFunction_attribute.addAttr( targetCam, ln='camControled', at='message' )
     
     transController  = cmds.listConnections( targetCam+'.transController' )
     transControllerP = cmds.listConnections( targetCam+'.transControllerP' )
     camControled     = cmds.listConnections( targetCam+'.camControled' )
     
     for target in [ transController, transControllerP, camControled ]:
         if not target: continue
         cmds.delete( target )
     
     transControllerP = cmds.createNode( 'transform' )
     transController  = cmds.polyPlane( width=.192, height=.108, subdivisionsHeight=1, subdivisionsWidth=1  )[0]
     camControled     = cmds.duplicate( targetCam )[0]
     
     transController = cmds.parent( transController, transControllerP )[0]
 
     cmds.setAttr( transController+'.rx', -90 )
     cmds.setAttr( transController+'.s', .725, .725, .725 )
     
     cmds.makeIdentity( transController, apply=1, t=1, r=1, s=1, n=0 )
     
     cmds.setAttr( transController+'.overrideEnabled', 1 )
     cmds.setAttr( transController+'.overrideLevelOfDetail', 1 )
     cmds.setAttr( transController+'.overrideDisplayType', 2 )
     
     cmds.setAttr( transControllerP+'.tz', -2.779 )
     
     for attr in [ 'tx', 'ty', 'tz', 'rx', 'ry', 'rz', 'sx', 'sy', 'sz' ]:
         cmds.setAttr( transControllerP+'.'+attr, e=1, lock=1 )
     for attr in [ 'tz', 'rx', 'ry', 'rz' ]:
         cmds.setAttr( transController+'.'+attr, e=1, lock=1, k=0 )
 
     cmds.parent( transControllerP, cloneObject )
 
     camControledShape = sgBFunction_dag.getShape( camControled )
     cmds.setAttr( camControledShape+'.displayResolution', 0 )
     cmds.setAttr( camControledShape+'.displayGateMask', 0 )
     
     cmds.connectAttr( transController+'.tx', camControledShape+'.filmTranslateH' )
     cmds.connectAttr( transController+'.ty', camControledShape+'.filmTranslateV' )
 
     multNode = cmds.createNode( 'multiplyDivide' )
     luminance = cmds.createNode( 'luminance' )
     multDouble = cmds.createNode( 'multDoubleLinear' )
     cmds.setAttr( multNode+'.input1', 1,1,1 )
     cmds.setAttr( multNode+'.op', 2 )
     cmds.connectAttr( transController+'.sx', multNode+'.input2X' )
     cmds.connectAttr( transController+'.sy', multNode+'.input2Y' )
     cmds.connectAttr( transController+'.sz', multNode+'.input2Z' )
     cmds.connectAttr( multNode+'.output', luminance+'.value' )
     cmds.connectAttr( luminance+'.outValue', multDouble+'.input1' )
     cmds.setAttr( multDouble+'.input2', 14 )
     cmds.connectAttr( multDouble+'.output', camControledShape+'.postScale' )
 
     sgBFunction_connection.constraintAll( targetCam, camControled )
     
     cmds.connectAttr( transController +'.message', targetCam+'.transController' )
     cmds.connectAttr( transControllerP+'.message', targetCam+'.transControllerP' )
     cmds.connectAttr( camControled+'.message',     targetCam+'.camControled' )
Beispiel #39
0
    def createUiSeparatedView( cam, width, height, indexW, indexH, sgw, sgh, sw, sh, scale, camNum, createWindow=False ):

        uiPrefix = 'separatedViewCam_%d_' % camNum

        sepWidthValue = 1.0 / sgw / sw
        filmTransWidthValue = gWidthValues[ indexW ] - 1.0/sgw - sepWidthValue
        filmTransWidthValues = []
        for i in range( sw ):
            filmTransWidthValue += sepWidthValue * 2
            filmTransWidthValues.append( filmTransWidthValue )
        
        sepHeightValue = 1.0 / sgh / sh
        filmTransHeightValue = gHeightValues[ indexH ] - 1.0/sgh - sepHeightValue
        filmTransHeightValues = []
        for i in range( sh ):
            filmTransHeightValue += sepHeightValue * 2
            filmTransHeightValues.append( filmTransHeightValue * aspectRatio )
        
        targetCams = []
        tlcList    = []
        
        scaleValue = sw * sgw
        
        offsetWidth  = width / sgw * indexW
        offsetHeight = height / sgh * indexH
        
        animationCam = cmds.duplicate( cam, n= cam + '_animation_%d_%d' %( indexW, indexH ) )[0]
        aniCamShape  = sgBFunction_dag.getShape( animationCam )
        cmds.setAttr( aniCamShape+'.displayResolution', 0 )
        cmds.setAttr( aniCamShape+'.displayGateMask', 0 )
        cmds.setAttr( aniCamShape+'.postScale', scaleValue )
        cmds.setAttr( aniCamShape+'.filmFit', 1 )
        sgBFunction_attribute.addAttr( animationCam, ln='mainCam', at='message' )
        cmds.connectAttr( cam+'.aniamtionCam', animationCam+'.mainCam' )
        cmds.setAttr( aniCamShape+'.overscan', 1 )
        
        for i in range( len( filmTransHeightValues ) ):
            for j in range( len( filmTransWidthValues ) ):
                duCam = cmds.duplicate( cam, n= cam + '_translate_G_%d_%d_%02d_%02d' % ( indexW, indexH, i+1 , j+1 ) )[0]
                sgBFunction_attribute.addAttr( duCam, ln='mainCam', at='message' )
                cmds.connectAttr( cam+'.filmTranslateCams', duCam+'.mainCam' )
                duCamShape = sgBFunction_dag.getShape( duCam )
                cmds.setAttr( duCamShape+'.overscan', 1 )
                cmds.setAttr( duCamShape+'.displayResolution', 0 )
                cmds.setAttr( duCamShape+'.displayGateMask', 0 )
                cmds.setAttr( duCamShape+'.postScale', scaleValue )
                cmds.setAttr( duCamShape+'.filmFit', 1 )
                cmds.setAttr( duCamShape + '.filmTranslateH', filmTransWidthValues[j] )
                cmds.setAttr( duCamShape + '.filmTranslateV', -filmTransHeightValues[i] )
                cuFrame = i * len( filmTransWidthValues ) + j + 1
                #print "frame : %02d, %5.2f, %5.2f" %( cuFrame, filmTransWidthValues[j], -filmTransHeightValues[i] )
                cmds.setKeyframe( animationCam + '.filmTranslateH', t= cuFrame, v= filmTransWidthValues[j] )
                cmds.setKeyframe( animationCam + '.filmTranslateV', t= cuFrame, v=-filmTransHeightValues[i] )
                targetCams.append( duCam )
                tlcValue = [ int( ( (filmTransHeightValues[i]-filmTransHeightValues[0])*width/2 )*scale) + 23, 
                             int( ( (filmTransWidthValues[j]-filmTransWidthValues[0])*width/2 )*scale)+1 ]
                tlcList.append( tlcValue )
        
        
        if createWindow:
            for i in range( len( targetCams ) ):
                winName = uiPrefix + targetCams[i]
                tlc = tlcList[i]
                tlc[0] += top + offsetHeight *scale
                tlc[1] += left + offsetWidth *scale
                inst = sgBModel_ui.ModelEditorWindow( winName, eachResolutionWidth, eachResolutionHeight, tlc, False, camera=targetCams[i], hud=0, 
                                                  cameras=0, dynamics=0, ikHandles=0, nurbsCurves=0, textures=False, grid=False,
                                                  da='smoothShaded' )
                inst.create()
            
            tlc = tlcList[ 0 ]
            tlc[0] -= 23
            
            inst = sgBModel_ui.ModelEditorWindow( uiPrefix + animationCam, eachResolutionWidth, eachResolutionHeight, tlc, True, False, camera=animationCam, hud=0, 
                                                  cameras=0, dynamics=0, ikHandles=0, nurbsCurves=0, textures=False, grid=False,
                                                  da='smoothShaded' )
            inst.create()
            cmds.window( inst.winName, e=1, title='WCA_%d_%d' %( indexW, indexH ) ) 
        
        minFrame = 1
        maxFrame = len( filmTransHeightValues ) * len( filmTransWidthValues )
        cmds.playbackOptions( min=minFrame )
        cmds.playbackOptions( max=maxFrame )
        cmds.currentTime( minFrame )
Beispiel #40
0
def setKeyCurves(curves):

    import sgBFunction_dag
    import sgBFunction_attribute
    import math

    curves = sgBFunction_dag.getChildrenCurveExists(curves)

    currentFrame = str('%.2f' % cmds.currentTime(q=1)).replace('.',
                                                               '_').replace(
                                                                   '-', 'm')

    frameGroup = 'keyCurveGroup_%s' % currentFrame
    if not cmds.objExists(frameGroup):
        cmds.group(em=1, n=frameGroup)
        sgBFunction_attribute.addAttr(frameGroup, ln='frameValue', dt='string')
        cmds.setAttr(frameGroup + '.frameValue', currentFrame, type='string')

        cmds.setAttr(frameGroup + '.overrideEnabled', 1)
        cmds.setAttr(frameGroup + '.overrideColor',
                     int(math.fabs(cmds.currentTime(q=1))) % 32)

    keyCurves = []
    for curve in curves:
        sgBFunction_attribute.addAttr(curve, ln='keyCurveBase', at='message')
        cons = cmds.listConnections(curve + '.keyCurveBase', d=1, s=0)
        if cons:
            targetCurve = None
            for con in cons:
                conP = cmds.listRelatives(con, p=1, f=1)[0]
                if cmds.getAttr(conP + '.frameValue') == currentFrame:
                    targetCurve = con
            if targetCurve:
                keyCurves.append(targetCurve)
                continue

        keyCurveShape = cmds.createNode('nurbsCurve')
        curveShape = sgBFunction_dag.getShape(curve)
        cmds.connectAttr(curveShape + '.local', keyCurveShape + '.create')
        keyCurve = sgBFunction_dag.getTransform(keyCurveShape)

        curveName = curve.split('|')[-1]
        keyCurve = cmds.rename(keyCurve, curveName + '_' + currentFrame)
        keyCurves.append(keyCurve)

        sgBFunction_attribute.addAttr(keyCurve, ln='keyCurve', at='message')
        cmds.connectAttr(curve + '.keyCurveBase', keyCurve + '.keyCurve')

    cmds.refresh()

    for i in range(len(curves)):
        baseCurve = sgBFunction_dag.getShape(curves[i])
        keyCurve = sgBFunction_dag.getShape(keyCurves[i])
        if cmds.isConnected(baseCurve + '.local', keyCurve + '.create'):
            cmds.disconnectAttr(baseCurve + '.local', keyCurve + '.create')
        try:
            keyCurves[i] = cmds.parent(keyCurves[i], frameGroup)[0]
        except:
            continue

    targetKeyCurves = []
    for i in range(len(curves)):
        baseCurve = curves[i]
        keyCurve = keyCurves[i]
        if not cmds.attributeQuery('mtxObj_forKeyCurve', node=baseCurve, ex=1):
            cmds.delete(keyCurve)
            continue
        mtxObj = cmds.listConnections(baseCurve + '.mtxObj_forKeyCurve',
                                      s=1,
                                      d=0)
        if not mtxObj:
            cmds.delete(keyCurve)
            continue
        targetKeyCurves.append(keyCurve)
        setKeyCurve(keyCurve, baseCurve, mtxObj[0])

    return targetKeyCurves
Beispiel #41
0
def addPositionBasedController( controller, relative=True ):
    
    import sgBFunction_connection
    import sgBFunction_attribute
    import sgCFnc_connection
    
    controllerName = controller.split( '|' )[-1]
    
    controllerP = cmds.listRelatives( controller, p=1, f=1 )[0]
    replaceObj = cmds.createNode( 'transform', n=controllerName + '_replace' )
    
    replaceObj = cmds.parent( replaceObj, controllerP )[0]
    
    cmds.xform( replaceObj, ws=1, matrix= cmds.getAttr( controller+'.wm' ) )
    sgBFunction_connection.getSourceConnection( controller, replaceObj )
    
    outputCons, inputCons = sgCFnc_connection.getSourceConnection( controller )
    
    for i in range( len( outputCons ) ):
        cmds.disconnectAttr( outputCons[i], inputCons[i] )
    
    locC  = cmds.createNode( 'transform', n='locC' )
    locCR = cmds.createNode( 'transform', n='locCR' )
    locCS = cmds.createNode( 'transform', n='locCS' )
    loc = cmds.spaceLocator()[0]
    locP = cmds.group( loc )
    pivCtl = cmds.createNode( 'transform' );cmds.setAttr( pivCtl + '.dh', 1 )
    locBase = cmds.group( locP, pivCtl )
    
    locC, locCR, locCS = cmds.parent( locC, locCR, locCS, loc )
    
    cmds.connectAttr( pivCtl + '.t',  locP + '.t' )
    cmds.connectAttr( pivCtl + '.r',  locP + '.r' )
    cmds.connectAttr( pivCtl + '.s',  locP + '.s' )
    cmds.connectAttr( pivCtl + '.sh', locP + '.sh' )
    
    mmdcLocCR = cmds.createNode( 'multMatrixDecompose' )
    cmds.connectAttr( locBase + '.wm', mmdcLocCR + '.i[0]' )
    cmds.connectAttr( pivCtl + '.wim', mmdcLocCR + '.i[1]' )
    cmds.connectAttr( mmdcLocCR + '.ot', locCR + '.t' )
    cmds.connectAttr( mmdcLocCR + '.or', locCR + '.r' )
    cmds.connectAttr( mmdcLocCR + '.os', locCR + '.s' )
    cmds.connectAttr( mmdcLocCR + '.osh', locCR + '.sh' )
    
    mmdcLocCS = cmds.createNode( 'multMatrixDecompose' )
    cmds.connectAttr( replaceObj + '.wm',  mmdcLocCS + '.i[0]' )
    cmds.connectAttr( loc  + '.wim', mmdcLocCS + '.i[1]' )
    cmds.connectAttr( mmdcLocCS + '.ot', locCS + '.t' )
    cmds.connectAttr( mmdcLocCS + '.or', locCS + '.r' )
    cmds.connectAttr( mmdcLocCS + '.os', locCS + '.s' )
    cmds.connectAttr( mmdcLocCS + '.osh', locCS + '.sh' )
    
    blendMtx = cmds.createNode( 'blendTwoMatrixDecompose' )
    blendCS  = cmds.createNode( 'blendColors' )
    blendCSH = cmds.createNode( 'blendColors' )
    mmdcOutput = cmds.createNode( 'multMatrixDecompose' )
    
    cmds.connectAttr(  locCR + '.s',  blendCS  + '.color1' )
    cmds.connectAttr(  locCS + '.s',  blendCS  + '.color2' )
    cmds.connectAttr(  locCR + '.sh', blendCSH + '.color1' )
    cmds.connectAttr(  locCS + '.sh', blendCSH + '.color2' )
    
    cmds.connectAttr( locCS + '.m', blendMtx + '.inMatrix1' )
    cmds.connectAttr( locCR + '.m', blendMtx + '.inMatrix2' )
    cmds.connectAttr( blendMtx + '.ot',  locC + '.t' )
    cmds.connectAttr( blendMtx + '.or',  locC + '.r' )
    cmds.connectAttr( blendCS + '.output',  locC + '.s' )
    cmds.connectAttr( blendCSH + '.output', locC + '.sh' )
    
    cmds.connectAttr( locC + '.wm', mmdcOutput + '.i[0]' )
    cmds.connectAttr( controller+'.pim',       mmdcOutput + '.i[1]' )
    cmds.connectAttr( mmdcOutput + '.ot',  controller+'.t' )
    cmds.connectAttr( mmdcOutput + '.or',  controller+'.r' )
    cmds.connectAttr( mmdcOutput + '.os',  controller+'.s' )
    cmds.connectAttr( mmdcOutput + '.osh', controller+'.sh' )
    
    sgBFunction_attribute.addAttr( loc, ln='blend', min=0, max=1, dv=1, k=1 )
    cmds.connectAttr( loc + '.blend', blendMtx + '.attributeBlender' )
    cmds.connectAttr( loc + '.blend', blendCS + '.blender' )
    cmds.connectAttr( loc + '.blend', blendCSH + '.blender' )

    if relative: sgBFunction_connection.constraintAll( replaceObj, locBase )
    else: cmds.xform( locBase, ws=1, matrix= cmds.getAttr( replaceObj + '.wm' ) )
Beispiel #42
0
    def createUiSeparatedView(cam,
                              width,
                              height,
                              indexW,
                              indexH,
                              sgw,
                              sgh,
                              sw,
                              sh,
                              scale,
                              camNum,
                              createWindow=False):

        uiPrefix = 'separatedViewCam_%d_' % camNum

        sepWidthValue = 1.0 / sgw / sw
        filmTransWidthValue = gWidthValues[indexW] - 1.0 / sgw - sepWidthValue
        filmTransWidthValues = []
        for i in range(sw):
            filmTransWidthValue += sepWidthValue * 2
            filmTransWidthValues.append(filmTransWidthValue)

        sepHeightValue = 1.0 / sgh / sh
        filmTransHeightValue = gHeightValues[
            indexH] - 1.0 / sgh - sepHeightValue
        filmTransHeightValues = []
        for i in range(sh):
            filmTransHeightValue += sepHeightValue * 2
            filmTransHeightValues.append(filmTransHeightValue * aspectRatio)

        targetCams = []
        tlcList = []

        scaleValue = sw * sgw

        offsetWidth = width / sgw * indexW
        offsetHeight = height / sgh * indexH

        animationCam = cmds.duplicate(cam,
                                      n=cam + '_animation_%d_%d' %
                                      (indexW, indexH))[0]
        aniCamShape = sgBFunction_dag.getShape(animationCam)
        cmds.setAttr(aniCamShape + '.displayResolution', 0)
        cmds.setAttr(aniCamShape + '.displayGateMask', 0)
        cmds.setAttr(aniCamShape + '.postScale', scaleValue)
        cmds.setAttr(aniCamShape + '.filmFit', 1)
        sgBFunction_attribute.addAttr(animationCam, ln='mainCam', at='message')
        cmds.connectAttr(cam + '.aniamtionCam', animationCam + '.mainCam')
        cmds.setAttr(aniCamShape + '.overscan', 1)

        for i in range(len(filmTransHeightValues)):
            for j in range(len(filmTransWidthValues)):
                duCam = cmds.duplicate(cam,
                                       n=cam + '_translate_G_%d_%d_%02d_%02d' %
                                       (indexW, indexH, i + 1, j + 1))[0]
                sgBFunction_attribute.addAttr(duCam,
                                              ln='mainCam',
                                              at='message')
                cmds.connectAttr(cam + '.filmTranslateCams',
                                 duCam + '.mainCam')
                duCamShape = sgBFunction_dag.getShape(duCam)
                cmds.setAttr(duCamShape + '.overscan', 1)
                cmds.setAttr(duCamShape + '.displayResolution', 0)
                cmds.setAttr(duCamShape + '.displayGateMask', 0)
                cmds.setAttr(duCamShape + '.postScale', scaleValue)
                cmds.setAttr(duCamShape + '.filmFit', 1)
                cmds.setAttr(duCamShape + '.filmTranslateH',
                             filmTransWidthValues[j])
                cmds.setAttr(duCamShape + '.filmTranslateV',
                             -filmTransHeightValues[i])
                cuFrame = i * len(filmTransWidthValues) + j + 1
                #print "frame : %02d, %5.2f, %5.2f" %( cuFrame, filmTransWidthValues[j], -filmTransHeightValues[i] )
                cmds.setKeyframe(animationCam + '.filmTranslateH',
                                 t=cuFrame,
                                 v=filmTransWidthValues[j])
                cmds.setKeyframe(animationCam + '.filmTranslateV',
                                 t=cuFrame,
                                 v=-filmTransHeightValues[i])
                targetCams.append(duCam)
                tlcValue = [
                    int((
                        (filmTransHeightValues[i] - filmTransHeightValues[0]) *
                        width / 2) * scale) + 23,
                    int(((filmTransWidthValues[j] - filmTransWidthValues[0]) *
                         width / 2) * scale) + 1
                ]
                tlcList.append(tlcValue)

        if createWindow:
            for i in range(len(targetCams)):
                winName = uiPrefix + targetCams[i]
                tlc = tlcList[i]
                tlc[0] += top + offsetHeight * scale
                tlc[1] += left + offsetWidth * scale
                inst = sgBModel_ui.ModelEditorWindow(winName,
                                                     eachResolutionWidth,
                                                     eachResolutionHeight,
                                                     tlc,
                                                     False,
                                                     camera=targetCams[i],
                                                     hud=0,
                                                     cameras=0,
                                                     dynamics=0,
                                                     ikHandles=0,
                                                     nurbsCurves=0,
                                                     textures=False,
                                                     grid=False,
                                                     da='smoothShaded')
                inst.create()

            tlc = tlcList[0]
            tlc[0] -= 23

            inst = sgBModel_ui.ModelEditorWindow(uiPrefix + animationCam,
                                                 eachResolutionWidth,
                                                 eachResolutionHeight,
                                                 tlc,
                                                 True,
                                                 False,
                                                 camera=animationCam,
                                                 hud=0,
                                                 cameras=0,
                                                 dynamics=0,
                                                 ikHandles=0,
                                                 nurbsCurves=0,
                                                 textures=False,
                                                 grid=False,
                                                 da='smoothShaded')
            inst.create()
            cmds.window(inst.winName,
                        e=1,
                        title='WCA_%d_%d' % (indexW, indexH))

        minFrame = 1
        maxFrame = len(filmTransHeightValues) * len(filmTransWidthValues)
        cmds.playbackOptions(min=minFrame)
        cmds.playbackOptions(max=maxFrame)
        cmds.currentTime(minFrame)