VTK在wxpython中的显示
推荐官方的学习网站,绝大部分内容都可以在网站上找到。
一 前言
目标是让VTK的画布显示在wx的panel上。
首先要了解VTK的工作模式。具体的内容可以查相关资料。我在这里简单说一下。
要想让VTK显示东西,首先要有① Data,不管是自己创建还是导入文件的,都要有vtkPolyData。然后要将Data绑定到一个②Mapper上,对应的是vtkPolyDataMapper。接着要将Mapper绑定到③Actor上,对应vtkActor。最后将Actor添加到④Render上,对应vtkRenderer。
要想画出现实的东西,要处理以上①②③④四个对象。
最后一个Render就是最后呈现的画面,这个画面要绑定到RenderWindow上Interactor,这里要在wx中的panel空间上显示,所以不能直接创建RenderWindow。
这里wx和vtk提供了一个接口,wxVTKRenderWindowInteractor,这个可以直接理解为创建了一个可以在wx中操作的Interactor,把render添加到这个Interactor中就可以显示了。
二 开始
直接上代码,其实非常简单。有过wxpython开发经验的话,应该很容易明白。
需要注意的是,一定要把wxVTKRenderWindowInteractor放到一个sizer里,否则不能随窗口改变大小。
wxVTKRenderWindowInteractor里面内置了绑定了很多事件,这一点很便于新手学习,当然也可以自己绑定事件。
class WxVTKScene(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
self.size = self.GetClientSize() # 获取父窗体尺寸
self.vtk_widget = wxVTKRenderWindowInteractor(self, -1, size=(self.size.width,self.size.height), flag=wx.EXPAND) # 创建VTK窗口
self.vtk_widget .SetPosition((0,