from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtOpenGL import QGLWidget
import sys
from vtk import *
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
class vtkMW(QMainWindow):
"""docstring for Mainwindow"""
def __init__(self, parent = None):
super(vtkMW,self).__init__(parent)
self.basic()
vll = self.kuangti()
self.setCentralWidget(vll)
#窗口基础属性
def basic(self):
#设置标题,大小,图标
self.setWindowTitle("GT1")
self.resize(1100,650)
self.setWindowIcon(QIcon("./image/Gt1.png"))
def kuangti(self):
frame = QFrame()
vl = QVBoxLayout()
vtkWidget = QVTKRenderWindowInteractor()
vl.addWidget(vtkWidget)
#vl.setContentsMargins(0,0,0,0)
ren = vtk.vtkRenderer()
ren.SetBackground(0.01, 0.2, 0.01)
#renderer.GetActiveCamera().SetPosition() #设置视点位置
#renderer.GetActiveCamera().SetViewUp(0, 1, 0) #设置视点方向
vtkWidget.GetRenderWindow().AddRenderer(ren)
self.iren = vtkWidget.GetRenderWindow().GetInteractor()
self.Creatobj(ren)
self.iren.Initialize()
frame.setLayout(vl)
return frame
def Creatobj(self,ren):
# Create source
filename = "F:\DvPYcode\pyqtgl\\0PENGL\\1.obj"
reader = vtk.vtkOBJReader()
reader.SetFileName(filename)
reader.Update()
# Create a mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
# Create an actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren.AddActor(actor)
ren.ResetCamera()
if __name__ == "__main__":
app = QApplication(sys.argv)
win = vtkMW()
win.show()
#win.iren.Initialize()
sys.exit(app.exec_())
引用:
vtk对obj文件的读取
https://www.cnblogs.com/flyuz/p/9497120.html
感谢feifei97
https://blog.csdn.net/ydsf521/article/details/80689038
特别感谢ydsf521。
在这次任务中想把obj模型显示镶嵌进PYQT GUI的过程当中,两个思路都是看他的文章,一个是qopengl 一个是vtk。qopengl那篇也给了我想当大的启发。
结合其他文章运用qopenglwidget和pygame协同,查询大量的资料应该是不行,pygame会占用进程,pyqt就没办法工作了。至于怎么解决我暂时是因为工作需要没办法深究了。这方面资料也显得比较少。
对我来说在opengl的弯路上一意孤行了好几周。今天的vtk真是豁然开朗。
特别是obj的读取。vtk自己居然有一个类直接读。免去了opengl对obj文件写入的代码段。
(当然了具体适用性还没有继续发掘,今天才干到在PYQT里显示obj模型)
从去年9月份开始学习python基础语法
面向对象的方法、文件的打开读取等等
然后研究GUI 从tkinter wxpython 到 pyqt
数据从csv文件到sqlite
再研究 数据的二维图表表达 matlib matplotlib
到后来obj模型的显示
外行人也算经历了好几个瓶颈。真的感谢网上得来的各种资料。
弯路实在是走了太多,我也不知道为什么,可能是因为就我自己一个人操作没得讨论,再加上跨专业了,没有专业知识基础。
在网上找资料的过程中发现这个事情用C++应该更合适一些。有更多的资料支持。
当初选了python学习可能首先就不太合适,相比C++,py的资料真的太少了。
好多东西baidu bing查都查不到。
带上过年和疫情,obj显示的问题卡了有月把了,今天好歹显示成功了obj模型。长舒口气。