删除mayavi中iso_surface的一部分

时间:2013-10-07 14:33:53

标签: mayavi

我试图在mayavi的文档中找到一些提示而没有任何成功。

在复杂数据的可视化中,我想删除计算的iso_surface的一部分。 例如,我有一个类似

的代码
field =  mlab.pipeline.gaussian_splatter(data)
iso = mlab.pipeline.iso_surface(field, contours=[0.07])

我可以通过明确解释我的数据是通过像

这样的方式限制x,y或z来删除部分iso_surface
field.filter.model_bounds = array([-1.,  1., -1.,  1., -1., 1.])

但我无法找到解释这个任意定向平面的方法。例如,我想限制我的数据为(1,1,1)方向。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

您可以使用data_set_clipper  剪辑数据。限幅器是交互式的或非交互式的。我将以非交互式版本演示它:

fld = mlab.pipeline.scalar_field(data)
clip = mlab.pipeline.data_set_clipper(fld)
clip.widget.widget_mode='ImplicitPlane'
clip.widget.widget.enabled=0
clip.widget.widget.normal=(1,1,1)
clip.widget.widget.origin=(20,20,20) #(0,0,0) is not the centre but the corner
iso = mlab.pipeline.iso_surface(clip, contours=[0.07])

如果您想更频繁地剪辑,则必须将剪辑的数据放入另一个data_set_clippe

clip2=mlab.pipeline.data_set_clipper(clip)

但是,我对我的方法并不完全满意,因为它使用了大量资源。如果有人有更好的解决方案,我很乐意看到它。

答案 1 :(得分:0)

如果您在显示所需的表面时遇到问题,请尝试使用contours的参数进行游戏,如果您可以在要显示的表面周围使它们足够紧,则应该得到您想要的效果。 。

如果你可以发布更多的{non,}工作示例,我可以帮忙