1

我试图在 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) 方向。

有没有办法做到这一点?

4

2 回答 2

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)

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

于 2017-01-09T13:38:11.490 回答
0

如果您在显示您想要的表面时遇到问题,请尝试使用 的参数contours,如果您可以使它们在您想要显示的表面周围足够紧,您应该得到您想要的..

如果您可以发布更多{non,}工作示例,我可能会提供帮助

于 2013-11-18T21:55:08.297 回答