限制Mayavi鼠标拖动以围绕其轴旋转地球

5

使用iPython笔记本,我能够通过以下代码在地球上呈现出一个地球仪:

from mayavi import mlab
from mayavi.sources.builtin_surface import BuiltinSurface

ocean_blue = (0.4, 0.5, 1.0)
r = 6371 # km

sphere = mlab.points3d(0, 0, 0, name='Globe',
  scale_mode='none', scale_factor=r * 2.0,
  color=ocean_blue, resolution=50)

sphere.actor.property.specular = 0.20
sphere.actor.property.specular_power = 10

continents_src = BuiltinSurface(source='earth', name='Continents')
continents_src.data_source.on_ratio = 1  # detail level
continents_src.data_source.radius = r
continents = mlab.pipeline.surface(continents_src, color=(0, 0, 0))

但当我使用鼠标与生成的3D窗口交互时,很难保持它正面朝上,因为UI将鼠标向左或向右拖动解释为围绕窗口当前垂直轴线旋转场景(或相机?),而不是通过地球本身的轴线。

是否有任何方法可以限制用户交互代码,使左或右鼠标拖动始终围绕地球轴线旋转,无论轴线是否指向直上直下,是否通过设置一些Mayavi参数,或者通过获取一些Python代码注册为鼠标拖动的UI事件处理程序来实现?


如果你按下“ctrl”键并拖动,它就会这样做。 - aestrivex
在我笔记本电脑上安装的Mayavi版本中,按住Ctrl键只会将地球围绕着我当前所观察到的表面点旋转,而不是限制其运动围绕地球自身的极点。 - Brandon Rhodes
啊,好的,我没有完全理解你想要的交互。 - aestrivex
1个回答

4
九个月后,我终于找到了一个线索,引导我找到了解决方案!另一个Stack Overflow问题和答案,是否可能在Mayavi中禁止鼠标旋转轴?,向我介绍了设置非默认的“交互器”来控制鼠标单击和拖动的含义的想法。
实际上有一个交互器可以保持Z轴“向上”,无论用户做什么: http://www.vtk.org/doc/nightly/html/classvtkInteractorStyleTerrain.html 要在Mayavi主窗口中激活此交互器,只需将以下三行添加到您的代码中(例如,您可以将它们添加到我的球体构建代码中),球体将始终保持正直!
from tvtk.api import tvtk
fig = mlab.gcf()
fig.scene.interactor.interactor_style = tvtk.InteractorStyleTerrain()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接