XSIforum.com

FindChildren

0 Usuarios y 1 Visitante están viendo este tema.

FindChildren
« en: 14 Agosto 2010, 20:21:34 »
Hola a todos

estoy empezando a darle al python, y ya tengo mis primeross problemas!  XD



Código: [Seleccionar]
xsi = Application
asr = Application.ActiveSceneRoot

xsi.GetPrim("Null", "", "", "")

myT = asr.FindChildren ("null*")

xsi.LogMessage ( myT )


yo esperaba que me diera de resultado la lista de nulls de la escena, pero no ha sido, obtengo un none!
¿que he hecho mal?

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: FindChildren
« Respuesta #1 en: 14 Agosto 2010, 21:28:55 »
Vienes de MEL, no? MEL te da listas como strings ya que no tiene object model.

Esto si funciona:
Código: [Seleccionar]
xsi = Application
asr = xsi.ActiveSceneRoot

myT = asr.FindChildren("*", "null")

for null in myT:
xsi.LogMessage(null)

Re: FindChildren
« Respuesta #2 en: 14 Agosto 2010, 21:29:42 »
vaale, lo que obtengo es una lista.
tengo que itinerarla y mostrar cada miembro para ello.

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: FindChildren
« Respuesta #3 en: 14 Agosto 2010, 21:31:51 »
Y tu otro problema del codigo era que usabas .FindChildren("null*") que significa que no busca nulls necesariamente sino objetos cuyo nombre empieze por "null".

Lo que hize yo filtra los hijos por su .Type y solo te da nulls ya que el .Type de un null es "null".
Si miras el manual, pone: X3DObject.FindChildren( [Name], [Type], [Family], [Recursive] )

Re: FindChildren
« Respuesta #4 en: 14 Agosto 2010, 21:34:08 »
si si.. eso lo habia visto en la ayuda.
lo que no entendia era que me devolvia una lista, y que las listas no se muestran como strings

gracias alan!

estoy haciendo un curso acelerado de python para ver si resuelvo unos problemillas de rigs

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: FindChildren
« Respuesta #5 en: 14 Agosto 2010, 21:41:36 »
Si lees mas a fondo la pagina sobre FindChildren y miras abajo, pone:
Return Value
X3DObjectCollection

con un link. Si le das te da los methods y properties de ese tipo de "collection". Hay mas de un tipo. Lo que te da es un collection, no una lista.

En Python un "list" es otra cosa completamente diferente de un collection de XSI.

Re: FindChildren
« Respuesta #6 en: 14 Agosto 2010, 21:53:25 »
vale, me devuelve una coleccion de objetos, no la lista de sus nombres.. no?

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: FindChildren
« Respuesta #7 en: 14 Agosto 2010, 22:05:56 »
vale, me devuelve una coleccion de objetos, no la lista de sus nombres.. no?
Correcto. :) Si sus nombres cambiasen, la lista continuaria teniendo los objetos correctos.

Pero como dije, hay mas de un tipo de collection. Lo que te da FindChildren() es un X3DObjectCollection, que por ejemplo tiene algunos metodos diferentes del tipo XSICollection.

Re: FindChildren
« Respuesta #8 en: 17 Agosto 2010, 14:35:24 »
En lugar de usar FindChildren()/FindChild() es mejor usar un FindChildren2()/FindChild2() que ya no incluyen al objeto padre y son el reemplazo a los antigüos métodos, dentro de algunas versiones los van a deprecar y es mejor ir usando desde ya los nuevos métodos ;)

Re: FindChildren
« Respuesta #9 en: 17 Agosto 2010, 15:47:08 »
si, ya notaba yo raro que me salieran los objetos padres en la coleccion
me imagino que eliminar estos antiguos metodos, los nuevos funcionaran por estos
es decir, FindChildren será FindChildren2.... no?