python PYQT框體中顯示obj模型檔案

2021-10-03 17:19:57 字數 3551 閱讀 6255

#視窗基礎屬性

defbasic

(self)

:#設定標題,大小,圖示

self.setwindowtitle(

"gt1"

) self.resize(

1100

,650

) self.setwindowicon(qicon(

"./image/gt1.png"))

defkuangti

(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

defcreatobj

(self,ren)

:# create source

filename =

"f:\dvpycode\pyqtgl\\0pengl\\1.obj"

reader = vtk.vtkobjreader(

) reader.setfilename(filename)

reader.update(

)) ))

# create an actor

actor = vtk.vtkactor(

)

ren.addactor(actor)

ren.resetcamera(

)if __name__ ==

"__main__"

: win = vtkmw(

) win.show(

)#win.iren.initialize()

))引用:

vtk對obj檔案的讀取

感謝feifei97

特別感謝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模型。長舒口氣。

————————————————————————————

好多人問主程式,主程式裡太亂了許多其他功能就不發了。

我大概說一下有用的部分。

from vtk1 import vtkmw as vtkmw

class

mainwindow

(qmainwindow, ui_mainwindow)

:def

__init__

(self, parent=

none):

super

(mainwindow, self)

.__init__(parent)

self.setupui(self)

self.gridlayout_1 = qgridlayout(self.groupbox)

# 繼承容器groupbox

self.myvtk=vtkmw(

) self.gridlayout_1.addwidget(self.myvtk,0,

1)

雖然是一些片段,應該就說清楚了如何呼叫並嵌入。

希望對大家有所幫助。

怎麼在mediapipe中只保留框體資訊

發現 mediapipe 框架 顯示人臉框體這塊,會出現 face,相似度 還有5個小圓圈 等資訊,於是想著 去掉這些顯示,只留下框體 恩,是其他不顯示 那麼位置 又在 呢?對於 人臉檢測 demo 而言 檔案mediapipe master mediapipe util annotation re...

VC 6 0執行緒中建立非模態對話方塊體會

關於 執行緒中建立非模態對話方塊 我試了很多方法,但是結果都是令人失望沒有成功。但是經過我不懈的嘗試終於找到了乙個自己的方法,我不知道是否是標準的方法。估計有很多人都遇到過 執行緒中建立非模態對話方塊 的難題,所以我把我的方法拿出來供大家共同學習交流之用。主要以下方法針對基於對話方塊的程式。defi...

WebBrowser中顯示亂碼

最近用webbrowser巢狀網頁,同時不影響巢狀的頁面裡面的操作,並往網頁裡面傳引數,其中引數中又中文。但是在網頁裡面顯示引數時卻顯示亂碼。於是用convert.tobase64string encoding.utf8.getbytes paras 對要傳的引數進行序列化編碼。然後用encodin...