Mayavi2:从data_set_clipper过滤器进行 pythonic 访问



我已经对我的点云数据应用了一个矩形棱镜过滤器,并希望访问棱镜中包含的数据。这似乎应该很简单,而且可能是。

我已经创建了剪刀并对其进行了调整

p3d = view_ply_file('data/my_file.ply')  #returns mayavi.mlab.points3d() instance
clip = mlab.pipeline.data_set_clipper(p3d)
#... manual interactive GUI adjustment
clip.outputs[0].points #? is empty.

如何检索包含的点?我目前正在研究底层的 vtk API,但也许具有 VTK 或 mayavi 经验的人有一些见解。

在发现 VTK 文档比 mayavi 文档更有用之后,我想出了一种方法来从剪报棱镜中提取角落。仍然需要进行面中点测试。更新:想通了其余的。可能有很多优化方法 - 这是最天真的解决方案。希望有人能从中受益。

def get_clip_corners(clip):
    hack_mesh = tvtk.api.tvtk.PolyData()
    clip.widget.widget._vtk_obj.GetPolyData(hack_mesh._vtk_obj)
    corners = hack_mesh.points.to_array()[:8, :]
    return corners, hack_mesh
def get_inside_mask(sep, data):
    is_in = numpy.zeros((data.shape[0],), dtype = numpy.bool)
    for (di, d) in enumerate(data):
        di_in = sep.is_inside_object(d[0], d[1], d[2])
        is_in[di] = di_in
    return is_in
def extract_points_inside_clip(clip, data):
    corners, mesh = get_clip_corners(clip)
    sep = tvtk.api.tvtk.SelectEnclosedPoints()
    sep.initialize(mesh)
    is_in = get_inside_mask(sep, data)
    data_in_box = data[is_in, :]
    return data_in_box

相关内容

  • 没有找到相关文章

最新更新