XSIforum.com
Foros 3D => 3D-2D => Otros... (Max, Maya, Lightwave...) => Mensaje iniciado 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?
ruta = "\\\\filer\\share\\project\\"
xrefs.addNewXRefObject ruta + "model01.max" "model01" #xref #xref #useScene
-
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 :)
ruta = "\\\\filer\\share\\project\\"
xrefs.addNewXRefObject (ruta + "model01.max") "model01" #xref #xref #useScene
-
Agrupando como dices funciona César. ¡Gracias!
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.
-
Jeje, hace bastante que no hago nada en maxscript pero si mal no recuerdo sería algo como...
( -- 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.
:)
-
Gracias a la inestimable ayuda de César y de internet, he logrado la función que quería! :D
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
)
-
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.