除了核心程式,Abaqus還能這樣做二次開發

2021-10-12 10:08:20 字數 4002 閱讀 1022

經常使用abaqus的人都知道,從程式語言角度來說,常見的abaqus二次開發使用的是fortran語言和python語言。fortran可以用來開發子程式,python則是用來開發外掛程式。

我們通常所說的開發外掛程式,一般是指開發核心程式。很多時候,可以利用自動生成的rpy檔案,對它適當修改,比如新增判斷、迴圈等語句,即可得到一套核心指令碼。如果配合使用rsg對話方塊生成器,能夠生成帶有對話方塊介面的外掛程式。重啟abaqus之後,在plug-ins選單中即可找到,使用起來十分方便。

我們在「工作目錄-abaqus_plugins」下,可以找到三個指令碼檔案,比如:

第乙個是核心指令碼,它直接以我們輸入的名稱為命名。

第二個是外掛程式gui指令碼,通常是以db.py結尾的檔案,它包含了各個控制項和布局管理器,將我們在rsg對話方塊生成器中製作出的對話方塊,以指令碼的形式自動生成。

第三個是以_plugin.py結尾的檔案,它是註冊指令碼,主要作用是初始化控制項關鍵字,檢查資料的合法性,並將外掛程式註冊到plug-ins選單中,它也是由rsg對話方塊生成器自動生成的。我們通常在plug-ins選單下開啟外掛程式時,先呼叫的就是這個註冊指令碼,它能夠自動呼叫***db.py對話方塊檔案。

有時還會出現pyc檔案,比如:

它是怎麼出現的呢?當乙個指令碼中匯入乙個模組的時候,會將該模組的指令碼生成pyc檔案,這是python為了提高解析速度,對作為模組的py檔案先作乙個類似編譯的行為,自動生成相應的pyc檔案。當再有其他指令碼匯入這些模組時,python就不用再重新解析py檔案,而是讀入pyc檔案就可以了,這是因為pyc檔案是二進位制檔案,執行的速度比較快。pyc檔案用記事本開啟是一堆亂碼,用**編譯器開啟則是一堆數字,無法編輯。當我們不想讓pyc檔案出現,比如指令碼a.py匯入了指令碼b,可以開啟指令碼a.py,在開頭新增兩行**:

import sys

sys.dont_write_bytecode = true

這樣,指令碼a就不會對匯入的所有指令碼進行預編譯,也就不會產生b.pyc。但如果指令碼a被其他指令碼匯入,仍會自動產生a.pyc檔案。

由此看來,外掛程式gui指令碼和註冊指令碼也是abaqus二次開發的一種。

實際上,abaqus的二次開發並不僅僅侷限於此,利用python還可以對abaqus主視窗的gui進行二次開發。

顧名思義,abaqus主視窗的gui二次開發,是針對主視窗的圖形介面進行開發。平時我們使用abaqus,都是在選單、工具條、模組、以及左側的工具箱中,選擇選單項或圖示按鈕進行操作。

這些選單項或圖示按鈕都是abaqus主視窗gui的組成部分。

對主視窗的gui進行二次開發,就是對選單、工具條、模組、以及左側的工具箱進行開發。

如何對abaqus主視窗gui進行二次開發呢?

我們在開發核心程式時,指令碼開頭都會有from abaqus import *,這樣可以使用各種核心方法。

而在開發主視窗gui(以及外掛程式gui)時,指令碼開頭也都會有from abaqusgui import *,匯入了abaqusgui模組。abaqusgui就是abaqus gui toolkit,也稱為abaqus gui工具包,它是fox gui toolkit的擴充套件。

fox gui toolkit是乙個基於c++的可以進行gui開發的工具包,含有豐富的視窗小部件和布局管理器。abaqus gui toolkit在fox gui工具包的基礎上進行了擴充套件,可讓我們建立、修改和擴充套件abaqus / cae圖形使用者介面(gui)的功能。如果對fox gui toolkit有興趣,可以訪問他們的**:同時它也是物件導向的、與平台無關的gui開發工具包。

正是由於fox guitoolkit是物件導向的,所以abaqus以及我們可以通過繼承的方式,很輕易地拓展已有的功能。

主視窗gui和外掛程式gui的開發,用的都是abaqus gui toolkit。兩者是緊密相連的。自上而下來看,整體的開發流程是:

第二步、afxmainwindow:註冊標準的和自定義的工具集,以及註冊標準的和自定義的模組。

第三步、modules/toolsets:自定義模組和工具集。在這一步中,我們就可以把集中在plug-ins選單下的外掛程式做成圖示按鈕,分別放置到我們期望的地方。

第四步、menu/icons:修改、增加選單和定義圖示。

第五步、modes:負責收集使用者輸入的引數,以及處理命令的模式。

第六步、forms/procedures:這是包含在第五步的modes中的,modes中包含了forms模式和procedures模式。

第七步、dialogs:建立對話方塊。

第八步、layout managers:在對話方塊中把各個控制項進行布局。

第九步、widgets:建立各個控制項,比如單複選按鈕、下拉列表等。

從這九個步驟可以看出,第一步到第四步是主視窗gui的二次開發,後面五步是外掛程式gui的開發。

abaqus主視窗gui的二次開發有什麼作用呢?

當外掛程式只有少數幾個時,我們可以在plug-ins選單下很方便地找得到。但隨著工作或學習的積累,外掛程式會漸漸增多,以至於可能會變成這樣:

隨著外掛程式越來越多,它們的功能和分類可能也都不相同,如果都擁擠在乙個下拉列表中,我們可能無法快速找到想要的外掛程式。時間長了,有時還會忘記一些不常用的外掛程式。

和abaqus中各個圖示按鈕一樣,我們能不能也把這些外掛程式轉換成自己喜歡的圖示按鈕呢?

把它們分類後,這些圖示能不能分別放到選單欄、工具條和左側的工具箱中呢?

當切換到某個模組時,能不能自動彈出我們想要的的外掛程式圖示呢?

為了應對某種需要,能不能單獨建立乙個新模組,在這個模組中盡情地放入各種外掛程式圖示呢?

甚至哪怕只有乙個外掛程式,能不能也把它轉為圖示按鈕,新增到已有的工具條中呢?

能!通過對abaqus主視窗gui的二次開發,能夠實現這些功能!

下面的主視窗,就是正是針對這些需求開發出來的。

能夠看到,現在的abaqus主視窗中,出現很多沒見過的圖示按鈕,新建了一些選單,增添兩個新的工具條,已有的工具條中新增了圖示,工具箱中也有新的圖示按鈕;甚至還自定義了乙個新的beam module模組,模組中有專門的圖示;切換到new step模組時,則會自動調出新的球類圖示按鈕。

這樣充滿個性的abaqus主視窗,是如何開發出呢?其實是這幾個指令碼共同打造出來的。

3個資料夾(工作目錄、圖示和外掛程式)、9個指令碼和1個bat檔案

第二步、afxmainwindow是註冊指令碼,對應的是mainwindow.py。指令碼中註冊了各種工具集和模組,其中包括abaqus自帶的,以及我們自己的外掛程式。

第三步、modules/toolsets是自定義模組和工具集指令碼,資料夾中的其他7個指令碼都與之相關。在這些指令碼中,依照不同的情況,分別把外掛程式轉變為圖示按鈕,並放置到各個所需的地方。

第四步、menu/icons是定義選單和圖示。它們都融合在第三步中,在各個指令碼中已經建立、修改好了選單和圖示了。

開發出這樣的指令碼難不難呢?需要有什麼基礎知識呢?

---------- 紅著臉介紹我的課程 :) ----------

只要能夠正常操作abaqus,並具備python基礎知識,就可以跟著《abaqus主視窗gui的二次開發》課程一起,開發出專屬的abaqus主視窗了。課程一共16講,第一講免費。

課程分為兩個部分:

1、類和物件導向知識點的講解;

2、附件中9個指令碼的講解。

跟著課程,你也能開發出獨一無二的abaqus主視窗。

除了Exception,還能throw什麼

用慣了c vb.net的人,可能很習慣用下面的格式來捕獲所有的異常 trycatch system.exception ex 這條語句能捕獲所有種類的異常嗎?顯然,這條語句捕獲的是system.exception,以及所有繼承自它的類。也就是說,如果你丟擲了乙個不是繼承自system.excepti...

選offer,除了錢,還能比這些!

所謂擇業近視就是只顧眼前利益,忽視長遠利益,最終導致職業 選擇失誤,事業停滯甚至倒退。此類情況不僅限於上班族,高考時候志願的盲目跟風也屬此類。首先,每個人都應該有乙個明確的中期的職業目標 今後的3年裡我希望實現怎樣的成就,達到什麼樣的高度?做過商業計畫的人都知道,如果沒有目標,無法合理規劃資源,戰略...

北大除了「啃老」還能「啃」什麼

王學進 北大除了 啃老 還能 啃 什麼 近日,北大和耶魯大學的校園宣傳片因風格迥異引起熱議,部分認為北大宣傳片 拍攝跑偏 成了風景名勝片,而耶魯宣傳片更關注人。對此,拍攝宣傳片的北大藝術學院副教授陳宇稱,北大宣傳片旨在反映中國文人薪火相傳的精神氣質,與耶魯大學的招生宣傳不同,兩者沒有可比性。2月 1...