不用重啟Abaqus,手把手教你快速調(diào)試插件程序GUI

做過(guò)Abaqus二次開(kāi)發(fā)的人都知道,Plug-ins菜單下的RSG對(duì)話框生成器,能很方便地生成插件程序?qū)υ捒颉?duì)話框制作好之后,如保存為standard plug-in格式,則能自動(dòng)轉(zhuǎn)為Abaqus Gui toolkit腳本。雖然不能再用RSG對(duì)話框生成器進(jìn)行編輯,但這種代碼才是二次開(kāi)發(fā)的語(yǔ)言,我們可以修改成更高級(jí)的對(duì)話框GUI。

而在對(duì)插件程序GUI做二次開(kāi)發(fā)時(shí),每當(dāng)代碼有更改,想要查看修改后的界面,必須要重啟Abaqus,隨著調(diào)試次數(shù)的增多,以及版本提升造成的打開(kāi)緩慢,一次次打開(kāi)Abaqus會(huì)顯得不勝其煩,不知不覺(jué)會(huì)產(chǎn)生焦慮感。

我們改完腳本后,有沒(méi)有什么方法,不用重新打開(kāi)Abaqus,也能立刻顯示對(duì)話框更改后的界面呢?

當(dāng)然是有的。

其實(shí)幫助文檔中,已經(jīng)提供了一個(gè)方法。

打開(kāi)幫助文檔(版本6.14)中的 Abaqus GUI Toolkit User's Guide

1.png

點(diǎn)擊 2.4 Running the prototype application

2.png

幫助中提示我們可以用二次開(kāi)發(fā)的方法,即使不用重啟Abaqus ,也能立刻看到效果。首先去”SIMULIA Learning Community“去下載一個(gè)附件。

3.png

下載需要注冊(cè)賬號(hào),我已經(jīng)下載好了,貼在下方,大家可以下載:

不用重啟Abaqus,手把手教你快速調(diào)試插件程序GUI的圖4prototypeApp.zip

附件解壓縮后,是6個(gè)腳本:

4.png

幫助中并沒(méi)有闡述下一步該怎么做,我來(lái)說(shuō)明一下接下來(lái)該如何設(shè)置。

先來(lái)解釋一下這6個(gè)腳本的作用:

1、appIcons.py,打開(kāi)后是大大的F和D字母,它能作為xpm格式,通過(guò)FXXPMIcon()構(gòu)造方法創(chuàng)建圖標(biāo)

2、prototypeApp.py,啟動(dòng)腳本,它能創(chuàng)建并打開(kāi)Abaqus應(yīng)用程序。這個(gè)腳本的代碼格式是固定的。

3、prototypeMainWindow.py,它是主窗口腳本,負(fù)責(zé)Abaqus自帶工具集和自定義工具集的注冊(cè),以及自帶模塊和自定義的注冊(cè)。工具集和模塊中都分別包括了菜單、工具條、工具箱和樹(shù)。這個(gè)腳本中,除了注冊(cè)了常見(jiàn)的工具集和模塊,還單獨(dú)注冊(cè)一個(gè)自定義的工具集:PrototypeToolsetGui,并把這個(gè)工具集放置在菜單和工具箱中。

4、prototypeToolsetGui.py,自定義的工具集。這個(gè)腳本能夠新建圖標(biāo)按鈕F和D,把這兩個(gè)圖標(biāo)通過(guò)映射的方式,與自定義的插件程序做關(guān)聯(lián)。

5、testDB.py,對(duì)話框腳本,我們通過(guò)RSG對(duì)話框生成器做出來(lái)的插件對(duì)話框,用standard-in格式保存后,能自動(dòng)生成這個(gè)腳本。

6、testForm.py,F(xiàn)orm模式腳本,作用是用來(lái)收集從對(duì)話框中輸入的信息。這個(gè)腳本能調(diào)用對(duì)話框腳本。它也能通過(guò)RSG對(duì)話框生成器自動(dòng)生成,只不過(guò)生成的名稱是test_plugin.py。這里之所以要改名為testForm.py,是因?yàn)橛袃煞N模式,一種是Form模式,還有一種是Procedure模式,在做二次開(kāi)發(fā)時(shí),為了便于區(qū)分,把自動(dòng)生成的_plugin改為了Form。除了改名之外,還必須刪除自動(dòng)生成的腳本中最后幾行注冊(cè)代碼。

 這6個(gè)腳本有兩個(gè)作用:

