Ejemplo n.º 1
0
def bake(topObjects=[], **options):

    startFrame = sgModelData.getValueFromDict(options, 'startFrame')
    endFrame = sgModelData.getValueFromDict(options, 'endFrame')
    cachePath = sgModelData.getValueFromDict(options, 'cachePath')
    transformBakeOn = sgModelData.getValueFromDict(options, 'transformBake')
    geometryBakeOn = sgModelData.getValueFromDict(options, 'geometryBake')

    if not startFrame: startFrame = 1
    if not endFrame: endFrame = sgModelData.getCurrentUnitFrameRate()

    meshs = []
    if topObjects:
        topObjects = sgModelData.getArragnedList(topObjects)
        for topObj in topObjects:
            meshs += sgModelDag.getMeshsIsInVis(topObj)
    else:
        meshs += sgModelDag.getMeshsIsInVis()

    bakeTargets = []
    for mesh in meshs:
        meshParent = cmds.listRelatives(mesh, p=1, f=1)[0]
        bakeTargets += sgModelDag.getHierarchy(meshParent)

    print "geometryBakeOn : ", geometryBakeOn
    if geometryBakeOn:
        geometryBake(meshs, startFrame, endFrame, cachePath)
    if transformBakeOn:
        transformBake(bakeTargets, startFrame, endFrame, cachePath)

    return cachePath
Ejemplo n.º 2
0
 def __init__(self, label, popupLabel='Load Selected', typ='single', **options ):
     
     self._label = label
     self._popup = popupLabel
     self._position = sgModelData.getValueFromDict( options, 'position' )
     self._textWidth = sgModelData.getValueFromDict( options, 'textWidth' )
     self._addCommand = sgModelData.getValueFromDict( options, 'addCommand' )
     if self._textWidth == None: self._textWidth = 120
     self._field  =''
     self._type = typ
     self._cmdPopup = [self.cmdLoadSelected]
Ejemplo n.º 3
0
    def __init__(self,
                 label,
                 popupLabel='Load Selected',
                 typ='single',
                 **options):

        self._label = label
        self._popup = popupLabel
        self._position = sgModelData.getValueFromDict(options, 'position')
        self._textWidth = sgModelData.getValueFromDict(options, 'textWidth')
        self._addCommand = sgModelData.getValueFromDict(options, 'addCommand')
        if self._textWidth == None: self._textWidth = 120
        self._field = ''
        self._type = typ
        self._cmdPopup = [self.cmdLoadSelected]
Ejemplo n.º 4
0
def getTangentAtParam( curve, paramValue, **options ):
    
    curveShape = sgModelDag.getShape( curve )
    
    objectSpace = sgModelData.getValueFromDict( options, 'os' )
    
    fnCurve= om.MFnNurbsCurve( sgModelDag.getDagPath( curveShape ) )
    
    tangentValue = om.MVector()
    if objectSpace:
        tangentValue = fnCurve.tangent( paramValue )
    else:
        worldMatrix = cmds.getAttr( curve+'.wm')
        worldMMatrix = sgModelConvert.convertMatrixToMMatrix( worldMatrix )
        tangentValue = fnCurve.tangent( paramValue ) * worldMMatrix
    
    return tangentValue
