1

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

Mlab 交互式对话框示例中学习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)

mysurfacequiver3d调用的返回分别是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) 如何正确更改箭袋的数据/来源?

当我尝试更改 quiver 的值时,我得到了TraitError: Cannot set the undefined 'u' attribute of a 'Vectors' object.This 让我感到困惑,因为我使用了六值初始化程序

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返回 amayavi.modules.surface.Surface并且它的mlab_source对象是 a 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

4

1 回答 1

2

根据您的评论:

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

您可以使用surface.module_manager.scalar_lut_manager.

而且您还应该能够像评论中那样获得向量的 mlab 级别源,如果仍然存在,我不知道有什么问题。使用 traitsui 应该不会产生影响——问题可能是 mayavi 和您的对象模型之间的冲突。尝试将 mayavi 对象的特征类型设置为Any.

于 2014-06-04T22:45:42.783 回答