XSIforum.com

Scripting : perdida de la selección

0 Usuarios y 2 Visitantes están viendo este tema.

Dios

  • ***
  • 1622
  • Why, Mr. Anderson?
Scripting : perdida de la selección
« en: 13 Abril 2009, 19:29:09 »
Hola.. estoy haciendo un script para pasar las nurbs a mesh, además de que haga un gator para pasarle las uvs y los materiales... y además quiero que quede la misma jerarquía que con las nurbs.. y meta esos polys en unos grupos determinados... pero bueno.. mi problema está en que cuando selecciono todas las nurbs para que vaya convirtiendolas... al hacer el gator, me queda seleccionado el nuevo objeto y en el después del next, me peta... Como podría hacer referencia a los demás objetos que aún no han sido convertidos en mesh??

Código: [Seleccionar]
'Asigna a oSelection todo lo que tengo seleccionado
set oSelection = Application.Selection
Logmessage "oSelection.Count =" & oSelection.Count

for i = 0 to oSelection.Count -1
Logmessage "i =" & i
Logmessage "oSelection(i).Name =" & oSelection(i).Name


set oName = oSelection(i)
set oName2 = oSelection (i)
Logmessage "oName ="& oName.FullName

ApplyGenOp "NurbsToMesh", , oName.FullName , 3, siPersistentOperation, siKeepGenOpInputs
SetValue "polymsh.polymsh.nurbstomesh.stepu", 7
SetValue "polymsh.polymsh.nurbstomesh.stepv", 7
SetValue "polymsh.Name", oName2.Name


Logmessage "oName ="& oName.Name
Logmessage "oName2 ="& oName2.Name
'*****GATOR******
'ApplyGenOp "Gator", , "polymsh;Model.cube", 3, siPersistentOperation, siKeepGenOpInputs
'TransferAllPropertiesAcrossGenOp "polymsh.polymsh.TransferAttributes", "polymsh", , True

'oName hace referencia a la nurbs y oName2 al polymsh. Se llaman igual pero es para diferenciar
'y poder hacer referencia a ellos indistintamente

ApplyGenOp "Gator", , " " & oName2.Name & ";" & oName.FullName & " ", 3, siPersistentOperation, siKeepGenOpInputs
TransferAllPropertiesAcrossGenOp "" & oName2.Name & ".polymsh.TransferAttributes", oName2.Name, , True
FreezeObj
Logmessage "oSelection.Count =" & oSelection.Count
Logmessage oSelection(i).Name
Logmessage oSelection(i).Type

next


A ver si alguien me puede echar una mano.. gracias

Re: Scripting : perdida de la selección
« Respuesta #1 en: 13 Abril 2009, 19:41:42 »
Prueba guardar la selección con Application.GetValue("SelectionList") O0

Dios

  • ***
  • 1622
  • Why, Mr. Anderson?
Re: Scripting : perdida de la selección
« Respuesta #2 en: 13 Abril 2009, 19:47:29 »
Eso es cesar, gracias... justo lo acababa de encontrar...

no sabía que el application.selection se actualizaba ... y la verdad es que no sé porqué... porque estoy dentro de un for.. y a oSelection no le estoy asignando nada nuevo...

oSelection no debería ser un array que se mantuviese "fijo" hasta que se le indique lo contrario??

de todas formas, mil gracias

Re: Scripting : perdida de la selección
« Respuesta #3 en: 13 Abril 2009, 19:55:13 »
No, lo que estás haciendo con oSelection es simplemente una referencia a la selección.

Esto pasa porque la selección es un objeto (una clase) y no tan sólo un array con items, de esta forma lo que obtienes no es un valor de retorno como en una función sino un objeto con sus métodos y propiedades (es mucho más versátil). Si quieres una copia de sus items debes hacerlo de forma explícita.
« Última modificación: 13 Abril 2009, 20:08:04 por César Sáez »

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Scripting : perdida de la selección
« Respuesta #4 en: 13 Abril 2009, 22:53:59 »
Esto pasa solo con Python?

Porque juraria que he hecho en JavaScript:
var oldSelection = selection;
y luego:
SelectObj(oldSelection);

y me funciono.

Re: Scripting : perdida de la selección
« Respuesta #5 en: 14 Abril 2009, 00:12:37 »
No, pasa con todos, en tu ejemplo consultas la selección y luego la modificas por ende no es un problema (no la cambias).

Prueba con esto (y algo seleccionado) ;)
Código: (JScript) [Seleccionar]
oldSelection = Application.Selection;
Application.DeselectAll();
Application.LogMessage( oldSelection.Count);
« Última modificación: 14 Abril 2009, 00:26:01 por César Sáez »

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Scripting : perdida de la selección
« Respuesta #6 en: 14 Abril 2009, 06:18:47 »
hmm, sera que habra que seleccionar/deseleccionar para que cambie, porque me ha funcionado tras afectar la seleccion en el pasado. no se.

