XSIforum.com

Sustituir un modelo por otro en una escena

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

Sustituir un modelo por otro en una escena
« en: 21 Junio 2011, 13:42:40 »
Hola a todos ... despues de un tiempo desenganchado de softimage estoy de vuelta y un poco oxidado ;)

Tengo una escena con un modelo de árbol y varias cientos de instancias del mismo, y ahora quiero cambiar ese modelo de árbol por otro ... ¿como puedo reemplazar un objeto por otro en la escena? ... lo que busco es algo parecido al comando del Ligtwave que te permite reemplazar un objeto por otro simplemente seleccionando su archivo.

Un saludo,
Juanjo


Epar

Re: Sustituir un modelo por otro en una escena
« Respuesta #1 en: 21 Junio 2011, 20:41:26 »
Amigo,...mal lo llevas si piensas en LW usando XSI...XD
Lo digo porque yo también vine de LW,...y me rompi la cabeza mucho tiempo intentanto emular LW en XSI... ;)

Bueno, al grano: no se puede,....y si se puede.
Es decir, tienes que tener el modelo referenciado para poder hacerlo lo que quieres.
Mirate la ayuda porque es muy largo de explicar aqui y hay muchas opciones que te resultarán interesantes.

Suerte y bienvenido de nuevo.

Re: Sustituir un modelo por otro en una escena
« Respuesta #2 en: 21 Junio 2011, 21:10:24 »
Gracias, ya me imaginaba que el camino es utilizar siempre referencias externas para ese tipo de objetos. Ya miro la mejor forma de hacerlo ;)

Un saludo,
Juanjo

Re: Sustituir un modelo por otro en una escena
« Respuesta #3 en: 21 Junio 2011, 22:20:20 »
O con un poco de scripting! :D

Selecciona el modelo "viejo", luego el "nuevo" y ejecuta esto... con un poco de suerte debería reemplazar tanto el modelo original como las instancias que tengas en la escena.
Código: (python) [Seleccionar]
Xsi = Application
Sel = Xsi.Selection

def ReplaceModel(p_oOldModel, p_oNewModel, p_bDelete = True):
p_oNewModel.Kinematics.Global.Transform = p_oOldModel.Kinematics.Global.Transform
oInstanceGroup = p_oOldModel.Groups("InstanceGroup")
if oInstanceGroup:
lInstances = Xsi.Instantiate(p_oNewModel, oInstanceGroup.Members.Count)
for i, oOldInstance in enumerate(oInstanceGroup.Members):
oNewInstance = lInstances(i)
oNewInstance.Kinematics.Global.Transform = oOldInstance.Kinematics.Global.Transform
if p_bDelete:
if oInstanceGroup: Xsi.DeleteObj(oInstanceGroup.Members)
Xsi.DeleteObj("B:%s" % p_oOldModel.Name)
return True

ReplaceModel(Sel(0), Sel(1))
« Última modificación: 22 Junio 2011, 02:23:45 por César Sáez »