#wolfram-mathematica
#wolfram-mathematica
Вопрос:
Я хочу добавить интерактивности в 3D-графику Mathematica, отличную от Manipulate, которая классная, но имеет свои ограничения. Подумайте о четвертом примере демонстрации задачи о четырех кубах в Mathematica, щелчок по одному из кубов приводит к вращению куба.
Вопросы.
-
Возможно ли перехватить MouseEvents в Mathematica graphics (например, с использованием класса Java или иным образом?)
-
Или рекомендуется использовать Java, а затем вызывать Mathematica из Java?
-
Или (я надеюсь, что нет) разработка интерактивных графических программ выходит за рамки того, что нужно делать с Mathematica?
Ответ №1:
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})}]
}
]
]
На кружочки можно нажимать независимо. Действие определяется для каждого объекта отдельно.
Удивительно, но это работает даже для 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})}]
}
]
]
Комментарии:
1. @ndroock1 Спасибо, что приняли мой ответ. В следующий раз вы могли бы подождать немного дольше, чтобы получить больше ответов.
2. Сэр, я уже голосовал за это, но я бы проголосовал еще раз за обновление. Я никогда не видел такого раньше, с возможностью поворота и все такое. 🙂
3. Почему кончик мыши в случае 3D не принимает форму маленькой стрелки, как можно было бы ожидать при нажатии на объекты? в 2D примере, показанном выше, всплывающая подсказка в конце мыши на экране представляет собой маленькую стрелку, но не в 3D случае. Я думаю, это немного сбивает с толку пользователя.
4. @Nasser, я думаю, никто не идеален.
5. @Sjoerd, приятно видеть, что Mathematica все еще временами поражает тебя.