Mathematica и MouseListener - разработка интерактивной графики с помощью Mma - PullRequest
8 голосов
/ 31 мая 2011

Я хочу добавить интерактивность к 3D-графике Mathematica, за исключением Manipulate, который классен, но имеет свои ограничения Представьте четыре примера демонстрации проблемы четырех кубов в Mathematica: щелчок по одному из кубов вращает куб.

Вопросы.

  1. Возможно ли перехватывать MouseEvents в графике Mathematica (например, с использованием класса Java или иным образом?)

  2. Или использование Java затем вызывает Mathematica из Java в качестве рекомендуемого маршрута?

  3. Или (я надеюсь, что нет) разрабатывает интерактивные графические программы помимо того, что следует делать с Mathematica?

1 Ответ

15 голосов
/ 31 мая 2011

EventHandler может использоваться для захвата различных событий мыши (мышь вверх, мышь вниз, нажатие мыши, перетаскивание мыши). Используйте MousePosition, чтобы добавить немного интеллекта.

Пример:

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

Круги можно нажимать независимо. Действие определяется для каждого объекта отдельно.

Удивительно, но это даже работает для 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...