en fin, hoy en dia tengo la costumbre de hacerme un xsicollection con la seleccion dentro de todos modos.

Re: Scripting : perdida de la selección
« Respuesta #7 en: 14 Abril 2009, 16:23:00 »
hmm, sera que habra que seleccionar/deseleccionar para que cambie, porque me ha funcionado tras afectar la seleccion en el pasado. no se.
Es que no guarda la selección sino que hace una referencia a la misma, mientras tu selección no cambie a lo largo del script seguirá apuntando a los mismos objetos (por eso tu ejemplo funciona), cada vez que escribes oldSelection revisa lo que actualmente está seleccionado y no lo que estuvo seleccionado (no siempre es un problema como puedes ver).

Dios

  • ***
  • 1622
  • Why, Mr. Anderson?
Re: Scripting : perdida de la selección
« Respuesta #8 en: 14 Abril 2009, 17:35:06 »
Hola de nuevo.. no he entendido mucho esto entre vosotros, pero lanzo otra pregunta.. como puedo hacer para asignar el nombre del material de un objeto a una variable oMatGroup por ejemplo..

intento esto pero no funciona...

Código: [Seleccionar]
set oSelection = GetValue( "SelectionList" )

for each oObj in Selection
'LogMessage oObj.fullname
Logmessage oObj.Material.Parameters("name").Value
set oMatGroup = oObj.Material.Parameters("name").Value
Logmessage oMatGroup
next

Dios

  • ***
  • 1622
  • Why, Mr. Anderson?
Re: Scripting : perdida de la selección
« Respuesta #9 en: 14 Abril 2009, 18:14:18 »
A ver, sigo con el mismo problema... al principio hago una selección, pero a medida que avanza el script, se seleccionan otros objetos... pero necesito poder acceder a los primeros para que siga el FOR.. como guardo los objetos de una seleccion en un array que no cambie cada vez que se seleccione algo nuevo??


Código: [Seleccionar]
'Asigna a oSelection todo lo que tengo seleccionado
set oSelection = GetValue( "SelectionList" )

Logmessage "oSelection.Count =" & oSelection.Count

for i = 0 to oSelection.Count -1
Logmessage "i =" & i
Logmessage "oSelection(i).Name =" & oSelection(i).Name

set oName = oSelection(i)


Logmessage "oName.FullName ="& oName.FullName




'*******Nurbs 2 mesh*****
ApplyGenOp "NurbsToMesh", , oName.FullName , 3, siPersistentOperation, siKeepGenOpInputs
SetValue "polymsh.polymsh.nurbstomesh.stepu", 7
SetValue "polymsh.polymsh.nurbstomesh.stepv", 7



'****Asigna al nuevo objeto el nombre de oName2 que es el mismo que el objeto original más x

set oSelection2 = Application.Selection

for j = 0 to oSelection2.Count -1
set oName2 = oSelection2(j)


Logmessage oName2.Name
SetValue oName2 & ".Name", oName.Name& "x"
Logmessage oName2.Name


'*****GATOR******

'oName hace referencia a la nurbs y oName2 al polymsh. Se llaman igual pero es para diferenciar
'y poder hacer referencia a ellos indistintamente


ApplyGenOp "Gator", , "" & oName2.Name & ";" & oName.FullName & "", 3, siPersistentOperation, siKeepGenOpInputs
TransferAllPropertiesAcrossGenOp "" & oName2.Name & ".polymsh.TransferAttributes", oName2.Name, , True
FreezeObj


'******Hacer hijo del modelo padre***

'Logmessage oSelection(i).Parent
ParentObj "B:" & oSelection(i).Parent & "", "" & oName2.Name & ""


'****Hacer padre de los hijos de la nurbs
for each oChild in oSelection(i).Children
    ParentObj "B:" & oName2 & "", "" & oChild &""

next

'***Con el objeto seleccionado, se coge el nombre del material de ese objeto
'***y se añade al grupo que tiene el mismo nombre que el material
set oSelection = GetValue( "SelectionList" )

for each oObj in Selection

'Logmessage oObj.Material.Parameters("name").Value
set oMatGroup = oObj.Material
'Logmessage oMatGroup.Parameters("name").Value
'Logmessage oMatGroup.Model


SIAddToGroup ""& oMatGroup.Model &"." & oMatGroup.Parameters("name").Value &""

next


next






Logmessage "oSelection.Count =" & oSelection.Count
Logmessage "oSelection(i).Name =" & oSelection(i).Name

next

Por supuesto, mil gracias