Foros 3DPoder.  

Bienvenido a Foros 3DPoder..

Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! !

Si usted tiene algún problema con su registro, por favor , díganoslo aquí. 3d




Retroceder   Foros 3DPoder. > :: Infografia y diseño grafico. > Script
Foro3D Galeria Privada Video3D Blueprints Software Blog3DPoder Buscar Empleo Donaciones


Noticias, Anuncios y Publicidad

Respuesta
 
Herramientas
Antiguo 08 ago 2007   #1
Stewie
Método Polaco
 
Avatar de Stewie
 
Fecha de Ingreso: abril-2004
Mensajes: 3,174
Xsi ¿Alguien le da al scripting en XSI?

Tengo alguna dudilla de novato, concretando, intento sacar las coordenadas UV de los puntos de un objeto. Consigo llegar a ellos desde los triángulos, pero en el array que me crea, salen repetidos (es lógico, el triángulo 1 tiene puntos en común con el triángulo 2, y como evalúa cada punto de cada triángulo, en el listado total se repiten). ¿Hay alguna manera de llegar a las coordenadas UV directamente utilizando Points, y no a partir de Triangles -> Points? Sólo por este camino es posible sacar el UVArray (me extraña que no haya una manera más directa, sin entrar por triángulos. Se podría meter la lista en una lista (valga la redundancia), y eliminar los repetidos, pero es un poco chapuza creo yo... aparte de ser un coñazo).

Pongo el script que he hecho, en Python:
Código:
obj = Application.selection(0)
triangle = obj.Activeprimitive.Geometry.triangles
for A in triangle:
	for oPoint in A.Points:
		a=oPoint.UVArray
		Application.LogMessage ("index: "+str(`oPoint.index`)+" U:"+str(a[0])+" ,V:"+str(a[1]))
Stewie is offline   Responder Con Cita
Antiguo 08 ago 2007   #2
pedropp
·
 
Avatar de pedropp
 
Fecha de Ingreso: junio-2005
Mensajes: 1,253
Predeterminado Re: ¿Alguien le da al scripting en XSI?

pues a falta de una solución mejor, podrías hacer algo parecido a esto para tener en lista_UV las coordenadas de los puntos no repetidos.

obj = Application.selection(0)
lista_UV = []
for triangulo in obj.Activeprimitive.Geometry.triangles:
lista_UV.extend([punto.UVArray for punto in triangulo.Points if punto.UVArray not in lista_UV])
# y para mostrar la lista:
for coordenadas in lista_UV:
Application.LogMessage("%s, %s" % coordenadas)



(es solo un "supuesto teórico", no uso XSI así que no lo he comprobado)
__________________
"La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
[SIGPIC][/SIGPIC]
pedropp is offline   Responder Con Cita
Antiguo 09 ago 2007   #3
Stewie
Método Polaco
 
Avatar de Stewie
 
Fecha de Ingreso: abril-2004
Mensajes: 3,174
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Gracias! Esta noche le echo un vistazo a ver si lo consigo. Tanta gaita para mirar algo que aparece automáticamente al seleccionar el punto en el UV Editor...
Stewie is offline   Responder Con Cita
Antiguo 13 ago 2007   #4
Stewie
Método Polaco
 
Avatar de Stewie
 
Fecha de Ingreso: abril-2004
Mensajes: 3,174
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Nuevo experimento: el operador del XSI "getpixelarray", funciona correctamente para leer una imagen de 4 pixels de ancho y 2 de alto, cuando le doy estos datos (pide un Array para saber las posiciones de los pixels que debe mirar):
Array1: [0, 0, 1, 0, 2, 0, 3, 0, 0, 1, 1, 1, 2, 1, 3, 1]

Si la imagen es de 4 pixels de ancho x uno de alto, funciona también con este array:
arr=[[0,1,2,3],[0,0,0,0]]

He intentado que en la imagen de 4x2 lea el array [0,1,2,3][0,0,0,0][1,1,1,1], pero (obviamente) no funciona...
---
Edito: Fallo mío, lo correcto es darle [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]], así sí que funciona (lógicamente, 1 del a con 1 del b, 2 del a con 2 del b...). No sé si será más sencillo de conseguir este array, o directamente el "desglosado", seguramente éste, porque el valor A ya lo tienes con a*alto, sólo habría que hacer el loop para sacar el B... mañana miro.

---
Así que le doy el Array como lo quiere y vía. El "pero" que le encuentro a esta manera, es que tengo que dar un rodeo, explico la parte interesante:

Primero consigo los dos arrays, el del ancho y el del alto.
w=[]
for i in range(Ancho):
w.append(i)


Resultado para un Ancho=4: [0,1,2,3]

h=[]
for i in range(Alto):
h.append(i)

Resultado para un Alto=2: [0,1]




Ahora creo un array temporal así:
temp = [(x,y) for y in h for x in w]

Valor de Temp= [(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)]


Lo ideal sería que me dejara hacer eso sin tener que poner los paréntesis en (x,y), como no me deja (o no doy con la manera correcta), transformo ese resultado en el array que necesita el comando GetPixelArray:
arr=[]

for i in temp:
arr.extend(i)

Valor de Arr = [0,0,1,0,2,0,3,0,0,1,1,1,2,1,3,1]


El resto no tiene nada de chicha... pongo el script completo por si alguien quiere investigarlo, y por si veis alguna manera más lógica de hacerlo, sobretodo a la hora de conseguir el array necesario sin dar tantos rodeos...



Código:
xsi = Application
oRoot = Application.ActiveSceneRoot
oCube = oRoot.FindChild ("grid")
oMat = oCube.Material
oClips = oMat.ImageClips
oClip = oClips(0)
oSource = oClip.Source

Ancho = oSource.Parameters("XRes").Value 
Alto = oSource.Parameters("YRes").Value 
Resolucion = Ancho * Alto

xsi.logmessage(("%s%s")%("Nombre de la imagen: ", oClip.name))
xsi.logmessage(("%s%s")%("Ancho de la imagen: ", Ancho))
xsi.logmessage(("%s%s")%("Alto de la imagen: ", Alto))
xsi.logmessage(("%s%s")%("Resolucion de la imagen: ", Resolucion))
xsi.LogMessage ("--------------------------")

w=[]
for i in range(Ancho):
	w.append(i)

h=[]
for i in range(Alto):
	h.append(i)

temp  = [(x,y) for y in h for x in w]

arr=[]
for i in temp:
    arr.extend(i)

oIm = oClip.GetImage().GetPixelArray(arr)

for i in range (0,Resolucion):
	xsi.LogMessage (("%s%s")%("Datos del pixel: ",i))
	xsi.LogMessage ("colorR = "+str(oIm[0][i]))
	xsi.LogMessage ("colorG = "+str(oIm[1][i]))
	xsi.LogMessage ("colorB = "+str(oIm[2][i]))
	xsi.LogMessage ("colorA = "+str(oIm[3][i]))
	xsi.LogMessage ("--------------------------")
Resultado del script sobre una imagen de 4 de ancho x 2 de alto (OJO! No probéis el script con imágenes grandes, por razones obvias )
Código:
# INFO : Nombre de la imagen: small_tif
# INFO : Ancho de la imagen: 4
# INFO : Alto de la imagen: 2
# INFO : Resolucion de la imagen: 8
# INFO : --------------------------
# INFO : Datos del pixel: 0
# INFO : colorR = 1.0
# INFO : colorG = 1.0
# INFO : colorB = 0.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 1
# INFO : colorR = 0.0
# INFO : colorG = 1.0
# INFO : colorB = 1.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 2
# INFO : colorR = 1.0
# INFO : colorG = 0.0
# INFO : colorB = 1.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 3
# INFO : colorR = 1.0
# INFO : colorG = 1.0
# INFO : colorB = 1.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 4
# INFO : colorR = 0.0
# INFO : colorG = 0.0
# INFO : colorB = 0.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 5
# INFO : colorR = 1.0
# INFO : colorG = 0.0
# INFO : colorB = 0.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 6
# INFO : colorR = 0.0
# INFO : colorG = 1.0
# INFO : colorB = 0.0
# INFO : colorA = 1.0
# INFO : --------------------------
# INFO : Datos del pixel: 7
# INFO : colorR = 0.0
# INFO : colorG = 0.0
# INFO : colorB = 1.0
# INFO : colorA = 1.0
# INFO : --------------------------
P.D. Con esto mi batalla contra el PinPanel sin utilizar el operador Push (ni Houdini ) está prácticamente ganada, viva yo!

P.D.2. Hacerlo con GetPixel en lugar de GetPixelArray (= hacerlo de uno en uno), es mucho más sencillo, se hace un loop y listo, pero supongo que a la hora de calcular una imagen grande, siempre que se puedan recoger todos esos datos accediendo una sola vez a la imagen, será mucho más rápido que acceder a la imágen miles de veces... si tengo tiempo traduzco el script utilizando GetPixel y mido los tiempos para comparar...

Última edición por Stewie fecha: 13 ago 2007 a las 18:50.
Stewie is offline   Responder Con Cita
Antiguo 13 ago 2007   #5
JEOGIOMAR
libre pensador
 
Avatar de JEOGIOMAR
 
Fecha de Ingreso: junio-2007
Mensajes: 941
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Cita:
Escritos por Stewie Ver Mensaje
Código:
# INFO : Nombre de la imagen: small_tif
# INFO : Ancho de la imagen: 4
# INFO : Alto de la imagen: 2
# INFO : Resolucion de la imagen: 8
# INFO : --------------------------
# INFO : Datos del pixel: 0
# INFO : colorR = 1.0
# INFO : colorG = 1.0
# INFO : colorB = 0.0
# INFO : colorA = 1.0
P.r...
cada vez me confundo mas con el scripting, pensaba que todos los comandos tenían que ser en ingles.
__________________
"muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza".
JEOGIOMAR is offline   Responder Con Cita
Antiguo 13 ago 2007   #6
Stewie
Método Polaco
 
Avatar de Stewie
 
Fecha de Ingreso: abril-2004
Mensajes: 3,174
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Es que eso no son comandos, es el resultado del script, y lo que aparece en español son líneas explicativas que he escrito yo

La manera correcta de sacar el array [0, 0, 0, 0, 1, 1, 1, 1] sería así, y no como hice arriba (tengo un don especial para buscar soluciones enrevesadas...):

m=[]
for i in range(ancho):
temp=[i]*alto
m.extend(temp)

Valor de m: [0, 0, 0, 0, 1, 1, 1, 1]
Stewie is offline   Responder Con Cita
Antiguo 13 ago 2007   #7
JEOGIOMAR
libre pensador
 
Avatar de JEOGIOMAR
 
Fecha de Ingreso: junio-2007
Mensajes: 941
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Cita:
Escritos por Stewie Ver Mensaje
Es que eso no son comandos, es el resultado del script, y lo que aparece en español son líneas explicativas que he escrito yo
muchas gracias por tu aclaración, ya me gustaría tener una ínfima parte de tus conocimientos.
saludos.
__________________
"muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza".
JEOGIOMAR is offline   Responder Con Cita
Antiguo 13 ago 2007   #8
pedropp
·
 
Avatar de pedropp
 
Fecha de Ingreso: junio-2005
Mensajes: 1,253
Predeterminado Re: ¿Alguien le da al scripting en XSI?

a estas horas ya no veo... pero si he entendido bien m[] es algo temporal que no te importa los valores que contenga.
Entonces por que no sustituyes

