XSIforum.com

Foros 3D => 3D-2D => Otros... (Max, Maya, Lightwave...) => Mensaje iniciado por: Unaided en 28 Noviembre 2013, 16:44:54

Título: Concatenar variable a string en Maxscript
Publicado por: Unaided en 28 Noviembre 2013, 16:44:54
Estoy intentado construir un script para cargar varios objetos como xrefObject en Max, y me he encontrado que no me acepta el filename concatenado con una variable. ¿Estoy construyendo mal la concatenación en maxscript?           
Código: [Seleccionar]
ruta = "\\\\filer\\share\\project\\"     
                                     
xrefs.addNewXRefObject   ruta + "model01.max" "model01" #xref #xref #useScene
Título: Re:Concatenar variable a string en Maxscript
Publicado por: Cesar Saez en 28 Noviembre 2013, 17:03:04
Se lia con los espacios, si quieres utilizar una expression (concatenado) como argumento de una función debes agruparla en paréntesis (o asignarla a una variable en otra linea).

Todo esto te lo digo de memoria, lo mismo es otra cosa... yo probaría lo siguiente :)
Código: [Seleccionar]
ruta = "\\\\filer\\share\\project\\"                           
xrefs.addNewXRefObject (ruta + "model01.max") "model01" #xref #xref #useScene
Título: Re:Concatenar variable a string en Maxscript
Publicado por: Unaided en 28 Noviembre 2013, 18:15:43
Agrupando como dices funciona César. ¡Gracias!

Código: [Seleccionar]
ruta = "\\\\filer\\share\\project\\"
modelo01 = "teapot"
ext = ".max"
xrefs.addNewXRefObject (ruta + modelo01 + ext) modelo01 #xref #xref #useScene

Ahora seguiré peleándome para usar una array en vez de un único valor.
Título: Re:Concatenar variable a string en Maxscript
Publicado por: Cesar Saez en 28 Noviembre 2013, 19:17:28
Jeje, hace bastante que no hago nada en maxscript pero si mal no recuerdo sería algo como...
Código: [Seleccionar]
( -- local scope
    modelos = #("box", "teapot", "sphere")
    ruta = "\\\\filer\\share\\project\\"
    for each in modelos do (
        xrefs.addNewXRefObject (ruta + each + ".max") each #xref #xref #useScene
    )
)

Por cierto, ojo con las variables globales, recuerdo que cuando estaba aprendiendo no entendía porque mi código funcionaba perfectamente en una sesión y luego fallaba al reiniciar y era por el uso inadvertido de variables globales.
En 3dsmax/maya las variables globales son persistentes entre ejecuciones (a diferencia de la implementación en Softimage), esto implica que si en algún momento luego de ejecutar el script consulto la variable 'ruta'/'modelo01'/'ext' (en otro script) esta aún retornará el contenido de la última asignación hasta reiniciar 3dsmax (o que la mate el garbage collector). Para evitar popular el entorno con variables que no tienen sentido fuera del script es recomendable escribir los scripts dentro de paréntesis (local scope), de esa forma las variables son locales por defecto y no te llevarás sorpresas.

:)
Título: Re:Concatenar variable a string en Maxscript
Publicado por: Unaided en 28 Noviembre 2013, 19:18:10
Gracias a la inestimable ayuda de César y de internet, he logrado la función que quería! :D

Código: [Seleccionar]
ruta = "\\\\filer\\share\\project\\"
ext = ".max"

listArray = #()   
    file = openFile ""\\\\filer\\share\\project\\modelos.txt" mode:"r"
    while not eof file do
    (
        lineInfo = readLine file
        append listArray lineInfo
    )
    close file

    for i in listArray do
(
xrefs.addNewXRefObject (ruta + i + ext) i #xref #xref #useScene
)

Título: Re:Concatenar variable a string en Maxscript
Publicado por: Unaided en 28 Noviembre 2013, 19:20:47
ieeep! no había leído tu respuesta y he posteado a saco jaja

La variable listArray la declaraban como local en el ejemplo que he visto, pero no sé porqué motivo si uso local listArray = #() me devuelve error.