Ejemplo n.º 5
0
def duplicateAndMatrixConnect( targets, **options ):
    
    import sgModelData
    
    name = sgModelData.getValueFromDict( options, 'name' )
    
    if not type( targets ) in [ type( [] ), type( () ) ]:
        targets = [ targets ]
    for i in range( len( targets ) ):
        target = targets[i]
        
        dcmp = cmds.createNode( 'decomposeMatrix' )
        
        if not name:
            duObject = cmds.duplicate( target )[0]
        else:
            duObject = cmds.duplicate( target, n=name+'_%d' % i )[0]
        
        cmds.connectAttr( target+'.wm', dcmp+'.imat' )
        cmds.connectAttr( dcmp+'.otx', duObject+'.tx' )
        cmds.connectAttr( dcmp+'.oty', duObject+'.ty' )
        cmds.connectAttr( dcmp+'.otz', duObject+'.tz' )
        cmds.connectAttr( dcmp+'.orx', duObject+'.rx' )
        cmds.connectAttr( dcmp+'.ory', duObject+'.ry' )
        cmds.connectAttr( dcmp+'.orz', duObject+'.rz' )
        cmds.connectAttr( dcmp+'.osx', duObject+'.sx' )
        cmds.connectAttr( dcmp+'.osy', duObject+'.sy' )
        cmds.connectAttr( dcmp+'.osz', duObject+'.sz' )
        cmds.connectAttr( dcmp+'.oshx', duObject+'.shxy' )
        cmds.connectAttr( dcmp+'.oshy', duObject+'.shxz' )
        cmds.connectAttr( dcmp+'.oshz', duObject+'.shyz' )
        cmds.setAttr( duObject+'.shxy', k=1 )
        cmds.setAttr( duObject+'.shxz', k=1 )
        cmds.setAttr( duObject+'.shyz', k=1 )
        
        rPiv = cmds.getAttr( target+'.rotatePivot' )[0]
        sPiv = cmds.getAttr( target+'.scalePivot' )[0]
        
        cmds.setAttr( target+'.rotatePivot', *rPiv )
        cmds.setAttr( target+'.scalePivot', *sPiv )
        
        if cmds.listRelatives( duObject, p=1 ): duObject = cmds.parent( duObject, w=1 )
        trChildren =  cmds.listRelatives( duObject, c=1, type='transform', f=1 )
        if trChildren: cmds.delete( trChildren )
    '''
Ejemplo n.º 6
0
def getPointAtParam( curve, paramValue, **options ):
    
    curveShape = sgModelDag.getShape( curve )
    
    objectSpace = sgModelData.getValueFromDict( options, 'os' )
    
    fnCurve= om.MFnNurbsCurve( sgModelDag.getDagPath( curveShape ) )
    
    pointValue = om.MPoint()
    if objectSpace:
        fnCurve.getPointAtParam( paramValue, pointValue )
    else:
        worldMatrix = cmds.getAttr( curve+'.wm')
        worldMMatrix = sgModelConvert.convertMatrixToMMatrix( worldMatrix )
        fnCurve.getPointAtParam( paramValue, pointValue )
        pointValue *= worldMMatrix

    return pointValue
Ejemplo n.º 7
0
def copyShape( shapeObject, **options ):
    
    try:shapeName = cmds.listRelatives( shapeObject, s=1, f=1 )[0]
    except: return None
    
    cons = cmds.listConnections( shapeObject+'.message', p=1, c=1 )
    if cons:
        inputCons = cons[1::2]
        for inputCon in inputCons:
            if inputCon.find( 'copyTarget' ) != -1:
                return cmds.ls( inputCon.split( '.' )[0], l=1 )[0]
    
    trShape = cmds.createNode( 'transform' )
    
    oShape = sgModelDag.getMObject( shapeName )
    oTrShape = sgModelDag.getMObject( trShape )
    
    if cmds.nodeType( shapeName ) == 'mesh':
        fnMesh = om.MFnMesh()
        fnMesh.copy( oShape, oTrShape )
    elif cmds.nodeType( shapeName ) == 'nurbsCurve':
        fnCurve = om.MFnNurbsCurve()
        fnCurve.copy( oShape, oTrShape )
    elif cmds.nodeType( shapeName ) == 'nurbsSurface':
        fnSurf = om.MFnNurbsSurface()
        fnSurf.copy( oShape, oTrShape )
    
    copyMatrix = sgModelData.getValueFromDict( options, 'copyMatrix' )
    
    if copyMatrix:
        cmds.xform( trShape, ws=1, matrix=cmds.getAttr( shapeName+'.wm' ) )
    
    try:cmds.sets( trShape, e=1, forceElement = 'initialShadingGroup' )
    except:pass
    
    cmds.addAttr( trShape, ln='copyTarget', at='message' )
    cmds.connectAttr( shapeObject+'.message', trShape+'.copyTarget' )
    
    return cmds.ls( trShape, l=1 )[0]
Ejemplo n.º 8
0
def getParamAtPoint( curve, MPointValue, **options ):
    
    curveShape = sgModelDag.getShape( curve )
    
    objectSpace = sgModelData.getValueFromDict( options, 'os' )
    
    nearPointOnCurve = cmds.createNode( 'nearestPointOnCurve')
    cmds.connectAttr( curveShape+'.local', nearPointOnCurve+'.inputCurve' )
    
    paramValue = 0.0
    if objectSpace:
        cmds.setAttr( nearPointOnCurve+'.inPosition', MPointValue.x, MPointValue.y, MPointValue.z )
        paramValue = cmds.getAttr( nearPointOnCurve+'.parameter' )
    else:
        worldMatrix = cmds.getAttr( curve+'.wm')
        worldMMatrix = sgModelConvert.convertMatrixToMMatrix( worldMatrix )
        localMPoint = MPointValue * worldMMatrix.inverse()
        cmds.setAttr( nearPointOnCurve+'.inPosition', localMPoint.x, localMPoint.y, localMPoint.z )
        paramValue = cmds.getAttr( nearPointOnCurve+'.parameter' )
    
    cmds.delete( nearPointOnCurve )
    return paramValue
Ejemplo n.º 9
0
def importCacheAndBake(topObjects=[], **options):

    cachePath = sgModelData.getValueFromDict(options, 'cachePath')
    if not cachePath:
        print "cache path is not exists"
        return None

    bakeCacheFile = cachePath + '/transformBake.pickle'

    f = open(bakeCacheFile, 'r')
    bakeInfomation = cPickle.load(f)
    f.close()

    currentTimeUnit = bakeInfomation['currentTimeUnit']
    startFrame = bakeInfomation['startFrame']
    endFrame = bakeInfomation['endFrame']

    cmds.currentUnit(time=currentTimeUnit)

    meshs = []
    if topObjects:
        topObjects = sgModelData.getArragnedList(topObjects)
        for topObj in topObjects:
            meshs += sgModelDag.getMeshsIsInVis(topObj)
    else:
        meshs += sgModelDag.getMeshsIsInVis()

    originalTargets = []
    bakeTargets = []
    for mesh in meshs:
        meshParent = cmds.listRelatives(mesh, p=1, f=1)[0]
        bakeTargets += sgFunctionDag.duplicateHierarchy(meshParent)
    bakeTargets = list(set(bakeTargets))
    dagBakeTargets = sgModelConvert.convertMFnDagNodes(bakeTargets)

    renamedBakeTargets = []
    for dagBakeTarget in dagBakeTargets:
        bakeTarget = dagBakeTarget.fullPathName()
        listAttrs = cmds.listAttr(bakeTarget, k=1)
        copyTarget = sgModelDag.getFullPathName(
            cmds.listConnections(bakeTarget + '.copyTarget')[0])

        for attr in listAttrs:
            keyAttr = bakeTarget + '.' + attr
            try:
                values = bakeInfomation[copyTarget][attr]
            except:
                try:
                    animCurve = bakeInfomation[copyTarget][attr + '_animCurve']
                    bakedAnimCurve = cmds.duplicate(animCurve,
                                                    n=animCurve + '_BAKE')[0]
                    cmds.connectAttr(bakedAnimCurve + '.output', keyAttr)
                    continue
                except:
                    continue
            for i in range(startFrame, endFrame + 1):
                index = i - startFrame
                cmds.setKeyframe(keyAttr, time=i, value=values[index])

        originalTargets.append(copyTarget)
        copyTarget = sgModelDag.getOriginalName(copyTarget)
        dagBakeTarget = cmds.rename(dagBakeTarget.fullPathName(),
                                    copyTarget.replace(':', '_') + '_BAKE')
        renamedBakeTargets.append(dagBakeTarget)

    for mesh in meshs:

        if not sgModelDag.isDeformedObject(mesh): continue

        meshOrigName = sgModelDag.getOriginalName(mesh)
        importCachePath = cachePath + '/' + meshOrigName.replace(':',
                                                                 '_') + '.xml'

        meshParent = cmds.listRelatives(mesh, p=1, f=1)[0]
        cons = cmds.listConnections(meshParent + '.message', p=1, c=1)
        for con in cons[1::2]:
            split = con.split('.')
            if split[1].find('copyTarget') != -1:
                targetMesh = split[0]
                importCache(targetMesh, importCachePath)
                break

    for bakeTarget in renamedBakeTargets:
        cmds.deleteAttr(bakeTarget, attribute='copyTarget')