python - Mayavi - 鼠标悬停交互和从不同角度绘制相同场景
问题描述
我目前正在努力了解如何以适当的方式与 mayavi 渲染的场景进行交互。
我有一个由函数points3d()绘制的激光雷达点云,现在我在点云之间的汽车周围另外设置了一个边界框,我想尽快更改框内点的颜色当我将鼠标悬停在边界框上时。你能告诉我如何选择 bbox 内的点并改变它们的颜色吗?
我的第二个问题是,如何同时在 3d 视图和鸟瞰图中显示点云的相同场景?
非常感谢 :]
解决方案
我找到了关于颜色问题的解决方案——我不知道这是否是最佳实践。但我仍然需要帮助来确定边界框内的点。我还想创建一个 gui,使用户能够修改边界框的大小和方向。[但那是另一个话题]
import numpy as np
from mayavi.mlab import draw, points3d
from tvtk.api import tvtk
# Primitives
N = 3000 # Number of points
ones = np.ones(N) #np.hstack((np.tile(np.array([1]), int(N/2)).T, np.tile(np.array([4000]), int(N/2)).T))
scalars = ones #np.arange(N) # Key point: set an integer for each point
# Define color table (including alpha), which must be uint8 and [0,255]
colors = np.vstack((np.tile(np.array([[255],[255],[0]]), int(N/2)).T, np.tile(np.array([[0],[0],[255]]), int(N/2)).T))
# Define coordinates and points
x, y, z = (np.random.random((N, 3))*255).astype(np.uint8).T # Assign x, y, z values to match color
pts = points3d(x, y, z, scale_factor=10) # Create points
#pts.glyph.color_mode = 'color_by_vector' # Color by scalar
# Set look-up table and redraw
#pts.module_manager.scalar_lut_manager.lut.table = colors
pts.glyph.scale_mode = 'scale_by_vector'
sc=tvtk.UnsignedCharArray()
sc.from_array(colors)
pts.mlab_source.dataset.point_data.scalars = sc
draw()
推荐阅读
- arrays - 具有序数和时间的 Postgresql 不嵌套
- spring-boot - 使用 Spring Boot 和 Thymeleaf 时如何调试 404 错误?
- c++ - 为什么 clang-tidy 的 deadcode.DeadStores 会在 RAII 使用 reference_wrapper 的情况下引发警告?
- java - 即使 Workspace 解析不起作用,如何让 Eclipse 使用 maven 项目?
- python - 有条件地检查没有给出我期望的行为的字符串
- javascript - 循环和条件检查
- mapbox - Mapbox:更新自定义图层绘制属性
- algorithm - 具有正交边的多边形内的最远点(凸面或凹面或有孔)
- php - 如果我没有登录 wordpress 主题,page.php 不显示菜单
- html - 卡在我的页脚页面的响应性