Gracias Gracias:  0
Resultados 1 al 8 de 8

Tema: Softselection manipulator

  1. #1
    Megalodon... Avatar de Ballo
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,888

    Softselection manipulator

    Un compañero me ha pasado este script para la creación de un manipulador para el softselection, es bastante comodo pero no me gusta su forma de gizmo esférico. A mi me gustaría que fuera un círculo que siempre tubiera la misma forma en todas las cámaras. No se como hacerlo, evidentemente, y me gustaría que los expertos le echaran un ojo para saber si es posible hacerlo.

    Gracias.

    Saludos.

    ----------------------------------------------------------------------------------------
    -- Script: Poly SSelectFalloff Manipulator
    -- Version: v01.Max4
    -- Started: 2/17/01
    -- Last Modified: 2/18/01
    -- Description: Adds Manipulator for SoftSelection Falloff in Editable Poly
    -- Code by: Martin Coven mcoven@austin.rr.com
    -- Thanks to: John Versluis and Borislav Petrov for their great help
    -- Based on the Radius Manipulator code by Scott Morrisson from Discreet.

    -- reworque by Larry Minton 6/26/01
    ----------------------------------------------------------------------------------------

    plugin simpleManipulator Poly_ssfalloffManip
    name:"Poly_SSFalloffManip"
    invisible:true
    (
    -- Create the green and red colors for the gizmo
    local g = green -- [0,1,0]
    local r = [1,0,0]
    local b = [0,0,1]
    local y = [1,1,0]
    local GizPos, targClass, interface

    -- This manipulator manipulates editable meshes and polys
    on canManipulate target do -- called at class level, can't access plugin local variables
    ( getCommandPanelTaskMode() == #modify and
    ( local targClass = classof target
    targClass == editable_poly or targClass == editable_mesh
    )
    )

    -- Create the manipulator gizmo.
    -- This is called initially and whenever the manipulator target changes
    on updateGizmos do
    (
    try
    (
    -- Clear the current gizmo cache
    this.clearGizmos()

    targClass = classof target
    interface = if targClass == editable_poly then polyop else if targClass == editable_mesh then meshop

    local useSoftSel =
    if targClass == editable_poly then target.useSoftSel
    else if targClass == editable_mesh then meshop.getSoftSel target
    else false
    local size =
    if targClass == editable_poly then target.falloff
    else if targClass == editable_mesh then meshop.getfalloff target

    if useSoftSel and subobjectlevel > 0 then
    ( local verts =
    if subObjectLevel == 1 then -- verts
    ( if targClass == editable_poly then interface. getVertSelection target
    else if targClass == editable_mesh then node.selectedVerts as bitarray -- why no meshop.getVertSelection?
    )
    else if subObjectLevel == 2 then -- edges
    interface. getVertsUsingEdge target #selection
    else -- faces
    interface. getVertsUsingFace target #selection

    GizPos = [0,0,0]
    for i in verts do (GizPos += interface. getVert target i) -- local coord space
    GizPos /= verts.numberSet

    local giz1 = manip.makecircle [0,0,0] size 24
    local my_tm = matrixFromNormal [0,1,0]
    my_tm.position = GizPos
    giz1.transform my_tm

    local giz2 = manip.makecircle gizpos size 24

    local giz3 = manip.makecircle [0,0,0] size 24
    my_tm = matrixfromnormal [1,0,0]
    my_tm.position = GizPos
    giz3.transform my_tm

    -- Add the circle to the manipulator
    this.addGizmoShape giz1 0 g r
    this.addGizmoShape giz2 0 g r
    this.addGizmoShape giz3 0 g r

    -- return the ToolTip string
    node.name + " SSel falloff = " + size as string
    )
    )
    catch()
    )

    -- mouseMove is called on every mouse move when dragging the manip
    -- It needs to convert the mouse position 'm' into a new value for the falloff
    on mouseMove m which do
    ( try
    (
    -- manip.makePlaneFromNormal takes a normal vector and a point
    -- and creates a plane passing through the point with the given normal
    local axis = case which of -- get axis based on which gizmo hit
    ( 0: y_axis
    1: z_axis
    2: x_axis
    )
    local pl = manip.makePlaneFromNormal axis GizPos

    -- Compute the hit-ray in local coordinates
    local viewRay = this.getLocalViewRay m

    -- Intersect the plane with the view ray
    local projectedPoint = [0,0,0]
    local res = pl.intersect viewRay &projectedPoint
    -- format "% : % : % : %\n" viewRay projectedPoint GizPos which

    -- If the intersection worked, set the falloff
    if (res) then
    ( projectedPoint = GizPos - projectedPoint
    local size = sqrt(projectedPoint.x^2+ projectedPoint.y^2+ projectedPoint.z^2)
    if targClass == editable_poly then target.falloff = size
    else if targClass == editable_mesh then (meshop.setuiparam target #falloff size;update node geometry:false topology:false normals:false) --meshop UI parameter setters broken
    )
    )
    catch()
    )
    )
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  2. #2
    BlenderAdicto Avatar de Caronte
    Fecha de ingreso
    Dec 2004
    Ubicación
    Valencia-España
    Mensajes
    14,691

    Re: Softselection manipulator

    Pues yo no he usado en mi vida ni 3DSMax ni mucho menos su lenguaje de programación, pero por si te sirve de ayuda, es posible que lo que tengas que cambiar sea esta linea:

    local my_tm = matrixFromNormal [0,1,0]

    Por lógica yo cambiaría matrixFromNormal por matrixFromView o algo así, aunque por supuesto, ni siquiera sé si eso existe

    Échale un ojo a la documentación de ese lenguaje, a ver si encuentras algo.
    "Algún día todo será digital". Caronte.
    Mi web: NicoDigital.com

  3. #3
    H = E + L
    Fecha de ingreso
    Mar 2004
    Ubicación
    Entre dos vectores
    Mensajes
    870

    Re: Softselection manipulator

    Efectivamente es como dice Caronte, hay que coger el vector de vista. De esa forma el círculo encarara a la cámara. El problema es que el gizmo sólo se actualiza cuando cambias la selección o modificas el propio gizmo, pero no cuando rotas o mueves la vista.

    Saludos.

  4. #4
    Senior Member
    Fecha de ingreso
    Apr 2005
    Mensajes
    1,637

    Re: Softselection manipulator

    Hay otro problema añadido:
    ¿A que vista debería apuntar el círculo?
    Cuando coges el vector de la vista, lo coges de la vista activa, por tanto el círculo estaría orientado a la vista actual, pero no a las demás.
    Para dibujar un círculo en coords de pantala en vez de 3D tendrías un problema similar. Dibujaría el círculo en la ventana activa correctamente, pero en las demás, ni la posición ni el tamaño coincidiría (de hecho lo dibujaria igual en todas las vistas, en la misma posición y con el mismo tamaño EN COORDENADAS DE PANTALLA). Es por eso que los manipuladores de espacio pantalla (los sliders por ejemplo), solo se dibujan en la vista actual, y no en todas.

    En fin, que después de hecharle un vistazo, me parece que la solución adoptada es la más practica a todos los efectos.
    Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.

  5. #5
    Megalodon... Avatar de Ballo
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,888

    Re: Softselection manipulator

    Aja...mmhh que guay..pues lo cambiaré y ya os cuento como tira...de todos modos me molaria cambiar el "gizmo" por un círculo simple mucho más visual y rápido. Puede ser que pida demasiado no se. :D

    Una imagen de muestra. El de la izquier es como me molaria el de la derecha es el habitual del script.

    No tendría problema en que solo se viera en una vista, yo trabajo siempre en una vista y voy cambiando con el teclado.

    Gracias un saludete.
    Miniaturas adjuntadas Miniaturas adjuntadas Softselection manipulator-soft.jpg  
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  6. #6
    H = E + L
    Fecha de ingreso
    Mar 2004
    Ubicación
    Entre dos vectores
    Mensajes
    870

    Re: Softselection manipulator

    He modificado el script para que el gizmo encare la cámara. Pero como se ha dicho, no se actualiza al rotar/desplazar la vista.

    También le he añadido dos círculos más para el pinch y el bubble pero no sé yo si es muy practico ya que normalmente se utilizan valores muy bajos y los círculos apenas se ven. Por defecto están desactivados. Si quieres verlos, hay una línea que es:

    Código:
    local showExtras = false
    Cambiala a:

    Código:
    local showExtras = true
    Saludos.
    Archivos adjuntados Archivos adjuntados

  7. #7
    Megalodon... Avatar de Ballo
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,888

    Re: Softselection manipulator

    Gracias, a todos, voy a mirarlo....
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  8. #8
    Megalodon... Avatar de Ballo
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,888

    Re: Softselection manipulator

    Es una pena que no se actualice....cachis que cosas..crei que sería más sencillo...Aun así me gusta bastante como ha quedado...

    Merci Half!
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

Temas similares

  1. joystick manipulator
    Por nassiet en el foro Animación y Rigging
    Respuestas: 0
    Último mensaje: 22-02-2011, 11:25
  2. ayuda rotate manipulator
    Por magrisa en el foro Modelado
    Respuestas: 0
    Último mensaje: 08-02-2009, 02:55
  3. [MaXScript] :: Simple Spline manipulator
    Por Nessito en el foro Programación y Scripts
    Respuestas: 24
    Último mensaje: 27-01-2009, 11:36
  4. [MaXScript] :: Boolean manipulator
    Por Nessito en el foro Programación y Scripts
    Respuestas: 0
    Último mensaje: 02-11-2006, 11:22
  5. Como hacer un softselection dentro de SKIN
    Por erickfranz en el foro Animación y Rigging
    Respuestas: 4
    Último mensaje: 25-06-2006, 17:01

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •