Mathematica和MouseListener - 用Mma开发交互式图形

时间:2011-05-31 15:01:47

标签: wolfram-mathematica

我想为Mathematica 3D图形添加交互性,而不是Manipulate,这很酷但有其局限性。想想Mathematica中四个立方体问题演示的四个例子,点击其中一个立方体就会旋转一个立方体。

问题。

  1. 是否可以在Mathematica图形中捕获MouseEvents(例如使用Java类或其他方式?)

  2. 或者是使用Java然后从Java调用Mathematica建议路由?

  3. 或者(我希望不是)正在开发超出Mathematica应该做的交互式图形程序?

1 个答案:

答案 0 :(得分:15)

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