2013-01-11 56 views
9

私は粒子の軌道のビデオを作りようとしています。しかし、どういうわけか私のシーンは決して更新されません。ここには非常に簡単な例があります: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() 

このスクリプトを実行すると、2つのポイントとアニメーションGUIが表示されたウィンドウが表示されます。また、「Updating Scene ...」という連続したストリームを端末に出力します。しかし、シーンは全く動きを示さない。

私は間違っていますか?

のPython 2.7、Mayavi 4.1、VTK 5.8

+0

私はMayaviも使い慣れています。各サイクルをクリアするためにmlab.clf(figure = mayavi_scene)を使ってみましたか? – Griff

答えて

8

だけに変更します。...

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

を...

あなたもdocumentationmlab_source.setによると、リフレッシュを保証し、f.scene.render()を必要としません。

また、データのshapeは変更されないため、mlab_source.resetを使用する必要はありません。

私もテストして正常に動作します。

1

あなたはmlab_source.resetを試みたことがありますか? x、y、z配列の長さが変更されても機能します。

場合によっては、 plt.mlab_source.reset(x=x,y=y,z=z)となります。

関連する問題