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