2014-08-28 51 views
0

我正在做一個帶有VTK python的動畫程序,我不明白如何停止或暫停 這個動畫。有人請告訴我如何停止這個計時器。現在我的動畫 繼續無限的時間,我試圖把我的代碼放在循環中,但它沒有停止。 請注意我的下面的代碼和有人分享一些想法。如何停止VTK定時器

行代碼:

renderWindowInteractor.AddObserver('TimerEvent', cb.execute) 
timerId = renderWindowInteractor.CreateRepeatingTimer(10); 

詳細的代碼行:

class vtkTimerCallback(): 

def __init__(self): 

    self.timer_count = 0 
    self.timerCycle=0 

def execute(self,obj,event): 

    self.timerCycle+=1 
    if self.timerCycle==3:  
     self.timerCycle=0  
     for A in range(3): 
      for B in range(2): 
       for C in range(1): 
        self.actor.SetPosition(A,1,C); 
        iren = obj 
        iren.GetRenderWindow().Render() 
        self.timer_count += 1  
    else:   

     for X in range(1): 
      for Y in range(2): 
       for Z in range(3): 
        self.actor.SetPosition(1,Y,Z); 
        iren = obj 
        iren.GetRenderWindow().Render() 
        self.timer_count += 1 



class Cone(): 


def animation(self,obj_renwin): 

    renderwininstance=obj_renwin    
    renderWindowInteractor = vtk.vtkRenderWindowInteractor() 
    renderWindowInteractor.SetRenderWindow(obj_renwin.renwin) 
    obj_renwin.renwin.Render() 
    renderWindowInteractor.Initialize()     

    cb = vtkTimerCallback() 
    cb.actor = obj_renwin.actor 
    for X in range(2): 
     print "animation time is" + str(X) 
     renderWindowInteractor.AddObserver('TimerEvent', cb.execute)  
     timerId = renderWindowInteractor.CreateRepeatingTimer(10); 


cone_Obj = Cone() 

回答

0

我猜你使用計時器進入vtkRenderWindowInteractor對象,有你啓動定時器:

renderWindowInteractor->CreateRepeatingTimer(100); 

所以,vtkRenderWindowInteractor可以暫停,停止計時:

在這裏,你會看到一些細節: http://www.vtk.org/doc/nightly/html/classvtkRenderWindowInteractor.html#a7ef06e3e7c8cff5767c3b0d328934f55

+0

@flaiv,這工作,但問題是,如果我想再次啓動計時動畫功能的程序當我點擊動畫按鈕時崩潰,得到像這樣的錯誤消息「Python exe已停止工作」。該錯誤正在觸及以下行self.renderWindowInteractor.SetRenderWindow(obj_renwin.renwin)。你有什麼想法,或有任何播放和暫停的示例動畫程序。如果你有,請分享一下嗎? – 2014-08-31 18:10:19

+0

不幸的是,我從來沒有在VTK的定時器工作。我已經看到,它不是「StopTimer」方法,它告訴我可以通過其他方法或通過人工方式(如ResetTimer)或其他方法停止定時器... VTK是一個好的庫,但有這樣的更少的人可以給這麼多問題一些答案...... :(我是一個在VTK工作了幾周的人......我想幫助你很多,但我不能......其他來源可能是wiki的例子,但他們是如此有限,almoust不能用於實際應用... – flaviu2 2014-09-01 10:42:15

+0

@flaiv,沒問題,感謝您幫助我 – 2014-09-01 10:50:48