现已对python的基础知识和PYQT5基本掌握了,现准备进入三维绘图领域进行学习,学习过程中会将总结的一些代码陆续发布出来,同初学者一同进步提高。
参考网上的相关资源,作了一个较完整的可以结合QT5和vtk库进行绘制点、三角网线、网格线、面的三维绘图示例,运行界面如下:(如没有安装vtk包,需安装:pip install vtk)
代码如下:
#vkt示例:画一示例球体,学习用VKT画出点,线,面、网格线的方法,同时将vkt同QT5/6的窗体控件绑定显示
import sys
import numpy as np
import vtkmodules.all as vtk
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5 import QtWidgets, QtCore
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle('QT5+vtk画点、线、面、网格')
# 创建VTK渲染窗口和相关组件
self.ren = vtk.vtkRenderer() #渲染器,所有类型的最终数据要加入同一渲染器中才行
self.actor_pan = vtk.vtkActor() #面的角色变量(如重新设置颜色时有用,应设置成类全局变量)
self.actor_line = vtk.vtkActor() #线的角色变量(如重新设置颜色时有用,应设置成类全局变量)
self.actor_point = vtk.vtkActor() #点的角色变量(如重新设置颜色时有用,应设置成类全局变量)
self.actor_grid = vtk.vtkActor() #网格线的角色变量(如重新设置颜色时有用,应设置成类全局变量)
self.vtkWidget = QVTKRenderWindowInteractor(self) #显示窗口绑定到QT的窗口中
self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
self.setCentralWidget(self.vtkWidget)
# 创建一个球体示例
sphere_source = vtk.vtkSphereSource()
sphere_source.SetRadius(10.) # 设置球体半径
sphere_source.SetCenter(0.0, 0.0, 0.0) # 设置球体中心
sphere_source.Update() # 更新球体源以生成几何数据
self.bUpdate=False #开始时更改微调按纽时是否刷新窗体
bPan=True #是否显示面
bLine=True #是否显示面上的三角网
bPoint=True #是否显示随机画的点云
bgrid=True #是否显示指定范围画出的网络线
if(bPan):
mapper_pan = vtk.vtkPolyDataMapper() #面渲染器:应分别设置
mapper_pan.SetInputConnection(sphere_source.GetOutputPort())
actor_pan = vtk.vtkActor() #面角色,一般用类全局变量self.actor,仅作为示例
self.actor=actor_pan #类全局角色同面角色,好在类其他位置来处理颜色等