如何在VTK中暂停和重启动画
我正在尝试用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);
[这只是个想法,你可以试试看] ... :)