XSIforum.com

Foros 3D => Autodesk Softimage => Rigging y Scripting => Mensaje iniciado por: Adam Sullastres en 05 Junio 2010, 19:41:34

Título: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 19:41:34
Eso,
como podría pillar el output del ctr_dist en una primitiva de texto?
mmmmm... puedo sacar el output del ctr_dist a un archivo rtf y cargarlo dinamicamente en la primitiva?
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: alanf en 05 Junio 2010, 19:44:41
Tienes que usar un scripted operator.

Por que no miras como lo hizo Cesar en su script csRuler (http://www.xsiforum.com/forum/index.php/topic,5017.0.html)? ;)
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 19:54:58
a verl a verl!
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 19:56:19
jajajajaja
Es lo que queria hacer x_D
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Cesar Saez en 05 Junio 2010, 20:00:53
Existiendo ICE y el log en openGL es un poco absurdo hacerlo como en el csRuler, por ahí tengo una versión mucho más limpia, si la encuentro la subo :)
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 20:03:08
q majo xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 20:52:35
arrrrch! y esto por q no funsiona!
Pero si es super simple!

Código: [Seleccionar]
Medidor
sub Medidor
Dim OBJ1, OBJ2, boton
while True
PickElement "Object", "Pinsha OBJ 1", "Pinsha OBJ 1", OBJ1, boton
if boton = 0 then
exit sub
end if
PickElement "Object", "Pinsha OBJ 2", "Pinsha OBJ 2", OBJ2, boton
if boton = 0 then
exit sub
end if
LogMessage "La distansia entre "& OBJ1 & " y " & OBJ2 & " es de " & ctr_dist(OBJ1.name, OBJ2.name)
wend
end sub

Explota justo aki "... ctr_dist(OBJ1.name, OBJ2.name) ..." con un .. No coinciden los tipos 'ctr_dist' y si le meto
(variable.name., variable.name.) no hace nah d nah
arrrchhhhhhh
es puñeteria mía ya xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: alanf en 05 Junio 2010, 21:30:22
Existiendo ICE y el log en openGL es un poco absurdo hacerlo como en el csRuler, por ahí tengo una versión mucho más limpia, si la encuentro la subo :)
Pero me parece que morphi quiere pasarlo a un objeto de texto en 3D, quizas para tener texto 3D animado. Con ICE no lo veo posible. Ademas, los ICE string nodes introducidos en la 2011 desafortunadamente no sirven para escribir a parametros de texto.
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 21:40:21
En realidad m da igual como se muestre la información, por ahora he logrado verla en el log, cosa q es un peñazo, ahora m propongo pasarlo a texto, no se como y pasarlo como entrada a un obj text para verlo en la pantallica, es mejorl xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 22:06:17
Tachaaaaaaaaaaaan

Código: [Seleccionar]
Medidor
sub Medidor
Dim oOBJ1, oOBJ2, oBoton, oPOSX, oPOSY, oPOSZ
while True
PickElement "Object", "Pinsha OBJ 1", "Pinsha OBJ 1", oOBJ1, boton
if boton = 0 then
exit sub
end if
PickElement "Object", "Pinsha OBJ 2", "Pinsha OBJ 2", oOBJ2, boton
if boton = 0 then
exit sub
end if

oPOSX = GetValue(oOBJ1 & ".kine.global.posx") - GetValue(oOBJ2 & ".kine.global.posx")
oPOSY = GetValue(oOBJ1 & ".kine.global.posy") - GetValue(oOBJ2 & ".kine.global.posy")
oPOSZ = GetValue(oOBJ1 & ".kine.global.posz") - GetValue(oOBJ2 & ".kine.global.posz")
oDistansia = sqr(oPOSX*oPOSX + oPOSY*oPOSY + oPOSZ*oPOSZ)
CreatePrim "Text", "NurbsCurve"
SetValue "text.text.text", oDistansia
wend
end sub


