我有一个速度场和一个密度分布,由vx
、vy
、vz
和巢穴定义。所有这些变量都是 3D 数组,例如
vx.shape
(256,256,256)
vy
、vz
和dens
也是如此。
流命令工作正常,例如
fl = flow(vx,vy,vz, seedtype='point', integration_direction='both', scalars=dens)
我可以可视化场线。现在,要沿线检索位置 x,y,z 处的vx,vy,vz
和dens
的值,我过去所做的(我想几年前使用以前版本的 mayavi(是
dataset = fl.outputs[0]
然后
x, y, z = dataset.points.to_array().T
densstream = np.array(dataset.point_data.get_array(0))
vstream = np.array(dataset.point_data.get_array(1))
但是跑步
x, y, z = dataset.points.to_array().T
我收到以下错误:
属性错误:"算法输出"对象没有属性"点"。
打字
dataset
我得到
<tvtk.tvtk_classes.algorithm_output.AlgorithmOutput at 0x1132917d0>
我使用的是mac OS 10.12.6,Python 2.7.15和IPython 5.5.0。 你能帮帮我吗?
干杯
较新版本的mayavi修改了某些tvtk对象的输出端口,从旧版本的tvtk.obj.output
到tvtk_obj.output_port
。后者是 tvtk 的algorithm_output子类,不包含点数据,这是错误消息的原因。
在mayavi/modules/streamline.py中,方法_streamline_type_changed(self,value(: 通过configure_outputs(self, st)
更新流线型对象的输出端口,这是一种 TVTK/common.py 的方法,但连接被定向到self.stream_tracer.output_port
而不是self.stream_tracer.output
。后者是正确的poly_data子类,并且确实包含沿流线的点数据。 所以治疗方法很简单:
dataset = fl.stream_tracer.output
顺便说一下,我也尝试将函数调用修改为configure_outputs(self, st.output)
,尽管fl.outputs[0]
已正确连接到poly_data输出,但流线不再显示在 mayavi 场景中。