Resultados 1 al 8 de 8

Softselection manipulator

  1. #1
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Softselection manipulator

    Un compañero me ha pasado este script para la creación de un manipulador para el softselecction, es bastante cómodo, pero no me gusta su forma de gizmo esférico. A mí me gustaría que fuera un círculo que siempre tuviera la misma forma en todas las cámaras. No sé cómo hacerlo, evidentemente, y me gustaría que los expertos le echaran un ojo para saber si es posible hacerlo. Gracias y saludos.
    -.

    Script: poly selectfallof manipulator.

    Versión: v01. Max4.

    Started: 2/17/01.

    Last modified: 2/18/01.

    Description: adds manipulator for softselecction fallof in Editable Poly.

    Code by: Martín 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_ssfallofmanip.

    Name:poly_sfallofmanip.

    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, interfaz.

    This manipulator manipulates editable meshes and polys.

    On canmanipulate target do - Called at class level, cant 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, fallof.

    Else if targclass == editable_mesh then meshop, getfallof target.

    If usesoftsel and subobjectlevel > 0 then.
    (Local vértices =
    If subobjectlevel == 1 then - Verts.
    (If targclass == editable_poly then interfaz, 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.

    Gizpues = [0,0,0].

    For I in vértices do (gizpues += interfaz, getvert target i) - Local cord space.

    Gizpues /= vértices, 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 gizpues 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 todo the manipulator.

    This, addgizmoshape giz1 0 g r.

    This, addgizmoshape giz2 0 g r.

    This, addgizmoshape giz3 0 g r.

    Return the truco string.

    Node, name + sel fallof = + size as string).
    ).

    Catch()).

    Mousemove is called on every mouse move when dragging the manip.

    It neds todo convert the mouse position into a new value for the fallof.

    On mousemove which do.
    (Try.

    Manip, makeplanefromnormal takes a normal Vector and a point.

    And creates a plane passing th rouge 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 % : % : % : %\nViewray projectedpoint gizpues which.

    If the intersection worked, set the fallof.

    If (res) then.
    (Projectedpoint = gizpues - Projectedpoint.

    Local size = sqrt(projectedpoint.x2+ projectedpoint, y2+ projectedpoint, z2).

    If targclass == editable_poly then target, fallof = size.

    Else if targclass == editable_mesh then (meshop, setuiparam target #fallof 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
    Fecha de ingreso
    Dec 2004
    Mensajes
    14,031

    Softselection manipulator

    Pues yo no he usado en mi vida ni 3ds Max 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.

  3. #3
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    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
    Fecha de ingreso
    Apr 2005
    Mensajes
    1,621

    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 cords de pantalla 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 dibujaría 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 echarle un vistazo, me parece que la solución adoptada es la más práctica a todos los efectos.
    Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.

  5. #5
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Softselection manipulator

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

    Una imagen de muestra. El de la izquierda es como me molaría 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 saludo.

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: soft.jpg 
Visitas: 133 
Tamaño: 143.4 KB 
ID: 40774  
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  6. #6
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Softselection manipulator

    He modificado el script para que el gizmo encare la cámara. Pero cómo 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 práctico 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.

    -- IMÁGENES ADJUNTAS --
    Archivos adjuntados Archivos adjuntados

  7. #7
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Softselection manipulator

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

  8. #8
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    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. Gracias half.
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

Temas similares

  1. 3dsMax Joystick manipulator
    Por nassiet en el foro Animación y Rigging
    Respuestas: 0
    : 22-02-2011, 09:25
  2. Sugerencias rotate manipulator
    Por magrisa en el foro Modelado
    Respuestas: 0
    : 08-02-2009, 00:55
  3. Maxscript simple spline manipulator
    Por Nessito en el foro Plugins y Scripts
    Respuestas: 24
    : 27-01-2009, 09:36
  4. Maxscript stand-in spline manipulator
    Por Nessito en el foro Plugins y Scripts
    Respuestas: 5
    : 21-11-2006, 14:31
  5. Maxscript boolean manipulator
    Por Nessito en el foro Plugins y Scripts
    Respuestas: 0
    : 02-11-2006, 09:22