如何在VTK中暂停和重启动画

1 投票
1 回答
1485 浏览
提问于 2025-04-19 02:42

我正在尝试用VTK做一个动画程序,想让VTK对象动起来。但是我在暂停动画和重新开始动画时遇到了问题。我最近了解到可以停止VTK的计时器,但当我再次点击动画按钮启动时,程序就崩溃了,出现了以下错误。我只有一个线索,就是下面这行代码导致了崩溃,这行代码在第一次点击动画按钮时能正常工作,但在第二次点击时就失败了!第二个函数“animation_Stop”是我尝试通过销毁整个函数来停止动画,所以我希望这样可以避免程序崩溃,但结果也是失败了!

错误信息:

python.exe 已停止工作

出错的代码行:

self.renderWindowInteractor.SetRenderWindow(obj_renwin.renwin)

请注意我的动画详细代码,有人能帮我在VTK Python中实现动画的暂停和重新启动吗?

def animation(self,obj_renwin,X):

    if X==1: 

           print "start or restart animation"

           self.renderWindowInteractor = vtk.vtkRenderWindowInteractor()      
           objRen=self.renderWindowInteractor.GetRenderWindow()                   
           self.renderWindowInteractor.SetRenderWindow(obj_renwin.renwin)                         
           obj_renwin.renwin.Render()
           self.renderWindowInteractor.Initialize()
           cb = vtkTimerCallback()
           cb.actor = obj_renwin.actor
           self.renderWindowInteractor.AddObserver('TimerEvent', cb.execute)
           self.timerId = self.renderWindowInteractor.CreateRepeatingTimer(5);


    if X==2:

        print "stop animation"                       
        self.renderWindowInteractor.DestroyTimer(self.timerId)



def animation_Stop(self,obj_renwin):

    print "stop animation"        
    #self.animation(obj_renwin,1).destroy()
    del (ConeRender.Cone.animation)

1 个回答

0

如果你这样启动vtkTimer:

vtkSmartPointer<vtkTimerCallback> cb = 
vtkSmartPointer<vtkTimerCallback>::New();
interactor->AddObserver(vtkCommand::TimerEvent, cb);

你可能会考虑用

vtkCommand::EndInteraction

来停止或暂停计时器

interactor->InvokeEvent(vtkCommand::TimerEvent, cb);

[这只是个想法,你可以试试看] ... :)

撰写回答