9
votes

appareil de verrouillage dans mayavi

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? entrer dans la description d'image ici entrer dans la description d'image ici entrer image description ici 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()


0 commentaires

3 Réponses :


4
votes

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))


0 commentaires

5
votes

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)


1 commentaires

Merci pour cela - sachant que la caméra est accessible à mlab.gcf (). Scène.Camera 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.



1
votes

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: xxx


0 commentaires