weeeeno ara en lugar d q sea por pik a ver si lo hago dinámico q m de la distancia toolrato entre el null y el null1
lo malo es q m da una de decimales queeeeee xD un porrón xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 22:24:46
Esto es mas facil
Código: [Seleccionar]
CreatePrim "Text", "NurbsCurve"
Create2DSkeleton -5, 0, 0, 5, 0, 0, 0, 0, 0, 4
SetValue "bone.bone.primary_icon", 7
SetValue "root.Name", "StartRuler"
SetValue "StartRuler.bone.Name", "Ruler"
SetValue "StartRuler.eff.Name", "EndtRuler"
AddExpr "Ruler.bone.length"
SetExpr "Ruler.bone.length", "ctr_dist (StartRuler., EndtRuler.)"
oDistancia = GetValue ("Ruler.bone.length")
SetValue "text.text.text", oDistancia
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: alanf en 05 Junio 2010, 22:27:55
Explota justo aki "... ctr_dist(OBJ1.name, OBJ2.name) ..." con un .. No coinciden los tipos 'ctr_dist' y si le meto
(variable.name., variable.name.) no hace nah d nah
arrrchhhhhhh
es puñeteria mía ya xD
Es que no existe la funcion ctr_dist(). Estas confundiendo scripting con expresiones. Las expresiones son un lenguaje distinto.


Veo que ya has solucionado la cuestion, pero mientras escribias hize una version object-model con Python de lo mismo xD
Código: [Seleccionar]

xsi = Application
lm = xsi.LogMessage
from math import sqrt
from math import pow

objA = xsi.Selection(0)
posA = objA.Kinematics.Global.Transform.GetTranslationValues2()

objB = xsi.Selection(1)
posB = objB.Kinematics.Global.Transform.GetTranslationValues2()

Ax, Ay, Az = float(posA[0]), float(posA[1]), float(posA[2])
Bx, By, Bz = float(posB[0]), float(posB[1]), float(posB[2])

distBetween = sqrt(
pow( (Ax-Bx), 2 )
+ pow( (Ay-By), 2 )
+ pow( (Az-Bz), 2 )
)

lm( "Distancia entre centros: "+ str(distBetween) )

Lo pongo por no desperdiciar codigo.
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 22:36:02
Eres un crak xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 05 Junio 2010, 22:36:53
no se por q sigo con el BVs :S
costumbre mala del curro xD
A ver como lo hago dinamico ahora xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: alanf en 05 Junio 2010, 22:51:25
Me olvide que puedo asignar multiples variables a la vez directamente. Version mas corta:

Código: [Seleccionar]
xsi = Application
lm = xsi.LogMessage
from math import sqrt
from math import pow

objA = xsi.Selection(0)
Ax, Ay, Az = objA.Kinematics.Global.Transform.GetTranslationValues2()

objB = xsi.Selection(1)
Bx, By, Bz = objB.Kinematics.Global.Transform.GetTranslationValues2()

distBetween = sqrt(
pow( (Ax-Bx), 2 )
+ pow( (Ay-By), 2 )
+ pow( (Az-Bz), 2 )
)

lm( "ctr_dist: "+ str(distBetween) )
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 06 Junio 2010, 00:00:24
Weno al final m he echo un par d botones :P

Para crear la regla
Código: [Seleccionar]
' Crear Regla

SICreateCurve "crvlist", 1, 1
SIAddPointOnCurveAtEnd "crvlist", -5, 0, 0, False, 0
SIAddPointOnCurveAtEnd "crvlist", 5, 0, 0, False, 0

CreateClusterCenterWithNull "crvlist.pnt[0]", 0
CreateClusterCenterWithNull "crvlist.pnt[LAST]", 0

SetValue "crvlist.Name", "Ruler"
SetValue "Ruler.crvlist_Point_ClsCtr.Name", "Start_Ruler"
SetValue "Ruler.crvlist_Point1_ClsCtr.Name", "End_Ruler"

SetValue "Start_Ruler.null.shadow_icon,End_Ruler.null.shadow_icon", Array(0, 0)
SetValue "Start_Ruler.null.primary_icon,End_Ruler.null.primary_icon", Array(4, 4)

