2013-06-12 9 views
7

में लॉकिंग कैमरा मैं मायावी में डेटाफाइल के अनुक्रम के साथ एक एनीमेशन बनाने की कोशिश कर रहा हूं। दुर्भाग्यवश मैंने देखा है कि कैमरा लॉक नहीं होता है (यह ज़ूमिंग और ज़ूम आउट कर रहा है)। मुझे लगता है कि यह हो रहा है क्योंकि मेरे जाल का जेड componrnt बदल रहा है और मायावी तराजू फिर से शुरू करने की कोशिश कर रहा है।मायावी

मैं इसे कैसे ठीक कर सकता हूं? enter image description here enter image description here enter image description here

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

उत्तर

1

मैं वास्तव में अपने प्लॉट में समस्या नहीं दिख रहा है लेकिन डालने के अपने दृष्टिकोण प्रत्येक साजिश रचने उदाहरण के बाद दृश्य पुनः सेट करने:

mlab.view(azimuth=45, elevation=60, distance=0.01, focalpoint=(0,0,0)) 
सीधे अपने mlab.savefig ऊपर

callwithin अपने पाश के लिए ।

4

किसी भी व्यक्ति के लिए अभी भी इसमें रुचि रखने के लिए, आप इस संदर्भ में जो भी काम कर रहे हैं उसे लपेटने का प्रयास कर सकते हैं, जो प्रतिपादन को अक्षम कर देगा और संदर्भ के बाहर disable_render मूल्य और कैमरा दृश्यों को उनके मूल राज्यों में वापस कर देगा।

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

तुम सिर्फ अपने जाल आदेश में vmin और VMAX समारोह इस्तेमाल कर सकते हैं, अगर यू ऐसा पैमाने अपने डेटा और अपने कैमरे के साथ नहीं बदलेगा रहना चाहिए जहां:

with constant_camera_view(): 
    do_stuff() 

यहाँ वर्ग है यह है। इस तरह:

f = mlab.mesh(x, y, -Mz/1.5,representation = 'wireframe',vmin='''some value''',vmax='''some value''',opacity=0.3,line_width=1) 
संबंधित मुद्दे