一是能將Plug-ins菜單中的某個(gè)插件程序,轉(zhuǎn)為左側(cè)工具箱中的F和D圖標(biāo)按鈕。(為什么要轉(zhuǎn)為兩個(gè)圖標(biāo),下文講解)

二是以往我們通過(guò)腳本修改插件程序后,必須重啟Abaqus,才能看到改后的效果。而現(xiàn)在不用重啟Abaqus主窗口,只要重新打開(kāi)對(duì)話框,就能立刻看到改后的界面,等待時(shí)的焦慮感瞬間掃光。

這幾個(gè)腳本畢竟只是個(gè)模板,怎么用于我們自己的插件程序呢?

我已經(jīng)在社區(qū)下載腳本的基礎(chǔ)上,做好另一套腳本,可以直接打開(kāi)Abaqus,保留了F和D圖標(biāo)按鈕,并也能實(shí)現(xiàn)即時(shí)查看更改后的對(duì)話框功能。大家可以在下方附件免費(fèi)下載。

不用重啟Abaqus,手把手教你快速調(diào)試插件程序GUI的圖6New Abaqus.rar

下載后解壓縮,打開(kāi)文件夾。

5.png

雙擊”startup.bat“,能打開(kāi)Abaqus/CAE主窗口。

在主窗口的左側(cè),工具箱中有很醒目的F和D,F(xiàn)表示Form,D表示Dialogbox。

6.png

點(diǎn)擊D,彈出一個(gè)自定義的插件(我做的很簡(jiǎn)單的插件,僅做演示用),點(diǎn)擊OK可生成一個(gè)梁。

7.png

我們來(lái)做個(gè)演示,查看即時(shí)更改的功能:

用腳本編譯器打開(kāi)beamCreateDB.py,把對(duì)話框腳本做一些更改。為了不出現(xiàn)語(yǔ)法錯(cuò)誤,建議只改 ' ' 中的字符串。這里比如:把34行的 'Dimension' 改為 '尺寸:' ,改后保存。

把對(duì)話框關(guān)閉后,點(diǎn)擊“D”,可以發(fā)現(xiàn)對(duì)話框立刻做了更改。

8.gif

同樣,打開(kāi)beamCreateForm.py,這個(gè)腳本是收集在對(duì)話框輸入的數(shù)據(jù)。比如將第28行的40改為150,保存。

先點(diǎn)擊”F”,再點(diǎn)擊”D”,會(huì)發(fā)現(xiàn)length的默認(rèn)值從之前的40,改為了150。

這里的”F”對(duì)應(yīng)的是Form模式腳本,它負(fù)責(zé)創(chuàng)建關(guān)鍵字,并啟動(dòng)對(duì)話框腳本,自己也帶有默認(rèn)值。

9.gif

如果對(duì)控件代碼有所了解,可以直接添加控件語(yǔ)句:

10.gif

這套腳本是通用的,大家可以把自己的插件程序用于這套腳本上,按照以下步驟更改:

Step 1、在RSG中把插件對(duì)話框保存為standard plug-in格式,一般是3個(gè)腳本文件+圖片。假設(shè)內(nèi)核腳本名稱是abc.py,另外兩個(gè)腳本就是abcDB.py和abc_plugin.py。

Step 2、把這3個(gè)腳本文件和圖片,全部復(fù)制到My Abaqus文件夾下。

Step 3、把a(bǔ)bc_plugin.py,改名為abcForm.py

Step 4、打開(kāi)剛改完名的abcForm.py腳本,做如下三處修改:

1)把定義的類名改為abcForm(一般在第10行),可參考beamCreateForm.py第15行,注意第一個(gè)字母大寫(xiě),如下圖

11-0.png

2)找到實(shí)例方法getFirstDialog(),在import abcDB語(yǔ)句后面增加一行:reload(abcDB)。具體可參考beamCreateForm.py腳本的第40行,如下圖

11.png

3)刪除(或注釋)最后的幾行注冊(cè)語(yǔ)句,如下圖。其余不變,保存。

16.png

Step 5、打開(kāi)myToolsetGui.py腳本,做如下修改:

1)把第8行改為:import abcForm 

12.png

2)第24行改為:self.form = abcForm.AbcForm(self) ,注意后面的AbcForm是類名,”A“是大寫(xiě)的

13.png

3)第38行,改為:reload(abcForm)

4)第39行,改為:self.form = abcForm.AbcForm(self) ,與第24行一樣 

14.png

5)第45行,改為:return 'import abc'

15.png

更改完畢。

 大家試一試,是不是可以點(diǎn)擊D按鈕打開(kāi)插件呢?還可以試試更改腳本,體驗(yàn)實(shí)時(shí)更新對(duì)話框吧。

把插件程序做成按鈕圖標(biāo),用到了 Abaqus主窗口GUI的二次開(kāi)發(fā) 和 Abaqus插件程序GUI二次開(kāi)發(fā) 的一些內(nèi)容,前者在我的課程《Abaqus主窗口GUI的二次開(kāi)發(fā)》中有全套講解。

關(guān)于Abaqus主窗口GUI的二次開(kāi)發(fā)的介紹,也可以看帖子《除了內(nèi)核程序,Abaqus還能這樣做二次開(kāi)發(fā)》

 

回到主題,不用重啟Abaqus就能即時(shí)打開(kāi)更改后的對(duì)話框,是如何實(shí)現(xiàn)的呢?其實(shí)不難理解,大家一定觀察到了,在myToolsetGui.py和beamCreateForm.py這兩個(gè)腳本中有用了reload()方法。

在myToolsetGui.py中,在第38行增加了reload(testForm)。它的作用是重新加載testForm模塊,這個(gè)模塊已經(jīng)與F字母按鈕做了映射。當(dāng)我們修改腳本后,再次點(diǎn)擊F字母時(shí),就已經(jīng)重新加載了testForm模塊,打開(kāi)的是新的模式腳本。

同樣,testForm.py中,第40行增加了reload(testDB)。它能重新加載testDB模塊,這個(gè)模塊是對(duì)話框腳本,已經(jīng)與D字母做了映射。當(dāng)我們修改對(duì)話框腳本后,再次點(diǎn)擊D字母,腳本已經(jīng)重新被加載,打開(kāi)的是新的對(duì)話框。也就實(shí)現(xiàn)了不用重啟Abaqus,也能實(shí)時(shí)看到更改后的界面。

 小結(jié)一下:我們并不能直接修改Plug-ins菜單下的插件程序,而是繞了一個(gè)彎,通過(guò)自定義Abaqus主窗口的方式,把Plug-ins菜單下的插件程序與兩個(gè)圖標(biāo)按鈕做關(guān)聯(lián),并做適當(dāng)修改,同時(shí)注冊(cè)到工具箱中,就能在修改后實(shí)時(shí)查看插件程序的界面了。需要修改兩個(gè)腳本,一是 _plugins腳本,二是myToolsetGui腳本,分別都要添加reload()方法,通過(guò)重新加載Form腳本和對(duì)話框腳本的方式,來(lái)實(shí)現(xiàn)即時(shí)查看更改的目的。

 

做這兩個(gè)按鈕的好處,就是方便對(duì)插件對(duì)話框的GUI做更改。

為什么要對(duì)對(duì)話框的GUI做更改呢?

RSG對(duì)話框生成器中自帶的控件,確實(shí)可以做出簡(jiǎn)單的對(duì)話框,但也就只能做簡(jiǎn)單的對(duì)話框了。因?yàn)閹缀趺總€(gè)RSG提供的控件中的功能接口都很少,大量的功能接口被隱藏了(是真的!),還有一些控件用RSG是做不出來(lái)的。無(wú)論是控件的隱藏功能,還是做不出來(lái)的控件,想要使用它們,都必須以腳本的形式開(kāi)發(fā)出來(lái)。

而在開(kāi)發(fā)過(guò)程中,需要一次次的調(diào)試,如果每次調(diào)式都伴隨著重啟Abaqus,那是一件很頭疼的事。所以如果有不用重啟就能打開(kāi)調(diào)式后的對(duì)話框的方法,使用起來(lái)則很痛快。

推出我的第二套課程:《Abaqus插件程序GUI的二次開(kāi)發(fā)  初、中級(jí)篇》

課程一共21講,從腳本的角度,全面講解了RSG自帶的22種控件,以及沒(méi)包含的7種控件,共計(jì)29種控件,此外,還講解了注冊(cè)腳本中的8種類型關(guān)鍵字。課程以腳本的方式,不只是講解如何創(chuàng)建控件,更多的是挖掘控件被隱藏的功能,從而做出更豐富、更實(shí)用的插件對(duì)話框。

課程第一講,也有設(shè)置F和D兩個(gè)圖標(biāo)按鈕的演示,歡迎觀看。


Abaqus GUI二次開(kāi)發(fā)三部曲:

Abaqus 主窗口GUI的二次開(kāi)發(fā)

Abaqus插件程序GUI的二次開(kāi)發(fā) 初、中級(jí)篇

Abaqus插件程序GUI的二次開(kāi)發(fā) 高級(jí)篇

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

37
12
46