ABAQUS GUI免重啟快速調試--終極版

 對于ABAQUS GUI的二次開發, 最頭疼的莫過于每次更改From或者DB的時候都需要重啟ABAQUS才能看見更改后的效果,而反復的重啟ABAQUS會拖慢電腦運行速度, 實在是一個磨煉心性的好辦法。而網上雖然有很多關于prototypeApp的討論, 但是一直感覺隔了一層窗戶紙, 就是不通透。而本文將闡述一下然后把這個prototypeApp梳理通透, 形成一個可以方便快捷的GUI開發調試框架。


    或許有人好奇, 我為什么非要把prototypeApp折騰成這個樣子? 這是因為我想要一個集使用開發調試使用于一體的自己開發的主窗口GUI界面, 像這樣:

ABAQUS GUI免重啟快速調試--終極版的圖1

    如果不對prototypeApp進行優化, 那么每次調試插件的時候, 要么得在單獨的環境中調試, 要么就會把自己開發的主窗口GUI源文件搞得一團亂麻.

    而經過我優化的prototypeApp則可以很好地和主窗口GUI形成一個整體, 作為集開發調試使用于一體的ABAQUS環境. 這樣一來, 通過RSG自動生成的插件, copy至plugins文件夾后, 經過prototype調試合格后, 即可直接注冊到自己想注冊的位置并進行使用. 這樣一來就形成了一個閉環生態, 并且可以在使用過程中, 不斷優化調試.

    


    此項目在gitee上開源:

    https://gitee.com/group_wzj/abaqus_prototypeapp.git

    也可在公眾號內回復prototypeApp, 獲得百度網盤下載鏈接.

    項目文件結構:

ABAQUS GUI免重啟快速調試--終極版的圖2


    

食用方法:


一 : 將待調試的插件copy至plugins文件夾下, 并為之新建一個__init__.py, 使之成為一個python包;


二 : 修改Form文件(即_plugin文件):

         
         
  • 修改AFXGuiCommand的objectName參數, 使之可以從根目錄找打kernel文件

  • 修改getFirstDialog方法, 在return之前加入reload函數

  • 注釋自動生成的注冊代碼


三 : 修改prototypeToolsetGui.py文件:

  • 在類之前仿照如下代碼加入待調試插件的Form

    ABAQUS GUI免重啟快速調試--終極版的圖3

  • 修改onCmdForm函數, 在reload之后重新導入并as一次TestForm

  • 修改getKernelInitializationCommand方法導入kernel文件, 其地址應與AFXGuiCommand的objectName參數相同


以下為開發過程記錄, 感興趣的可以看看.


01

prototypeApp


    初始的prototypeApp文件如下:

ABAQUS GUI免重啟快速調試--終極版的圖4

該項目我在gitee上做了開源, 所以會有一些多出來開源所需的模板文件, 對各個文件進行如下說明:

  1. .gitignore:開源模板文件

  2. appIcons.py:prototypeApp項目圖標文件

  3. LICENSE:開源模板文件

  4. prototype.bat:prototypeApp項目BAT文件, 用于運行該項目

  5. prototypeApp.py:prototypeApp項目App文件

  6. prototypeMainWindow.py:prototypeApp項目主窗口文件

  7. prototypeToolsetGui.py:prototypeApp項目ToolSet注冊文件

  8. README.en.md:開源模板文件

  9. README.md開源模板文件

  10. testDB.py:prototypeApp項目DB文件

  11. testForm.py:prototypeApp項目Form文件

02


重載DB和Form的原理


    我們自己開發的GUI為什么不會重載,而prototypeApp項目卻可以重載呢?這需要我們到它的源代碼中尋找答案。

    而這種排查代碼的工作, 最好要從頭開始,App文件作為整個項目的入口文件, 自然就是我們需要的開始點:

我們先開App文件:

ABAQUS GUI免重啟快速調試--終極版的圖5

這就是一個正常的App文件, 沒有任何異常。

我們再打開主窗口文件:

ABAQUS GUI免重啟快速調試--終極版的圖6

    發現除了注冊了一個自定義的ToolSet之外, 也就是一個正常的主窗口, 如此我們繼續查看ToolSet的注冊文件:

ABAQUS GUI免重啟快速調試--終極版的圖7

恩, 終于有點端倪了, 我的鼠標選中行, 出現了一個reload函數, 它的參數是import 的 testForm, 而reload, 顧名思義嘛, 就是重新載入的意思, 所以這就是重新加載Form文件的關鍵了。我們還可以看到onCmdForm這個方法是被綁定到了formIcon上, 也就是F, 而D則綁定了激活DB的方法。

我們再看From文件:

ABAQUS GUI免重啟快速調試--終極版的圖8

恩, 這里(鼠標選中)reload了DB文件, 如此一來也找到了DB的reload方法,我們再看DB文件:

ABAQUS GUI免重啟快速調試--終極版的圖9

這只是一個正常的DB文件


03


框架搭建


    既然已經理順了reload的原理, 那么我們就可以大膽的將testForm.py和testDB.py刪除(這又不是我們的項目), 然后新建一些python包文件, 方便后續管理:

  1. 新建python包文件icons,將appIcons.py拖入其中;

  2. 新建python包文件plugins, 用于存放我們開發的插件, 在里面放一個測試用的插件, 我使用的是使用python進行ABAQUS批處理-Gui代碼

  3. 新建python包文件myGui,用于存放我們自定義的GUI集, 將prototypeToolsetGui.py拖入其中。

    如此整體項目結構為:

ABAQUS GUI免重啟快速調試--終極版的圖10

鼠標選中處, 應保證導入了自定義的GUI集。


然后我們先修改batchAnalysis_plugin.py(相對于testForm.py), 進行reload DB文件, 共計三處修改:

  1. 由于該插件屬于RSG自動生成, 如果我們要自己進行注冊, 需要將該文件末尾的注冊文件部分代碼注釋或刪除;

  2. 仿照testForm.py添加reload函數

  3. 修改下圖選中行, 以讓程序可以從根目錄找到kernel文件

ABAQUS GUI免重啟快速調試--終極版的圖11


最后我們修改ToolSet注冊文件:

該文件中的testForm.py被導入為testForm,而其內部Form為TestForm, 而我們要行李代桃僵之策:

ABAQUS GUI免重啟快速調試--終極版的圖12

然后將文件內所有testForm.TestForm 替換為TestForm. 

    運行程序, 可以正常開啟ABAQUS, 但是發生一個奇怪的問題:

    修改DB的時候可以重載, 而修改Form的時候不能重載!

    

    經過反復排查, 終于發現了關鍵所在, 由于我們李代桃僵的時候在程序開頭就as了TestForm, 所以程序一直在使用這個TestForm, 即使重載了testForm, 程序使用的依然是as的那個TestForm而非重載后的testForm里面的Form文件.


    這里我暫時沒有什么好辦法, 直接在reload(testForm)之后重新as了一下TestForm, 如下:

ABAQUS GUI免重啟快速調試--終極版的圖13


    如果插件存在kernel程序, 則需要在類中使用getKernelInitializationCommand方法導入kernel文件, 否則在運行插件時會提示找不到kernel文件, ToolSet文件如圖:

ABAQUS GUI免重啟快速調試--終極版的圖14


    再次啟動ABAQUS, 經調試, Form與DB均可以重載. 

    框架搭建完成.


期待更多技術干貨, 請關注AbaqusCoder!

ABAQUS GUI免重啟快速調試--終極版的圖15

如果本文對您有幫助, 期待您的轉發與點亮再看!

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5
5
16