コード例 #1
0
 def _shadersBrowser(self, args):
     """
     Open file dialog and set the shaders attribute
     """
     ret = cmds.fileDialog2(fileFilter="Alembic (*.abc)",
                            fileMode=1,
                            dialogStyle=2,
                            caption="Select Alembic File")
     if ret:
         selected = abcToApi.getCurrentSelection()
         cmds.setAttr("%s.abcShaders" % selected, ret[0], type="string")
         cmds.refreshEditorTemplates()
コード例 #2
0
 def _jsonBrowser(self, args):
     """
     Open file dialog and set the jsonFile attribute
     """
     ret = cmds.fileDialog2(fileFilter="Json (*.json)",
                            fileMode=1,
                            dialogStyle=2,
                            caption="Select Json File")
     if ret:
         selected = abcToApi.getCurrentSelection()
         cmds.setAttr("%s.jsonFile" % selected, ret[0], type="string")
         cmds.refreshEditorTemplates()
コード例 #3
0
def variantSetsChangeCommmand(unused, omg, node, variantSetName):
    val = cmds.optionMenuGrp(omg, q=True, value=True)
    variantAttr = 'usdVariantSet_%s' % variantSetName
    if not cmds.attributeQuery(variantAttr, node=node, exists=True):
        cmds.addAttr(node, ln=variantAttr, dt='string', internalSet=True)
    cmds.setAttr('%s.%s' % (node, variantAttr), val, type='string')

    resolvedVariant = ''
    usdPrim = UsdMaya.GetPrim(node)

    if usdPrim:
        variantSet = usdPrim.GetVariantSet(variantSetName)
        if variantSet:
            resolvedVariant = variantSet.GetVariantSelection()
    cmds.optionMenuGrp(omg, edit=True, extraLabel=resolvedVariant)

    cmds.refreshEditorTemplates()
