XSIforum.com

Ayuda: Script para alinear los vertices de un conjunto de aristas

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

Hola a todos. Estoy haciendo mis primeros pinitos con el scripting de XSI y me estoy volviendo loco   :buck2:

La idea es solucionar aquellos modelos poligonales simétricos en los que al duplicar una mitad quedan pequeñas crestas o valles justo en la juntura de las dos mitades (sobre todo tras utilizar la Proportional Modeling tool) y que son debidas simplemente a que las coordenadas YZ (en caso de tener alineado el modelo a lo largo del eje Z) son distintas para los dos puntos que forman cada una de las aristas del "parallel edge loop" central. Ver imagen adjunta.

Un script que permitiera igualar dichas coordenadas para cada una de las aristas centrales (preseleccionadas antes de ejecutar el script) de un modelo dado solucionaría este problema en 10 segundos.  ;) A ver si con una ayudita puedo acabarlo y ponerlo a disposición de todos vosotros. Conozco muy bien el lenguaje VBScript, lo que no conozco tan bien es el modelo de objetos de XSI.  :'(

Ahí va el script que he hecho por ahora. El principal problema es que no tengo ni idea de como seleccionar los dos vértices que componen cada arista (he probado de todo y siempre me da error) para luego alinearlos.

===========================================================================
' Script para el alineado de aristas. Por Moebius4u.5 de Enero de 2006
' ===========================================================================
' Muy útil en las aristas centrales de un modelo poligonal simétrico, previo
' a la realización de la simetría. Evita crestas o valles en el centro del
' modelo.
' ===========================================================================


SonAristas = true
For Each oSel in Application.Selection
      if oSel.Type <> "edgeSubComponent" then
         SonAristas = false
      end if
Next

if SonAristas = false then
   logMessage "Atención: Este script sólo funciona con aristas"
   
else

   set xsiDial = createObject("xsidial.xsidialog")
   
   alignDirection = xsidial.combo("¿En que dirección (global) quiere alinear los vertices de cada arista?", array("xy", "xz", "yz"))
   
   set oSelection = Application.Selection 

   for i = 0 to (oSelection.Count - 1)  ' Para cada arista...
   
      ' Obtenemos el nombre del objeto padre
   
        parentObject = oSelection(i).Subcomponent.Parent3DObject.Name
   
      ' Obtenemos los vertices que la forman
      
      set subComponent = oSelection(i).SubComponent
      selectedIndices = subComponent.ElementArray
      
      set p = oSelection(i).subcomponent.Parent3DObject.activePrimitive.geometry.points(selectedIndices(0))
      set parentObjSpace = oSelection(i).subComponent.Parent3DObject.Kinematics.Local.Transform
       set oGlobalPos = XSIMath.MapObjectPositionToWorldSpace(parentObjSpace , p.position)
       xPos = oGlobalPos.x
       yPos = oGlobalPos.y
       zPos = oGlobalPos.z

      if alignDirection =0 then
         translate parentObject & ".pnt[" &selectedIndices(1)& "]" , xPos , yPos  , zPos, siAbsolute,, siObj, siXY
      elseif alignDirection =1 then
         translate parentObject & ".pnt[" &selectedIndices(1)& "]" , xPos , yPos  , zPos, siAbsolute,, siObj, siXZ
      elseif alignDirection =2 then
         translate parentObject & ".pnt[" &selectedIndices(1)& "]" , xPos , yPos  , zPos, siAbsolute,, siObj, siYZ
      end if

   next   

end if


El resultado (erroneo) de ejecutar este script es que coge el vértice cuyo número es igual a la segunda arista seleccionada y lo mueve a la posición de una de las aristas seleccionadas.  :'( No sé que he hecho pero es un desastre...

Gracias por adelantado. Saludos.


Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #1 en: 05 Enero 2006, 23:10:32 »
Bueno parece que este tema no ha interesado mucho.  :'(

En cualquier caso le he estado echando unas horas y al final lo he resuelto. Por si os interesa voy a crear un tema en tutoriales de Script donde explico como usar este script así como su código.  ;D

Saludos.

Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #2 en: 06 Enero 2006, 02:15:03 »
No es que no interese... esque de scripting sé lo mismo como de pilotar un f-18 :(

eduardito

  • *****
  • 3064
  • hola holita
Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #3 en: 06 Enero 2006, 09:32:12 »
Bueno parece que este tema no ha interesado mucho.  :'(


no es que interese, es que de estos temas poco sabemos y poco podemos aportar. O0

agedito

  • ***
  • 1524
  • ¡¡Yo lo que quiero es milonguear!!
Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #4 en: 06 Enero 2006, 11:00:24 »
Ando muy liado con las navidades, pero la semana que vine le hecho un vistazo e intento ayudarte.

Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #5 en: 06 Enero 2006, 11:42:23 »
Como os comentaba al final lo he resuelto tras echarle unas horas y leer en profundidad la documentación que viene con XSI. Tenéis el resultado en la sección de Tutoriales:

http://www.xsiforum.com/forum/index.php/topic,2576.from1136536278/topicseen.html#msg20895

En cualquier caso muchas gracias.

agedito

  • ***
  • 1524
  • ¡¡Yo lo que quiero es milonguear!!
Re: Ayuda: Script para alinear los vertices de un conjunto de aristas
« Respuesta #6 en: 06 Enero 2006, 11:50:09 »
Ya has visto que hay que meterse en la navegación e investigar.. el SDK Explorer también es muy util