问题 动画mayavi points3d图


我正在尝试制作粒子轨迹的视频。但是,某种程度上我的场景永远不会更新这是一个非常简单的例子:

from __future__ import absolute_import, division, print_function
from mayavi import mlab
import numpy as np
import math

alpha = np.linspace(0, 2*math.pi, 100)  

xs = np.cos(alpha)
ys = np.sin(alpha)
zs = np.zeros_like(xs)

mlab.points3d(0,0,0)
plt = mlab.points3d(xs[:1], ys[:1], zs[:1])

@mlab.animate(delay=100)
def anim():
    f = mlab.gcf()
    while True:
        for (x, y, z) in zip(xs, ys, zs):
            print('Updating scene...')
            plt.mlab_source.x[0] = x
            plt.mlab_source.y[0] = y
            plt.mlab_source.z[0] = z
            f.scene.render()
            yield


anim()
mlab.show()

如果我运行此脚本,它会显示一个包含两个点和动画GUI的窗口。它还在终端上打印连续的“正在更新场景...”消息流。但是,场景根本不显示任何移动。

我究竟做错了什么?

Python 2.7,Mayavi 4.1,VTK 5.8


1484
2018-01-11 21:47


起源

我也是使用Mayavi的新手 - 您是否尝试过使用mlab.clf(figure = mayavi_scene)来清除每个周期的数字? - Griff


答案:


只需改为:

...

    for (x, y, z) in zip(xs, ys, zs):
        print('Updating scene...')
        plt.mlab_source.set(x=x, y=y, z=z)
        yield

...

你甚至都不需要 f.scene.render(), 根据 文件  mlab_source.set 保证刷新。

也是因为 shape 您的数据不会改变您不需要使用 mlab_source.reset

我也测试过并且工作正常。


9
2017-10-26 01:05





你试过mlab_source.reset吗?即使更改了x,y和z数组的长度,它也能工作。

在你的情况下,它将是: plt.mlab_source.reset(x=x,y=y,z=z)


1
2018-01-30 21:54