Panda3D/Manual/Pesquisar na Scene Graph

Origem: Wikilivros, livros abertos por um mundo aberto.

É geralmente útil acessar um node particular localizado nas profundezas do grafo de cena, especialmente para acessar uma sub-parte de um modelo que foi carregado como um único arquivo. Existem vários métodos dedicados a achar nodes obscuros e retornar seu Nodepaths.

Primeiro, o mais útil é o comando ls():

  • meuNodePath.ls()

Isso simplesmente lista todas os filhos do NodePath indicado, junto com todas as seus filhos, até todo o subgrafo ser mostrado. Ele também lista as transformações e atributos de renderização que estão em cada node. Esse é um comando especialmente útil para quando você estiver rodando o python interativamente; é um bom caminho checar se o grafo de cena é o que voce pensa que ele é.

Os dois métodos find() e findAllMatches() retornarão o NodePath e uma NodePathCollection respectivamente. Esses métodos requerem um caminho string como argumento. Buscas podem ser baseads em nome ou tipo. Em sua forma mais simples, esse caminho consiste de uma série de nodes separados por barras, como um caminho de diretorio. Quando criando a string, cada componente pode opcionalmente consistir de um dos nomes especiais seguintes, ao invés de um nome de nodo.

* Encontra exatamente um node de qualquer nome ** Encontra qualquer sequencia de zero ou mais nodos +typename Encontra qualquer nodo que é ou deriva do tipo determinado -typename Encontra qualquer nodo que é exatamente do tipo indicado =tag Encontra qualquer nodo que tem a tag indicada =tag=value Encontra qualquer nodo cuja tag bater com o valor indicado

caracteres de arquivos padrão como *, ? e [ a-z ] também são usáveis. Também o caracter especial @@ antes de qualquer nome de nodo indica que esse nodo especal é um nodo escondido. Normalmente, nodos escondidos não são retornaveis. @@*, pela extensão, significa qualquer nodo escondido.

O argumento pode também ser seguido de flags de controle. Para usar uma flag de controle, adicione qualquer argumento, seguido por ao menos uma flag especial sem espaços ou pontuações extras.

-h Não retorna nodos escondidos +h Retorna nodos escondidos -s Não retorna nodos escondidos a não ser que seja referenciado explicitamente por @@ +s Retorna nodos esondidos até mesmo sem caracteres @@ explicitos -i As comparações de nome de nodos não são insensiveis a caixa. a caixa deve combinar exatamente +i Comparações de nome de nodo são insesiveis a caixa: caixa não é importante. Esse efeito bate contra qualquer nome de nodo apenas; tipo de nodo e strings tag sempre serão sensiveis á caixa.

As flags padrão são +h-s-i

O método find() procura por um único nodo que combine com o string de caminho dado. Se houver multiplas combinações, o método retorna a combinação com nome mais curto. Se ele não achar combinações, ele vai retornar um NodePath vazio. Do outro lado, findAllMatches() retornará todos os NodePaths encontrados, o mais curto primeiro.

  • meuNodePath.find("<Caminho>")
  • meuNodePath.findAllMatches("<Caminho>")

Alguns exemplos:

  • meuNodePath.find( "casa/porta" )

Isso procurará por um nodo nomeado "porta", que é filho do nodo chamado "casa", que é o filho do caminho inicial.

  • meuNodePath.find("**/vermelho*")

Isso procurará por qualquer nodo em qualquer lugar da árvore ( abaixo do caminho inicial ) com o nome que começa com "vermelho". Mais documentação sobre encontrar padrões que combinem podem ser encontrados na pagina de referencia da API( [1] )

Em adição existem tambem os metodos getParent() e getChildren(). getParente() retorna o Nodepath do node pai. getChildren() retorna o filho do nodo atual como uma NodePathCollection ( que pode ser tratado como uma lista, do Panda3D 1.6.0 e acima)

  • for child in myNodePath.getChildren():
  • print child

Para mais informação e uma lista completa de funções de NodePath por favor consulte a referencia de API( [2] ).