m=[]
for i in range(ancho):
temp=[i]*alto
m.extend(temp)


por:

m = [0]*alto*ancho



(mañana despierto lo vuelvo a mirar y seguro que ya lo veo mas claro

Edito: y como seguro que estoy tonto y no es eso lo que quieres, te hago otra sugerencia para tu método: Para que usas una variable intermedia, temp, y no directamente metes el valor que quieres, me refiero a temp=[i]*alto y despues m.extend(temp) en vez de directamente m.extend([i]*alto)
__________________
"La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
[SIGPIC][/SIGPIC]

Última edición por pedropp fecha: 13 ago 2007 a las 20:49.
pedropp is offline   Responder Con Cita
Antiguo 13 ago 2007   #9
Stewie
Método Polaco
 
Avatar de Stewie
 
Fecha de Ingreso: abril-2004
Mensajes: 3,174
Predeterminado Re: ¿Alguien le da al scripting en XSI?

Ahora soy yo el que está espeso, pero creo que lo que me dices de m=[0]*ancho*alto no me sirve.
Necesito llegar a un array R[] del tipo [a,b], donde:

a= [0,1,2,3,0,1,2,3]
b= [0,0,0,0,1,1,1,1]

( R sería por tanto [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]])


Conseguir [a] es sencillo, multiplicando [0,1,2,3]*2.
Para conseguir[b] , lo hago así:
>>> b=[]
>>> for i in range(2):
temp=[i]*4
b.extend(temp)

>>> b
[0, 0, 0, 0, 1, 1, 1, 1]
>>>


Lo que sí puedo hacer es sustituir directamente el temp de b.extend por su valor, [i]*4, pero por el momento tiendo a separarlo todo para verlo mejor (aunque en este caso sea una chorrada):
>>> b=[]
>>> for i in range(2):
b.extend([i]*4)
>>> b
[0, 0, 0, 0, 1, 1, 1, 1]


Gracias!

P.D. JEOGIOMAR, no es tan complicado como parece, al principio suena todo a chino, pero tras tener 4 nociones puedes hacer cosillas interesantes

Última edición por Stewie fecha: 14 ago 2007 a las 00:03.
Stewie is offline   Responder Con Cita
Antiguo 14 ago 2007   #10
pedropp
·
 
Avatar de pedropp
 
Fecha de Ingreso: junio-2005
Mensajes: 1,253
Predeterminado Re: ¿Alguien le da al scripting en XSI?

bien, olvida lo que te dije, no había entendido nada!
pedropp is offline   Responder Con Cita
Respuesta


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Normas de Publicación
Usted no puede publicar nuevos mensajes.
Usted no puede responder mensajes
Usted no puede publicar archivos adjuntos
Usted no puede editar sus mensajes

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are deshabilitado
Pingbacks are deshabilitado
Refbacks are deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ya tengo el XSI!!!!!!!!!!!! Leander Infografía General 34 28 dic 2006 04:17
Recopilación de dudas, posts e hilos de XSI (faq) Leander Infografía General 5 04 mar 2006 12:01
101 Escenas Gratuitas y Scripts para Softimage XSI y criaturas digitales en 3D. Sintesys Tutoriales, Libros y Manuales. 9 15 jun 2005 03:59
Videotutoriales de scripting con XSI Leander Tutoriales, Libros y Manuales. 5 27 may 2005 13:48
BUG CONFIRMADO: XSI 4.2 PETA con el service pack 2 del XP Leander Problemas con Programas 8 03 feb 2005 14:01

google adsense



La franja horaria es GMT. Ahora son las 11:03.


Powered by: vBulletin, para 3DPoder.com Versión 3.7.0 Beta 4
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.
3DPoder.com Foro3d.com © Al servicio de la infografia y el 3D desde 1997.
Rare Jordans | Cheap Car Insurance | Credit Card Consolidation | Real Estate Scripts | Read this exciting weblog
Content Relevant URLs by vBSEO 3.2.0