Friday, April 8, 2011

第一個 Maya PyQt 的小程式

Maya 2011 的介面使用 Qt ,那到底帶給開發者什麼樣的好處呢?我第一直覺就是 ya! 可以使用 QtDesigner 來設定介面,不用在一行一行去設定 UI 的大小位置,但第二直覺就在想那 Maya 厡生的 UI control 如 gradientControl 或是 attrNavigationControlGrp 等要如何去整合到 QtDesigner 裡呢,雖然我是覺得可以用Qt所供的元件再去實作出一樣的 Maya UI 元件,但感覺卻是一件大工程 ^^? 有點偏題了,這次的練習想由 QtDesigner 做出介面,並使用 PyMel 來實作功能,想做怎樣的東西卻有點苦腦,最後決定做一個可以用 regular expression 來搜尋場景中物件的小工具,


圖中就是我用 QtDesigner 做好的介面,有一個可以輸入 regular expression 的 line edit,一個可以用來輸入測試字串的 line edit,最下方是一個 listWidget 用來顯示搜尋結果,並可以直接用它來選取想要的物件,List Button 是重新搜尋,Select Button 則是一次選取所有搜尋到的物件。

功能實作上出乎意料的簡單,新版的 PyMel 剛好也新增了 regular expression 搜尋的功能,讓厡本還在煩惱要用 Python 的 re module 來做或是 Qt 提供的 QRegExp 來做的我省去不少煩麻,最核心的碼其實只有一行,就是將輸入的 pattern 丟給 PyMel 並傳回搜尋結果並在 listWidget 中秀出來

results = pm.ls(regex=unicode(self.patternLineEdit.text()))


加上一些互動的碼,整個工具不到一百行,最重要的是完全完全不用去煩惱 UI 一些瑣碎的設定,真是太棒了!!

這是我用 .*collision.* 來搜尋整個場景字中有 collision 的物件並選取,

我想我應該會愛上這種開發工具的模式 ^^

7 comments:

sTonE田 said...

請問,我是MA2011 win7 x64安裝Graph Editor Redux 1.5.0

http://www.highend3d.com/downloads/graph-editor-redux--3/bugs/450

這個插件,但是會出現# Error: ImportError: No module named PyQt4 #
這一段問題,是因為maya2011沒有安裝 PyQt4嗎?

附檔是安裝說明

麻煩請您幫忙找出詳細解決方法,謝謝

烤焦的餅乾 said...

關於這個問題主要是因為 PyQt4 不是 Maya 內建的,需要另外到 PyQt 的官方網站 (http://www.riverbankcomputing.co.uk/news) 下載 PyQt 然後自行編譯安裝到 Maya 目錄底下的 Python/lib/site-packages,或是到我分享的這個 blog (http://nathanhorne.com/?p=204) 已經有編譯好的版本直接下載,我自己有在 Maya 2011 x86 環境下試過 Graph Editor Redux 是可以正常使用的。

sTonE田 said...

您好

因為我真的不太懂程式,所以安裝後還是不行(可能過程中有出錯)

不知道可以請版主,說出詳細的安裝過程,與執行的過程,因為真的很需要這個小工具,在麻煩你了!

非常感謝你

sTonE田 said...

我安裝完指定路徑後出現
#Error:RuntimeError:Invalid object or value;

是什麼意思呢?

麻煩你了!謝謝

Allen Lin said...

請問妳們在做相關搜索的功能時,有用到什麼演算法嗎?謝謝

benny yang said...

其實並沒有ㄟ,只是單純使用 regular expression 對場景內所有物件做一個過濾的動作而已

Allen Lin said...

感謝....^^