Bra*_*des 5 python visualization scipy mayavi mayavi.mlab
使用 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))
Run Code Online (Sandbox Code Playgroud)
但是,当我使用鼠标与生成的 3D 窗口交互时,很难将其保持正面朝上,因为 UI 将向左或向右拖动鼠标解释为尝试旋转场景(或相机?)围绕窗口当前的垂直轴,而不是通过地球仪本身的轴。
有没有办法限制用户交互代码,以便通过设置一些 Mayavi 参数,无论轴是否垂直向上或向下,鼠标左键或右键拖动都会绕其轴旋转地球仪,或者通过将一些Python代码注册为鼠标拖动的UI事件处理程序?
九个月后,我终于找到了解决问题的线索!另一个堆栈溢出问答,是否可以在 Mayavi 中禁止使用鼠标旋转轴?,让我想到了设置一个非默认的 \xe2\x80\x9cinteractor\xe2\x80\x9d 来控制鼠标单击和拖动的含义。
\n\n并且确实有一个交互器,无论用户做什么,它都会保持 Z 轴 \xe2\x80\x9cup\xe2\x80\x9d :
\n\nhttp://www.vtk.org/doc/nightly/html/classvtkInteractorStyleTerrain.html
\n\n要在 Mayavi 主窗口中激活此交互器,只需将以下三行添加到您的代码中(例如,您可以将它们添加到问题中我的地球仪构建代码中),地球仪将始终保持直立!
\n\nfrom tvtk.api import tvtk\nfig = mlab.gcf()\nfig.scene.interactor.interactor_style = tvtk.InteractorStyleTerrain()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |