5

使用 iPython Notebook,我已经能够使用如下代码创建一个地球仪:

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 事件处理程序?

4

1 回答 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()
于 2013-09-13T18:43:31.023 回答