Reputation:
I am writing a code that visualization of four glyphs moving through space. At the moment the the mayavi window shows the the initial positions, but wont update to the next position.
#Library decleration
import numpy as np
from mayavi.mlab import *
....
#Inputting the intital positions into the storage vector
storage_position[0].append(v_1.theta)
storage_position[1].append(v_1.phi)
#Calculating the rest of the positions using the symmetry given
storage_position = Sym(storage_position)
#Plotting the intitial positions
x_coord = x_trans( storage_position)
y_coord = y_trans(storage_position)
z_coord = z_trans( storage_position)
plt = points3d(x_coord, y_coord, z_coord)
msplt = plt.mlab_source
@mlab.animate(delay=100)
def anim(storage_position, storage_vort, no_vort ,x_coord, y_coord, z_coord):
f = mlab.gcf()
while True:
#for i in range(10):
#Working out the hamiltonian
#Hami(storage_position, storage_vort, 1 - 1, no_vort-1)
transfer_vector = method(storage_position, storage_vort, 1 - 1, no_vort-1)
storage_position[0].append(transfer_vector[0])
storage_position[1].append(transfer_vector[1])
storage_position = Sym(storage_position)
x_coord = x_trans( storage_position)
y_coord = y_trans(storage_position)
z_coord = z_trans( storage_position)
msplt.set(x_coord = x_coord, y_coord = y_coord, z_coord = z_coord)
yield
anim(storage_position, storage_vort, no_vort - 1,x_coord, y_coord, z_coord)
mlab.show()
x_coord etc are numpy vectors that stores the x coordinates for the four glyphs. x_trans etc are functions that update each vector with the new coordinates for each step of the animation.
Upvotes: 3
Views: 1721
Reputation: 30561
Trying replacing this line:
msplt.set(x_coord = x_coord, y_coord = y_coord, z_coord = z_coord)
with this:
msplt.set(x=x_coord, y=y_coord, z=z_coord)
The point set data source (which should be an object of type MGlyphSource
) knows about x
, y
and z
, but x_coord
, y_coord
and z_coord
aren't supported as keyword arguments.
Here's a complete working example to get you started:
from mayavi import mlab
from numpy import array, cos, sin, cos
x_coord = array([0.0, 1.0, 0.0, -1.0])
y_coord = array([1.0, 0.0, -1.0, 0.0])
z_coord = array([0.2, -0.2, 0.2, -0.2])
plt = mlab.points3d(x_coord, y_coord, z_coord)
msplt = plt.mlab_source
@mlab.animate(delay=100)
def anim():
angle = 0.0
while True:
x_coord = array([sin(angle), cos(angle), -sin(angle), -cos(angle)])
y_coord = array([cos(angle), -sin(angle), -cos(angle), sin(angle)])
msplt.set(x=x_coord, y=y_coord)
yield
angle += 0.1
anim()
mlab.show()
Note that when you run this, you'll probably see a lot of warnings printed to the console. Ignore them: they're harmless and a known issue.
Upvotes: 4