改变mlab quiver3d&冲浪数据源而不清除traits脚本中的数字

时间:2014-06-03 18:18:38

标签: python enthought mayavi traitsui mayavi.mlab

我有一个Traits和Mayavi脚本,它提供了一个mlab场景和几个特征编辑器。编辑器通过调用我的绘图方法来影响surfacequiver3d和图例(标量LUT管理器)中显示的数据。每次更改都会触发一个清晰的数字并重新绘制。

Mlab interactive dialog example学习plot3d *使用mlab_source.set更改数据而不清除数字并重新绘制。在update_plot()中:

if self.plot is None:
    self.plot = self.scene.mlab.plot3d(x, y, z, t, tube_radius=0.025, colormap='Spectral')
else:
    self.plot.mlab_source.set(x=x, y=y, z=z, scalars=t)

我的surfacequiver3d调用分别返回mayavi.modules.surface.Surfacemayavi.modules.vectors.Vectors个对象。 Surface和LUTManager报告没有mlab_source:AttributeError: 'Surface'/'LUTManager' object has no attribute 'mlab_source'。 Quiver3d报告mayavi.tools.sources.MGlyphSource

1)如何更改surfacescalar LUTManager中的数据/来源?

2)如何正确更改箭袋的数据/来源?

当我尝试更改箭袋的值时,我得到TraitError: Cannot set the undefined 'u' attribute of a 'Vectors' object.这让我感到困惑,因为我使用了six-value initializer

if self.quiver is None:
    self.quiver = self.scene.mlab.quiver3d(xyz[:,0], xyz[:,1], xyz[:,2],
        velocity[:,0], velocity[:,1], velocity[:,2], 
        figure=self.scene.mayavi_scene, scale_factor = self.scale)
else:
    self.quiver.mlab_source.set(x = xyz[:,0], y = xyz[:,1], z = xyz[:,2],
            u = velocity[:,0], v = velocity[:,1], w = velocity[:,2])

在示例中,plot3d返回mayavi.modules.surface.Surface,其mlab_source对象为mayavi.tools.sources.MLineSource。搜索MLineSource的文档毫无结果,但外部产生Enthought Tool Suite 3.2结果。 Tool Suite文档是最新的吗?

* self.plot,self.surface和self.quiver声明为variable = Instance(PipelineBase)PipelineBase是从mayavi.core.api导入的。{/ p>

1 个答案:

答案 0 :(得分:2)

根据您的意见:

surface中没有引用mlab源的原因是因为没有mlab源。你的模块只包含一个原始vtk源,mayavi非常乐意渲染纯粹的。但是,您保留对PolyData的引用,因此您可以从中编辑标量。 (你也可以使用mlab.triangular_mesh,它很可能会在你引入干扰的TriangularMeshSource来控制vtk PolyData时做你想做的事。)

您可以使用surface.module_manager.scalar_lut_manager进入LUT。

你还应该能够在评论中找到载体的mlab级别来源,如果还有一个,我也不知道问题是什么。使用traitsui不应该有效 - 问题可能是mayavi和你的对象模型之间的冲突。尝试将mayavi对象的特征类型设置为Any