def exporterCombined(arg,prefix): pm.select(r=arg) #Determining Export type expType=optionMenu("exportType",q=1,v=1) extension='' name=pm.textField('combName',q=1,text=1) #OBJ if expType == "OBJ": extension=".obj" prefix=prefix + "OBJ/" pm.file(pr=1,typ="OBJexport",es=(prefix + name + extension),op="groups=0;ptgroups=0;materials=0;smoothing=1;normals=1") if expType == "FBX": extension=".fbx" #FBX prefix=prefix + "FBX/" pm.file(typ="FBX export",force=1,options="binary=1;compression=0;tabstop=8;perframe=0;padframe=0;perlayer=0;pathnames=3313333333;assembly=1;fragment=1;fragsurfmats=1;fragsurfmatsassign=1;fragincshdrs=1;fragchilddag=1;passcontrimaps=1;passusrdata=0;filter=00000011010000001101000;overrideAssemblyRootName=0;assemblyRootName=",es=(prefix + name + extension)) if expType == "PROXY": extension=".mi" #PROXY prefix=prefix + "renderProxy/" #file -force -options "binary=1;compression=0;tabstop=8;perframe=0;padframe=0;perlayer=0;pathnames=3313333333;assembly=1;fragment=1;fragsurfmats=1;fragsurfmatsassign=1;fragincshdrs=1;fragchilddag=1;passcontrimaps=1;passusrdata=0;filter=00000011010000001101000;overrideAssemblyRootName=0;assemblyRootName=" -typ "mentalRay" -es ($prefix+$name+$extension); pm.Mayatomr(binary=1,assembly=1,fis=1,mi=1,fem=1,exportFilter=721600,fcd=1,fe=1,file=(prefix + name + extension),pcm=1,active=1,xp="3313333333",asn=name,fma=1) print "Creating file: " + prefix + name + extension + "\n"
def exporter(arg,prefix): pm.select(r=arg) temp=[] stripFN='' temp=arg.split(":") #Removing namespaces if len(temp)>1: stripFN=temp[-1:] else: stripFN=arg expType=pm.optionMenu("exportType",q=1,v=1) extension='' #Determining Export type #OBJ if expType == "OBJ": extension=".obj" prefix=prefix + "OBJ/" pm.file(pr=1,typ="OBJexport",es=(prefix + stripFN),op="groups=0;ptgroups=0;materials=0;smoothing=1;normals=1") if expType == "FBX": extension=".fbx" #FBX prefix=prefix + "FBX/" pm.file(typ="FBX export",force=1,options="binary=1;compression=0;tabstop=8;perframe=0;padframe=0;perlayer=0;pathnames=3313333333;assembly=1;fragment=1;fragsurfmats=1;fragsurfmatsassign=1;fragincshdrs=1;fragchilddag=1;passcontrimaps=1;passusrdata=0;filter=00000011010000001101000;overrideAssemblyRootName=0;assemblyRootName=",es=(prefix + stripFN + extension)) if expType == "PROXY": extension=".mi" #PROXY prefix=prefix + "renderProxy/" pm.Mayatomr(binary=1,assembly=1,fis=1,mi=1,fem=1,exportFilter=721600,fcd=1,fe=1,file=(prefix + stripFN + extension),pcm=1,active=1,xp="3313333333",asn=stripFN,fma=1) print " Creating file: " + (prefix + stripFN) + extension + "\n"
def objImp(self): path_here=pm.textField("pathImpName", q=1,text=1) prefix=pm.textField("wildName",q=1,text=1) wildcard=(prefix + "*.obj") fileList=self.getFileList(folder=path_here,filespec=wildcard) for file in fileList: temp=[] stripFN='' temp=file.split(":") if len(temp)>1: stripFN=temp[-1:] else: stripFN=file pm.file((path_here + str(file)), i=1, namespace=stripFN,loadReferenceDepth="all",ra=True,type="OBJ",options="mo=1") print "Imported " + str(len(fileList)) + " geometries. File listing:\n" print fileList print "\n"
def saveShaders(path, presetName, lookDict): # para cada assetSet no lookpreset for assetSet in lookDict: # acessa a lista de shaders shaderList = lookDict[assetSet][0] print 'saving shaders...' # define o nome da pasta de shaders, como o nome do asset, convertidos os ns para prefixos com '_' shadersPath = os.path.join(path, 'shaders', nsToPrefix(assetSet)) # cria o diretorio se nao houver if not os.path.exists(shadersPath): os.makedirs(shadersPath) # grava cada shader da lista for shader in shaderList: SG = pm.listConnections(shader, type='shadingEngine')[0] pm.select(SG, r=True, ne=True) pm.file(os.path.join(shadersPath, stripNameSpace(shader) + '.ma'), op="v=0", typ="mayaAscii", es=True, force=True) print 'shaders saved.'
def assignShaders(selDict, presetDict, useNs, useObjSel, shaderNs, shaderPath): print 'Assinalando SHADERs...' # conforme os parametros gera o nome de procura com ou sem ns for assetSet in selDict: if useNs: assetSetName = assetSet else: assetSetName = stripNameSpace(assetSet) # gera uma lista com todos os os itens no dicionario que correspondem ao nome do asset selecionado(com ns ou sem) assingListName = [x for x in presetDict if assetSetName in x] # noinspection PyNonAsciiChar if assingListName: # Se foi achado mais de um match de nome, somente o primeiro sera usado. # Por definicao se usarmos mais de um rig igual, devemos usar namespace para diferencia-los # ou o primeiro preset achado sera aplicado em todos os rigs iguais. if len(assingListName) > 1: print 'Aviso: mais q um asset achado com o mesmo base name. Pode haver erro de assignment' # acessa a lista de coneccao dos shaders lida no preset assignList = presetDict[assingListName[0]][1] # conforme os parametros gera a lista de geometrias if useObjSel: geoList = selDict[assetSet] else: geoList = pm.sets(assetSet, q=True) # gera uma lista para depois apagar os shaders antigos oldShadersList = {u'lambert1'} # para cada geometria definidas na lista, gera o nome de busca for geo in geoList: if useNs: geoName = geo else: geoName = stripNameSpace(geo) geoAssignName = [x for x in assignList if geoName in x] # Se forem achados mais de um nome de geometria igual pode haver erro de aplicacao de shader. # Por definicao os rigs devem ter modelos com nomes unicos if len(geoAssignName) > 1: print 'Aviso: mais q uma geometria com o mesmo base name.Pode haver erro de assingment.' # acessa o nome do shader if geoAssignName: shader = assignList[geoAssignName[0]] else: print 'Aviso: geometria nao encontrada no assignList' shader = 'lambert1' print 'Aviso:' + geoName + ' nao encontrada no assignList' # faz o assign do shader. Se ele for o default aplica o q j� esta na cena. if shader != 'lambert1': # se o shader ainda nao existir na cena, importa. if not pm.objExists(shaderNs + ':' + shader): # carrega o shader. Seta o path usando o nome do asset que estava no preset. shaderFullPath = os.path.join( shaderPath, 'shaders', nsToPrefix(assingListName[0]), shader + '.ma') nodeList = pm.file(shaderFullPath, i=True, ns=shaderNs, mnc=True, typ="mayaAscii", rnn=True) # apaga os namespaces que existirem no node importado do shader importedNS = set([]) for node in nodeList: if node[0] == '|': node = node[1:] pm.rename(node, shaderNs + ':' + stripNameSpace(node)) nsList = getNameSpace(node) importedNS.add(nsList) if shaderNs in importedNS: importedNS.remove(shaderNs) for ins in importedNS: allNsToDelete = ins.split(':')[1:] for i in reversed(range(0, len(allNsToDelete))): nsToDelete = '' for j in range(0, i + 1): nsToDelete = nsToDelete + allNsToDelete[ j] + ':' nsToDel = shaderNs + ':' + nsToDelete pm.namespace(rm=nsToDel) # conecta o shader na geometria SGList = pm.listConnections(shaderNs + ':' + shader, type='shadingEngine') if SGList: SG = SGList[0] oldShader = getShaderFromGeo(geo) pm.sets(geo, e=True, forceElement=SG) # guarda a lista de shaders antigos para apagar. if oldShader: oldShadersList.add(oldShader[0]) else: print 'Aviso: SG de' + shader + ' nao encontrada. Assinalando lambert1' pm.sets(geo, e=True, forceElement='initialShadingGroup') # se o shader for o default, assinala o default existente na cena. else: pm.sets(geo, e=True, forceElement='initialShadingGroup') # apaga shaders antigos # sao apagados todos juntos depois para garantir que n�o serao apagados # shaders que estao sendo usados em outros modelos da cena oldShadersList.discard('lambert1') for shader in oldShadersList: SG = pm.listConnections(shader, type='shadingEngine')[0] geoList = pm.listConnections(SG, type='shape') if not (geoList): try: pm.delete(shader, SG) except: print 'nao deu pra apagar shader' # remove ns da importacao dos shaders # Varias mensagens de clash serao emitidas. Mas isso nao ser� problema. if pm.namespace(exists=shaderNs): pm.namespace(moveNamespace=[shaderNs, ':'], force=True) pm.namespace(removeNamespace=shaderNs) print 'SHADERs OK!'
def sg_select_export(self, sgList, oPath): pm.select(cl=1) pm.select(sgList, noExpand=1) # ToDo : check this command pm.file(oPath, op='v=0', f=1, es=1, type="mayaBinary")