コード例 #4
0
ファイル: SpeedTreeForest.py プロジェクト: tws0002/gs-code
	def doIt( self, argList ):
		"""Processes a SpeedTree SWA file for forest instance locations"""
		
		mc.select( clear=True )
		
		#define variables
		swaFile = swaName = ''
		SpeedTreeForest = SpeedTreeAsset = ''
		SpeedTreeForestAssets = []
		arrObjects = []
		arrObjNames = []
		arrObjCount = []
		arrTranslate = []
		upRot = []
		rightRot = []
		outRot = []
		arrScale = []
		arrInstances = []
		partCloud = []
		treeArray = []
		oCount = tCount = 0
		objTotalCount = 0
		swaCount = 0
		treeCount = 0
		objLen = 0
		
		processMode = 2
		argsLen = argList.length()
		startInd = 2
		
		#process mode
		if argsLen > 1:
			processMode = argList.asInt(0)
			swaFile = argList.asString(1)
			if processMode == 1:
				SpeedTreeForest = argList.asString(2)
				startInd = 3
			if argsLen > startInd:
				for a in range( startInd, argsLen ):
					treeArray.append( argList.asString(a) )
				treeCount = len( treeArray )
		
		#get SWA file
		if processMode == 2 and swaFile == '':
			if MayaVersion >= 2012:
				try:
					swaFile = mc.fileDialog2( fileMode=1, caption="Select a SpeedTree SWA file", okc="Load", fileFilter="*.swa", dialogStyle=2 )[0]
				except:
					swaFile = ''
			else:
				swaFile = mc.fileDialog( mode=0, title='Select a SpeedTree SWA file', directoryMask='*.swa' )
		
		swaExists = ( os.path.exists( swaFile ) and not os.path.isdir( swaFile ) )
		if swaExists:
			swaName = swaFile.rpartition("/")[2]
			swaName = swaName[:-4]
			
			#reloading forest node
			if processMode == 1:
				if MayaVersion >= 2012:
					SpeedTreeForest = mc.rename( SpeedTreeForest, swaName + '_Forest' )
					
				oldParticleSets = []
				particleSetInds = mc.getAttr( SpeedTreeForest + '.particleSets', mi=1 )
				if particleSetInds != None:
					for p in particleSetInds:
						particleSet = mc.connectionInfo( SpeedTreeForest + '.particleSets[' + str(p) + ']', sfd=1 ).split( '.' )[0]
						forestObject = mc.connectionInfo( SpeedTreeForest + '.forestObjects[' + str(p) + ']', sfd=1 ).split( '.' )[0]
						
						if particleSet != '':
							mc.removeMultiInstance( SpeedTreeForest + '.particleSets[' + str(p) + ']', b=True )
							mc.removeMultiInstance( SpeedTreeForest + '.forestObjects[' + str(p) + ']', b=True )
							if mc.objExists( forestObject ):
								mc.setAttr( forestObject + '.visibility', 1 )
							
						oldParticleSets.append( particleSet )
						
						particleSetShapes = mc.listRelatives( particleSet, s=1 )
						if particleSetShapes != None and len( particleSetShapes ) > 0:
							particleSetShape = particleSetShapes[0]
							cons = mc.listConnections( particleSetShape, d=1 )
							if cons != None and len( cons ) > 0:
								for c in cons:
									if ( mc.nodeType( c ) == 'instancer' ):
										oldParticleSets.append( c )
					
					for s in oldParticleSets:
						if mc.objExists( s ):
							mc.delete( s )
			
			else:
				SpeedTreeForest = mc.createNode( 'SpeedTreeForest', name=swaName + '_Forest' )
				mc.setAttr( SpeedTreeForest + '.swaFile', swaFile, type='string' )
			
			SpeedTreeForestAssets.append( SpeedTreeForest )
			
			#create asset
			if MayaVersion >= 2009:
				
				if processMode == 1:
					SpeedTreeAsset = mc.container( q=True, findContainer=[ SpeedTreeForest ] )
					
				if SpeedTreeAsset != '':
					if MayaVersion >= 2012:
						SpeedTreeAsset = mc.rename( SpeedTreeAsset, swaName )
					mc.container( SpeedTreeAsset, edit=True, addNode=SpeedTreeForest, force=True )
				else: 	#create container
					SpeedTreeAsset = mc.container( name=swaName, addNode=SpeedTreeForest, force=True )
					
				#asset settings
				SpeedTreeFbxPath = mc.pluginInfo( 'SpeedTreeForest.py', path=True, query=True )
				SpeedTreeFbxPart = SpeedTreeFbxPath.rpartition( '/' )
				
				if MayaVersion >= 2011:
					SpeedTreeIconPath = SpeedTreeFbxPart[0] + '/icons/SpeedTreeForest.png'
				else:
					SpeedTreeIconPath = SpeedTreeFbxPart[0] + 'icons/out_SpeedTreeForest.xpm'
				
				if os.path.isfile( SpeedTreeIconPath ):
					mc.setAttr( SpeedTreeAsset + '.iconName', SpeedTreeIconPath, type='string' )
					
				elif mc.objExists( SpeedTreeAsset + '.isAsset' ):
					mc.setAttr( SpeedTreeAsset + '.isAsset', 1 )
					
				mc.setAttr( SpeedTreeAsset + '.viewMode', 0 )
			
			#open SWA file
			swaData = open(swaFile, 'r')
			while True:
				line = swaData.readline()
				if len(line) == 0:
					break #EOF
				
				while len(line) == 1 or line == "\r\n":
					line = swaData.readline()
			    
				if line != "" and line != "\t" and line != "\n" and line!= "\r\n":
					if line[(len(line) - 2):] == "\r\n":
						line = line[:(len(line) - 2)]
					elif line[(len(line) - 1):] == "\n":
						line = line[:(len(line) - 1)]
					
					arrObjNames.append( self.stStripIllegalChars( line ) )
					line = swaData.readline()
					swaCount = int( line )
					arrObjCount.append( swaCount )
					
					for t in range(0, swaCount):
						line = swaData.readline()
						swa_instance = line.split(' ')
						
						#flip Y and Z and negate Z (Y-up conversion)
						arrTranslate.append( [float( swa_instance[0]), float( swa_instance[2] ), float( swa_instance[1] ) * -1] )
						upRot.append( [float( swa_instance[3] ), float( swa_instance[4] ), float( swa_instance[5] )] )
						rightRot.append( [float( swa_instance[6] ), float( swa_instance[7] ), float( swa_instance[8] )] )
						outRot.append( self.stCross ( upRot[tCount], rightRot[tCount] ) )
						arrScale.append( float( swa_instance[9][:-1] ) )
						tCount = tCount + 1
		
			j = 0
			objLen = len( arrObjNames )
			#handle tree entries
			for t in range( 0, objLen ):
				objName = arrObjNames[t][1:-1]
				arrInstances = []
				
				#particle object
				partCloud = mc.particle( p=arrTranslate[objTotalCount:( objTotalCount + arrObjCount[t] )] )
				partCloud[0] = mc.rename( partCloud[0], objName )
				partCloud[1] = mc.listRelatives( partCloud[0], s=1 )[0]
				particleCons = mc.listConnections( partCloud[1], p=1, c=1 )
				if len( particleCons ) == 4:
					mc.disconnectAttr( particleCons[0], particleCons[1] )
					mc.disconnectAttr( particleCons[3], particleCons[2] )
				
				mc.addAttr( partCloud[1], ln = 'rotationPP', dt='vectorArray', h=1 )
				mc.addAttr( partCloud[1], ln = 'UserVector1PP', dt='vectorArray', h=1 )
				
				if MayaVersion >= 2009 and SpeedTreeAsset != '':
					mc.container( SpeedTreeAsset, edit=True, addNode=partCloud, force=True )
				
				connectedSets = mc.getAttr( SpeedTreeForest + '.particleSets', mi=1 )
				setIndex = 0
				if connectedSets != None:
					setIndex = len( connectedSets )
				mc.connectAttr( partCloud[0] + '.message', SpeedTreeForest + '.particleSets[' + str( setIndex ) + ']' )
				
				#handle instances
				objTotalCount = objTotalCount + arrObjCount[t]
				for i in range(0, arrObjCount[t]):
					
					#transpose the Z-up matrix
					mMatrix = om.MMatrix()
					toYupMatrix = om.MMatrix()
					instRotation = [ rightRot[j][0], rightRot[j][1], rightRot[j][2], 0, outRot[j][0], outRot[j][1], outRot[j][2], 0, upRot[j][0], upRot[j][1], upRot[j][2], 0, 0, 0, 0, 1 ]
					toYup = [ 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1 ]
					om.MScriptUtil.createMatrixFromList( instRotation, mMatrix )
					om.MScriptUtil.createMatrixFromList( toYup, toYupMatrix )
					yUpMatrix = mMatrix * toYupMatrix
					
					mTransformMtx = om.MTransformationMatrix( yUpMatrix )
					eulerRot = mTransformMtx.eulerRotation()
					angles = [ math.degrees( angle ) for angle in ( eulerRot.x, eulerRot.y, eulerRot.z ) ]
					angles[0] += 90
					mc.particle( e=True, attribute='rotationPP', order=i, vectorValue=angles )
					mc.particle( e=True, attribute='UserVector1PP', order=i, vectorValue=( arrScale[j],  arrScale[j],  arrScale[j] ) )
				
					j += 1
				
				#create cache
				cacheDir = sceneCacheDir = swaDir = ''
				sceneFullPath = mc.file( q=True, sn=True )
				projectDir = mc.workspace( q=True, rd=True )
				if sceneFullPath != '':
					sceneName = sceneFullPath.rpartition( '/' )[2].rpartition( '.' )[0]
				else:
					strDateTime = 'tmp'
					dateTime = str( datetime.datetime.now() )
					dateTime = dateTime.rpartition( ':' )[0]
					dateTime = re.split( '-| |:', dateTime )
					
					if len( dateTime ) >= 5:
						strDateTime = dateTime[0] + dateTime[1] + dateTime[2] + '.' + dateTime[3] + dateTime[4]
					sceneName = getpass.getuser() + '.' + strDateTime
				
				particleDir = projectDir + 'particles'
				if not os.path.exists( particleDir ):
					os.mkdir( particleDir )
				
				swaSceneDir = sceneName
				dynGlobalsNode = mc.dynGlobals( q=True, a=True )
				curCacheDir = mc.getAttr( dynGlobalsNode + '.cacheDirectory' )
				
				#copy cache from previous file save
				if curCacheDir != '' and curCacheDir != None and not os.path.exists( particleDir + '/' + swaSceneDir ):
					shutil.copytree( particleDir + '/' + curCacheDir, particleDir + '/' + swaSceneDir )
				
				#or make a new folder for current scene cache
				elif not os.path.exists( particleDir + '/' + swaSceneDir ):
					os.mkdir( particleDir + '/' + swaSceneDir )
				
				#saving over an old file, so keep cache folder
				else:
					swaSceneDir = curCacheDir
				
				if swaSceneDir != None and swaSceneDir != '':
					mc.dynExport( partCloud[0], atr=( 'position', 'rotationPP', 'UserVector1PP' ), f='cache', p=swaSceneDir )
					mc.saveInitialState( partCloud[1] )
				
				#add trees
				if treeCount > t:
					mc.assignSpeedTreeForestEntry( SpeedTreeForest, partCloud[1], treeArray[t], setIndex, objName )
					if mc.getAttr( SpeedTreeForest + '.hs' ) == 1 and mc.objExists( treeArray[t] + '.visibility' ):
						#hide skeleton if there is one
						rootBone = ''
						treeHistory = mc.listHistory( treeArray[t] )
						for h in treeHistory:
							if mc.nodeType( h ) == 'skinCluster':
								bindPose = mc.connectionInfo( h + '.bindPose', sfd=True ).split( '.' )[0]
								if bindPose != None and bindPose != '' and mc.objExists( bindPose ):
									rootBone = mc.connectionInfo( bindPose + '.members[0]', sfd=True ).split( '.' )[0]
						
						if rootBone != '' and mc.objExists( rootBone ):
							mc.setAttr( rootBone + '.visibility', 0 )
							
						#hide source object
						mc.setAttr( treeArray[t] + '.visibility', 0 )
						
			#if processMode == 0:
			mc.select( SpeedTreeForest )
			
			if mel.eval( 'exists refreshEditorTemplates' ) and processMode == 0:
				mc.refreshEditorTemplates()
コード例 #5
0
import maya.cmds as mc
import maya.mel as mel
import math
import sys

mc.refreshEditorTemplates()

sys.setrecursionlimit(5000)


#---------------------------関数定義------------------------------#
def dot(vec1, vec2):
    return vec1[0] * vec2[0] + vec1[1] * vec2[1]


def normalize(vec):
    _len = math.sqrt(vec[0]**2 + vec[1]**2)
    if (_len == 0.0):
        return False
    else:
        return [vec[0] / _len, vec[1] / _len]


def nearAxis(vec):
    maxDotProduct = -10
    index_maxDot = 0

    for axis in axisList:
        dotResult = dot(vec, axis)
        if dotResult > maxDotProduct:
            maxDotProduct = dotResult
コード例 #6
0
 def refresh_editor(self, args):
     cmds.refreshEditorTemplates()