XSIforum.com

Model.name visible como token

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

Unaided

  • ***
  • 3293
Model.name visible como token
« en: 14 Noviembre 2013, 20:13:17 »
Estoy intentando hacer un control para que el nombre del archivo de render lleve el nombre del modelo en estado visible.
Esto es. Dada una jerarquía como esta:
+modelo_root
 L modelo1
 L modelo2
 L modelo3
 L ...

La idea es que solo uno de los modelos esté visible, y trasladar su nombre como token al filename path de render.

No se me ocurre como plantearlo. No quiero usar passes porque acabaría con una lista muy extensa de ellos. Tampoco puedo usar frames y animando la visibilidad.


Re:Model.name visible como token
« Respuesta #1 en: 14 Noviembre 2013, 20:49:22 »
Danos más pistas... estas usando Python, C++ ..?
Tengo el codigo de un par de  exportadores,  donde puedes ver bastante ejemplo de C++, en estos links:
https://bitbucket.org/povman/mitxsi/src
http://src.luxrender.net/luxsi/
Si estas usando Python, tengo algunos proyectos más, pero esta en mi PC :)
Saludos..

Unaided

  • ***
  • 3293
Re:Model.name visible como token
« Respuesta #2 en: 14 Noviembre 2013, 22:07:59 »
No estaba pensando en scripting porque por lo pronto no veo cómo plantearlo. Si acaso barajaba algo de script (js/python) muy simple para comprobar el estado de la visibilidad de los modelos. Pero no estaba pensando en scripting profundo para algo así.

Unaided

  • ***
  • 3293
Re:Model.name visible como token
« Respuesta #3 en: 14 Noviembre 2013, 22:25:52 »
Cómo procedimiento no sé si sería factible el recorrer mediante un for los children del objeto model_root evaluando su propiedad visibility y almacenar en una variable una cadena con el name del model si está visible.

Ahora bien, qué ocurre si más de un model está visible, la cadena resultante sería algo como             model1model2model3?
Cómo trasladar el valor de esa variable a un token? El token Value acepta cualquier propiedad de Softimage, pero una variable existente en un script puede leerla?

Re:Model.name visible como token
« Respuesta #4 en: 14 Noviembre 2013, 22:32:01 »
En plan 'usar y tirar' yo crearía un custom parameter (TOKEN_DATA en el ejemplo) en la escena con un parametro de tipo string (TOKEN_NAME) desde el cual vincular al pass de render y un pequeño script para actualizar el valor de ese parámetro, algo asi:

Código: [Seleccionar]
root = "modelo_root"
children = sorted(Application.Dictionary.GetObject(root).FindChildren2("*"),
                  key=lambda x: not x.Properties("Visibility").Parameters("viewvis").Value)
Application.ActiveSceneRoot.Properties("TOKEN_DATA").Parameters("TOKEN_NAME").Value = children[0].Name

Si es algo que usarás a menudo habría que hacerlo bien y buscar un modo genérico, pero en plan guarro lo de arriba debería funcionar :)

Re:Model.name visible como token
« Respuesta #5 en: 14 Noviembre 2013, 22:39:25 »
model1model2model3?
Si quieres los nombres de TODOS los objetos visibles tendrías que modificar lo anterior tal que...
Código: [Seleccionar]
root = "modelo_root"
children = [x.Name for x in Application.Dictionary.GetObject(root).FindChildren2("*")
            if x.Properties("Visibility").Parameters("viewvis").Value]
Application.ActiveSceneRoot.Properties("TOKEN_DATA").Parameters("TOKEN_NAME").Value = "".join(children)

Unaided

  • ***
  • 3293
Re:Model.name visible como token
« Respuesta #6 en: 15 Noviembre 2013, 16:58:02 »
Funciona perfectamente César!

Muchas gracias!

Re:Model.name visible como token
« Respuesta #7 en: 15 Noviembre 2013, 17:16:31 »
:)