Je suis en train de faire une animation avec une séquence de fichiers de données dans mayavi. Malheureusement, je l'ai remarqué que la caméra ne se verrouille pas (il est le zoom et un zoom arrière). Je pense que cela se produit parce que le Z componrnt de mon maillage est en train de changer et mayavi tente d'échelles Recalculer.
Comment puis-je résoudre ce problème?
p>
import numpy from mayavi import mlab mlab.figure(size = (1024,768),bgcolor = (1,1,1)) mlab.view(azimuth=45, elevation=60, distance=0.01, focalpoint=(0,0,0)) #mlab.move(forward=23, right=32, up=12) for i in range(8240,8243): n=numpy.arange(10,400,20) k=numpy.arange(10,400,20) [x,y] = numpy.meshgrid(k,n) z=numpy.zeros((20,20)) z[:] = 5 M = numpy.loadtxt('B:\\Dropbox\\Master.Diploma\\presentation\\movie\\1disk_j9.5xyz\\'+'{0:05}'.format(i)+'.txt') Mx = M[:,0]; My = M[:,1]; Mz = M[:,2] Mx = Mx.reshape(20,20); My = My.reshape(20,20); Mz = Mz.reshape(20,20); s = mlab.quiver3d(x,y,z,Mx, My, -Mz, mode="cone",resolution=40,scale_factor=0.016,color = (0.8,0.8,0.01)) Mz = numpy.loadtxt('B:\\Dropbox\\Master.Diploma\\presentation\\movie\\Mzi\\' + '{0:05}'.format(i) + '.txt') n=numpy.arange(2.5,400,2) k=numpy.arange(2.5,400,2) [x,y] = numpy.meshgrid(k,n) f = mlab.mesh(x, y, -Mz/1.5,representation = 'wireframe',opacity=0.3,line_width=1) mlab.savefig('B:\\Dropbox\\Master.Diploma\\presentation\\movie\\figs\\'+'{0:05}'.format(i)+'.png') mlab.clf() #mlab.savefig('B:\\Dropbox\\Master.Diploma\\figures\\vortex.png') print(i) mlab.show()
3 Réponses :
Je ne vois pas vraiment le problème dans votre intrigue, mais pour réinitialiser la vue après chaque instance de traçage insérer votre point de vue:
mlab.view(azimuth=45, elevation=60, distance=0.01, focalpoint=(0,0,0))
pour ceux qui sont encore intéressé, vous pouvez essayer emballage Quelque soit le travail que vous faites dans ce contexte, ce qui désactive le rendu et retourner le disable_render code> valeur et des vues de la caméra à leur état d'origine après le contexte sorties.
class constant_camera_view(object):
def __init__(self):
pass
def __enter__(self):
self.orig_no_render = mlab.gcf().scene.disable_render
if not self.orig_no_render:
mlab.gcf().scene.disable_render = True
cc = mlab.gcf().scene.camera
self.orig_pos = cc.position
self.orig_fp = cc.focal_point
self.orig_view_angle = cc.view_angle
self.orig_view_up = cc.view_up
self.orig_clipping_range = cc.clipping_range
def __exit__(self, t, val, trace):
cc = mlab.gcf().scene.camera
cc.position = self.orig_pos
cc.focal_point = self.orig_fp
cc.view_angle = self.orig_view_angle
cc.view_up = self.orig_view_up
cc.clipping_range = self.orig_clipping_range
if not self.orig_no_render:
mlab.gcf().scene.disable_render = False
if t != None:
print t, val, trace
ipdb.post_mortem(trace)
Merci pour cela - sachant que la caméra est accessible à mlab.gcf (). Scène.Camera Code> Permettez-moi de trouver comment utiliser la position d'utilisation de la caméra et du point focal d'un enregistrement Mayavi d'un "Live" Réglage de la caméra pour régler la caméra programmatique.
Vous pouvez simplement utiliser la fonction VMIN et Vmax de votre commande maille, si vous le faites pour que la balance ne change pas avec vos données et que votre appareil photo devrait rester là où il se trouve.
Comme ceci: