Python e Maya – Selecionando e Listando

Para listar tudo:

from maya import cmds

nodes = cmds.ls()

Para listar somente objetos selecionados:

selected = cmds.ls(selection=True)

Para listar objetos de um determinado tipo:

shapes = cmds.ls(type='geometryShape')

O uso de wildcards para detectar padrões, também é possível:

poly_list = cmds.ls('poly*')

Isso irá listar todo e qualquer objeto que inicie com ‘poly’, retornando uma lista com o nome dos mesmos.

Selecionando

cmds.select('locator1')

Esse comando seleciona o Locator de nome locator1, como um exemplo. É possível também passar uma lista de objetos a serem selecionados (suportando também wildcards):

selection_ls = ['polyCube1', 'polySphere*']
cmds.select(selection_ls)

Seleciona o objeto de nome ‘polyCube1’ e todos os que iniciarei com ‘polySphere’.

É possível utilizar os dois comandos em conjunto também. Se você quiser selecionar todos os nós do tipo shape, basta:

cmds.select(cmds.ls(type='shape'))

Use Facebook to Comment on this Post

Python e Maya – Uma Introdução – Parte 1

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!

Use Facebook to Comment on this Post