我有一个Traits和Mayavi脚本,它提供了一个mlab场景和几个特征编辑器。编辑器通过调用我的绘图方法来影响surface
,quiver3d
和图例(标量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)
我的surface
和quiver3d
调用分别返回mayavi.modules.surface.Surface
和mayavi.modules.vectors.Vectors
个对象。 Surface和LUTManager报告没有mlab_source:AttributeError: 'Surface'/'LUTManager' object has no attribute 'mlab_source'
。 Quiver3d报告mayavi.tools.sources.MGlyphSource
1)如何更改surface
和scalar 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>
答案 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
。