Essa série supõe que você tem conhecimentos básicos de Python, afinal há material de qualidade o suficiente espalhado pela internet. Porém há pouco material em português versando sobre Python e Maya em conjunto. Vamos lá.
Para executar um código, basta abrir o Script Editor e clicar na aba denominada ‘Python’. Você pode digitar, colar ou abrir um arquivo… Para executar o código basta apertar ctrl + enter. A execução apaga o código escrito na janela, por padrão. Se você não quiser isso (é um saco), basta ter o código todo selecionado na hora de executá-lo, assim o Maya não apaga o mesmo. Eu sempre uso ctrl+a para selecionar tudo e em seguida ctrl+enter para executar. Atalhos são um presente e você deve utilizá-los. Importante lembrar que você pode executar somente uma linha do código, basta selecioná-la e apertar ctrl+enter, assim, somente a linha selecionada será executada. Útil para entender linha-a-linha como um código funciona.
Criando um objeto:
from maya import cmds cmds.polySphere()
Esse comando cria uma esfera com os atributos padrões. Mas e se eu quiser especificar os argumentos como nome ou radius, etc ?
from maya import cmds cmds.polySphere(name='testSphere', radius=5)
Para descobrir quais são os argumentos possíveis, existem algumas opções. Uma delas é selecionar o comando e utilizar o Marking Menu para um acesso rápido a documentação. Veja por você mesmo, selecione ‘polySphere’, segure o botão direito do mouse e clique em “Command Documentation”, uma página abrirá no seu mouse e você terá acesso a documentação do comando selecionado.
Uma outra maneira é utilizar o próprio interpretador Python para descobrir.
from maya import cmds print cmds.help('polySphere')
A saída do comando será:
Synopsis: polySphere [flags] [String...] Flags: -e -edit -q -query -ax -axis Length Length Length -cch -caching on|off -ch -constructionHistory on|off -cuv -createUVs Int -n -name String -nds -nodeState Int -o -object on|off -r -radius Length -sa -subdivisionsAxis Int -sh -subdivisionsHeight Int -sx -subdivisionsX Int -sy -subdivisionsY Int -tx -texture Int Command Type: Command
O que isso significa ? A primeira linha é a sintaxe do comando caso você chame-o via MEL (Maya Embedded Language). O resto, divido em três colunas, são respectivamente, nome curto, nome longo e tipo de dado esperado. Ou seja, você pode passar um parâmetro tanto com o nome longo ou com o nome curto. Eu recomenda usar sempre o nome longo, para fins de legibilidade. 6 meses depois, você irá agradecer a você mesmo. Entretanto, é perfeitamente possível escrever o código anterior como:
from maya import cmds cmds.polySphere(n='testSphere', r=5)
A terceira coluna simplesmente define o tipo esperado. Radius espera um Int (integer), ou seja, se você passar uma string, python subirá uma exceção TypeError. O tipo Length é um número decimal (mas também pode ser um inteiro), como 12.5 e afins. Note que ‘axis’ recebe 3 valores do tipo Length, ou seja, você passa os 3 valores dentro de uma tupla (uma sequência de objetos envolvidos por parênteses). Exemplo:
from maya import cmds cmds.polySphere(name='testSphere', radius=2.5, axis=(1,0,0))
On/Off é simplesmente um Boolean, ou seja, você passa True ou False quando o tipo requerido for On/Off.
Edit Mode
A maior parte dos comandos tem ao menos o modo de Criação, que é o que vemos até agora. Mas e se você quiser editar um objeto já criado ou simplesmente pegar informações de um objeto já existente ? Para isso, existem outros modos que os comandos suportam. Temos o Edit Mode e o Query Mode. Para exemplificarmos-o, vamos editar a esfera de nome testSphere que criamos no exemplo anterior.
from maya import cmds cmds.polySphere('testSphere', edit=True, radius=4)
Simples como parece ser, o raio da esfera criada agora é 4. Mas como ? Quando queremos editar um objeto já existente, simplesmente passamos o nome dele como primeiro argumento e ativamos o argumento ‘edit’ (sim, também poderia ser a versão curta ‘e’). Isso faz com o que comando entre em modo de Edição. Agora a esfera possui raio 4. Quanto queremos editar um objeto, é importante notar que o primeiro argumento sempre deve ser o nome do mesmo.
Query Mode
Esse modo permite-nos requisitar informações de um determinado objeto. Veja um exemplo:
from maya import cmds cmds.polySphere('testSphere', query=True, radius=True)
Temos como resultado:
# Result: 4.0 #
O princípio é o mesmo, o argumento query ativa o Query Mode. Porém, diferentemente do Edit Mode, não passamos o valor desejado e sim somente ‘True’. Você não precisa passar valor nenhum, somente identificar que argumento você gostaria de ver o valor.
Na documentação dos comandos (Help -> Python Command Reference), tem uma seção denominada Flags, lá é onde você fica sabendo que modos um determinado comando suporta. As possibilidades são C (Create), E (Edit), Q (Query) e M (Multiuse).
Por último (por hoje), vamos ver como guardar um objeto que criamos para depois editá-lo ou queryá-lo (ha!). Bem, ao criarmos um objeto com um comando, o Maya retorna uma lista contendo 2 strings (o transform node e o shape node). Vejamos:
from maya import cmds cubeNodes = cmds.polyCube()
Se você executar um print spNodes, verá que o resultado é similar a isso:
[u'pCube1', u'polyCube1']
Ou seja, se você esperava poder acessar o objeto diretamente, expectativa frustrada. Não é um comportamento exatamente inteligente do Maya, mas é como as coisas são. Sendo assim, para editar o cubo, você faria:
cmds.polyCube(cubeNodes[1], e=True, height=3)
Para um exemplo mais completo, criarei um esfera, depois pegarei o raio dela e multiplicarei por 3.
spNodes = cmds.polySphere() spRadius = cmds.polySphere(spNodes[1], query=True, radius=True) cmds.polySphere(spNodes[1], edit=True, radius=spRadius*3)
Por hoje é só! Qualquer dúvida, comentário, sugestão ou pedido, não hesitem!