为了账号安全,请及时绑定邮箱和手机立即绑定

Mayavi - 鼠标悬停交互并从不同角度绘制相同场景

Mayavi - 鼠标悬停交互并从不同角度绘制相同场景

30秒到达战场 2021-12-16 14:52:55
我目前正在努力了解如何以适当的方式与 Mayavi 渲染场景进行交互。我有一个由函数points3d()绘制的激光雷达点云,现在我在点云之间的汽车周围另外设置了一个边界框,我想尽快改变框内点的颜色当我将鼠标悬停在边界框上时。你能告诉我如何只选择 bbox 内的点并改变它们的颜色吗?我的第二个问题是,如何同时在 3d 视图和鸟瞰图中显示相同的点云场景?非常感谢你 :]
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

我找到了有关颜色问题的解决方案 - 我不知道这是否是最佳实践。但是我仍然需要帮助来确定边界框内的点。我还想创建一个 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()


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信