python PYQT框体中显示obj模型文件

python PYQT框体中显示obj模型文件_第1张图片

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模型。长舒口气。

你可能感兴趣的:(python,pyqt)