我有一个性状和Mayavi脚本,它显示了一个mlab场景和几个性状编辑器。编辑器通过调用我的绘图方法来影响surface
、quiver3d
和图例(标量LUT管理器)中显示的数据。每次更改都会触发一个清晰的图形并重新绘制。
借鉴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)
我的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.
,这让我感到困惑,因为我使用了六值初始化器。
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的结果。工具套件文档是最新的吗?
*自我。情节,自我。表面和自我。箭袋被声明为variable = Instance(PipelineBase)
。PipelineBase
是从mayavi.core.api
导入的
根据您的评论:
surface
中没有引用mlab源代码的原因是没有mlab源代码。您的模块仅由原始的vtk源组成,mayavi非常乐意将其完全呈现。然而,你保留了对PolyData的引用,所以你可以从中编辑标量。(你也可以使用mlab.triangular_mesh
,它很可能做你想要的,同时引入一个中间的TriangularMeshSource来控制vtk PolyData)。
您可以使用surface.module_manager.scalar_lut_manager
获得LUT。
你也应该能够得到mlab级别的源向量在评论中,我不知道是什么问题,如果仍然有一个。使用traitsui应该不会产生影响——问题可能是mayavi和对象模型之间的冲突。尝试将mayavi对象的trait类型设置为Any
。