2011-05-31 12 views
8

Quiero agregar interactividad a los gráficos 3D de Mathematica, a excepción de Manipulate, que es genial pero tiene sus limitaciones. Piensa en cuatro ejemplos de una demostración del problema de cuatro cubos en Mathematica, un clic en uno de los cubos gira un cubo.Mathematica y MouseListener: desarrollo de gráficos interactivos con Mma

Preguntas.

  1. ¿Es posible coger MouseEvents en Mathematica gráficos (por ejemplo, con el uso de una clase de Java o de otra manera?)

  2. O es el uso de Java a continuación, llamar desde Java Mathematica la ruta aconsejado?

  3. O (espero que no) está desarrollando programas de gráficos interactivos más allá de lo que uno debería hacer con Mathematica?

Respuesta

15

EventHandler se puede utilizar para atrapar varios eventos de ratón (mouse hacia arriba, ratón, ratón se hace clic, ratón arrastrado). Usa MousePosition para agregar algo de inteligencia.

Ejemplo:

DynamicModule[{col1 = Green, col2 = Blue}, Graphics[ 
    { 
    EventHandler[ 
    Dynamic[{col1, Disk[]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col1 = 
     col1 /. {Red -> Green, Green -> Red})}], 
    EventHandler[ 
    Dynamic[{col2, Disk[{1, 1}]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col2 = 
     col2 /. {Blue -> Yellow, Yellow -> Blue})}] 
    } 
    ] 
] 

enter image description here

Los círculos se puede hacer clic de forma independiente. Una acción se define para cada objeto por separado.

Sorprendentemente, esto funciona incluso para gráficos 3D:

DynamicModule[{col1 = Green, col2 = Blue}, 
Graphics3D[ 
    { 
    EventHandler[ 
    Dynamic[{col1, Sphere[]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col1 = 
     col1 /. {Red -> Green, Green -> Red})}], 
    EventHandler[ 
    Dynamic[{col2, Sphere[{1, 1, 1}]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col2 = 
     col2 /. {Blue -> Yellow, Yellow -> Blue})}] 
    } 
    ] 
] 

enter image description here

+1

increíble. Gracias. –

+2

@ ndroock1 Gracias por aceptar mi respuesta. La próxima vez puede esperar un poco más para obtener más respuestas. –

+2

Sjoerd, ya voté por esto, pero volvería a votar por la actualización. Nunca había visto eso antes, giratorio y todo. :-) –

Cuestiones relacionadas