gpt4 book ai didi

python - 将 Mayavi 鼠标拖动限制为绕其轴旋转地球

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:58 25 4
gpt4 key购买 nike

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

最佳答案

九个月后,我终于找到了一条线索,让我找到了解决办法!另一个 Stack Overflow 问答,Is it possible to prohibit axes rotation with the mouse in 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()

关于python - 将 Mayavi 鼠标拖动限制为绕其轴旋转地球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com