MakeLocal "Ruler.display", siNodePropagation
SetValue "Ruler.display.wirecolorr", 0.878
SetValue "Ruler.display.wirecolorg", 0.878
SetValue "Ruler.display.wirecolorb", 0
MakeLocal "Start_Ruler.display", siNodePropagation
SetValue "Start_Ruler.display.wirecolorr", 0.125
SetValue "Start_Ruler.display.wirecolorg", 0.878
SetValue "Start_Ruler.display.wirecolorb", 0.125
MakeLocal "End_Ruler.display", siNodePropagation
SetValue "End_Ruler.display.wirecolorr", 0.125
SetValue "End_Ruler.display.wirecolorg", 0.878
SetValue "End_Ruler.display.wirecolorb", 0.125

CreatePrim "Text", "NurbsCurve"
SetValue "text.Name", "Distance_txt"
SetValue "Distance_txt.text.text", "Regla"

MakeLocal "Distance_txt.display", siNodePropagation
SetValue "Distance_txt.display.wirecolorr", 0.878
SetValue "Distance_txt.display.wirecolorg", 0.251
SetValue "Distance_txt.display.wirecolorb", 0

ApplyCns "Direction", "Start_Ruler", "End_Ruler"
ApplyCns "Direction", "End_Ruler", "Start_Ruler"
ApplyCns "Pose", "Distance_txt", "Start_Ruler"

Para medir
Código: [Seleccionar]
oPOSX = GetValue("Start_Ruler.kine.global.posx") - GetValue("End_Ruler.kine.global.posx")
oPOSY = GetValue("Start_Ruler.kine.global.posy") - GetValue("End_Ruler.kine.global.posy")
oPOSZ = GetValue("Start_Ruler.kine.global.posz") - GetValue("End_Ruler.kine.global.posz")
oDistancia = sqr(oPOSX*oPOSX + oPOSY*oPOSY + oPOSZ*oPOSZ)
SetValue "Distance_txt.text.text", oDistancia

No es lo chulo que quería pero funciona xD molaría que se actualizara solo sin tener q darle al botón q le vamos hacer hasta aquí llego xD
me ralla mucho lo de los mil decimales !
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 06 Junio 2010, 00:06:57
Lo encontre en la ayuda xD round(<expr>)  Es mejoooooor!!!!!
xD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: alanf en 06 Junio 2010, 02:23:58
Me has inspirado:
http://darkvertex.com/wp/2010/06/05/python-distance-between-2-vectors/ (http://darkvertex.com/wp/2010/06/05/python-distance-between-2-vectors/)

Eres famoso! xDDD
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Cesar Saez en 13 Junio 2010, 06:19:23
Pero me parece que morphi quiere pasarlo a un objeto de texto en 3D, quizas para tener texto 3D animado. Con ICE no lo veo posible. Ademas, los ICE string nodes introducidos en la 2011 desafortunadamente no sirven para escribir a parametros de texto.
Me refería más bien a usar el log de ICE como representación gráfica de la distancia entre 2 nulls (en numeric), es mucho más limpio que crear curvas de texto con el scop para actualizar su valor. Para utilizar ese valor en expresiones y tal es fácil crear un custom property con la expresión de la distancia entre los 2 nulls :)

Los strings de la 2011 son una buena incorporación pero para la regla no son necesarios, con loguear la longitud de un vector ya lo tienes O0
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Adam Sullastres en 23 Junio 2010, 15:25:37
Osea q o m miro el ice en serio o m paso a ser un fósil mas
pufffffff
No m bastaba con el houdini, tengo q aprender ice y C4D, m va ha estallar la cabeza leñe!
Título: Re: como tengo la salida del ctr_dist en un texto ?
Publicado por: Cesar Saez en 23 Junio 2010, 17:24:52
No creo que halla que saber al detalle como usar cada herramienta sino más bien conocer sus fortalezas y debilidades (aunque sea a nivel general) para saber por donde tirar según que tareas y conocer tus posibilidades para enfrentar los desafios que te planteas.

Te aseguro que pasar de una plataforma a otra es trivial cuando conoces la lógica tras la solución del problema, es mejor ponerse con eso que con el botoneo del software de turno :)