Workbench如何做二次開發(fā)【轉(zhuǎn)發(fā)】
2017-07-03 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
下面文中的代碼均來自ANSYS的幫助文檔。
目前極少人做workbench的二次開發(fā),一來是很不好做,二來可能必要性也沒那么大。筆者對Workbench的二次開發(fā)作一個大概的介紹,用到的朋友大概也只能啃幫助手冊了。
正文
ANSYS Workbench二次開發(fā)比較不容易做,其原因一是Workbench本身就是一個集成平臺而非一個軟件,二是開發(fā)接口很難理解,開發(fā)手冊寫的真不好,三是目前貌似極少人(資料)做這方面的東西,流傳的資料幾乎沒有(除了ANSYS網(wǎng)站的官方文檔,在百度文庫有一些,再就是幫助手冊了)。
舉個例子,Workbench的二次開發(fā)與HyperMesh相比有多費勁,下圖是HyperMesh的一個API函數(shù)幫助文檔所給的注釋,可以看到,注釋寫的非常的詳細,包括函數(shù)的用途、類型、語法、描述、數(shù)據(jù)類型、變量描述等等。
圖1
下面再看看ANSYS幫助手冊所給的一個API函數(shù)的解釋,相比之下,費勁很多,看了解釋也很難知道到底該怎么使用這個API函數(shù),而且更詭異的是居然還有很多的API函數(shù)沒有給出解釋,下圖這個是創(chuàng)建一個圓柱殼的API函數(shù),但是其他的比如創(chuàng)建矩形的API函數(shù)連解釋都沒有,使用者甚至不知道函數(shù)名稱是什么。
感覺Workbench對于二次開發(fā)的功能沒那么重視,不是其想引導的趨勢。
圖2
不過,饒是如此,還是可以做,尤其在后處理方面,在前處理方面則很是費勁,開放的接口太少。
今次大概介紹下Workbench的二次開發(fā)。
Workbench二次開發(fā)的程序叫做extension,Extension主要有四個功能:
定義工具條和按鈕;
將按鈕與ACT對象綁定;
定義彈窗;
存儲數(shù)據(jù)。
下面的例子是在Workbench的Mechnical模塊下創(chuàng)建工具條和按鈕。
創(chuàng)建的工具條可以在支持ACT directomization(Workbench,AIM,Mechnical,DesignModeler,以及DesignXplore)的應用程序中使用,也可以在支持guided-process extension(Fulent、Eletronic Desktop)的應用程序中使用。
開發(fā)的extension的界面形式是通過xml語言進行編寫的,通過xml定義extension的名稱、屬性、執(zhí)行腳本、界面上的內(nèi)容等等,xml寫出來的程序本身不能完成有效功能,只是一個定義好屬性以及保留了接口的界面而已。
<extension version="1" minorversion="0" name="ExtToolbarSample">
<script src="toolbarsample.py" />
<interface context="Mechanical">
<images>images</images>
<callbacks>
<oninit>init</oninit>
</callbacks>
<toolbar name="ToolBar1" caption="ToolBar1">
<entry name="TB1Button1" icon="button1Red">
<callbacks>
<onclick>OnClickTB1Button1</onclick>
</callbacks>
</entry>
<entry name="TB1Button2" icon="button2Red">
<callbacks>
<onclick>OnClickTB1Button2</onclick>
</callbacks>
</entry>
<entry name="TB1Button3" icon="button3Red">
<callbacks>
<onclick>OnClickTB1Button3</onclick>
</callbacks>
</entry>
</toolbar>
<toolbar name="Toolbar2" caption="Toolbar2">
<entry name="TB2Button1" icon="button1Blue">
<callbacks>
<onclick>OnClickTB2Button1</onclick>
</callbacks>
</entry>
<entry name="TB2Button2" icon="button2Blue">
<callbacks>
<onclick>OnClickTB2Button2</onclick>
</callbacks>
</entry>
<entry name="TB2Button3" icon="button3Blue">
<callbacks>
<onclick>OnClickTB2Button3</onclick>
</callbacks>
</entry>
</toolbar>
</interface>
</extension>
整段代碼定義了一個名為ExtToolbarSample的extension,執(zhí)行的python腳本是toolbarsample.py,通過<image>指定了背景,通過<interface context>指定該extension應用在mechnical模塊下,通過<toolbar>定義了名稱為ToolBar1的工具條,并且通過<entry>定義了按鈕入口,也就是該按鈕可以執(zhí)行函數(shù)OnClickTB1Button1。同樣的按鈕還定義了ToolBar2和ToolBar3,并分別綁定了點擊這幾個按鈕所要執(zhí)行的函數(shù),這些函數(shù)均在toolbarsample.py腳本文件中定義。
后面的代碼定義了另一個工具條,也即是上面這段代碼定義了兩個工具條,每個工具條上面分布有三個按鈕。
這六個按鈕均有相應的函數(shù)與之綁定,一旦點擊該按鈕,便能執(zhí)行相應的函數(shù),完成某個功能。
定義完成后的extension形式如下所示:
圖3
可以看到定義的兩個工具條及6個按鈕。
上面的XML所定義的接口代碼需要通過Python腳本文件的形式來實現(xiàn)。
針對上面按鈕所綁定的函數(shù),定義的toolbarsample.py文件內(nèi)容如下:
import os
import datetime
clr.AddReference("Ans.UI.Toolkit")
clr.AddReference("Ans.UI.Toolkit.Base")
from Ansys.UI.Toolkit import *
def init(context):
ExtAPI.Log.WriteMessage("Init ExtToolbarSample ...")
def OnClickTB1Button1(analysis):
LogButtonClicked(1, 1, analysis)
def OnClickTB1Button2(analysis):
LogButtonClicked(1, 2, analysis)
def OnClickTB1Button3(analysis):
LogButtonClicked(1, 3, analysis)
def OnClickTB2Button1(analysis):
LogButtonClicked(2, 1, analysis)
def OnClickTB2Button2(analysis):
LogButtonClicked(2, 2, analysis)
def OnClickTB2Button3(analysis):
LogButtonClicked(2, 3, analysis)
def LogButtonClicked(toolbarId, buttonId, analysis):
now = datetime.datetime.now()
outFile = SetUserOutput("ExtToolbarSample.log", analysis)
f = open(outFile,'a')
f.write("*.*.*.*.*.*.*.*\n")
f.write(str(now)+"\n")
f.write("Toolbar "+toolbarId.ToString()+" - Button "+buttonId.ToString()+" Clicked. \n")
f.write("*.*.*.*.*.*.*.*\n")
f.close()
MessageBox.Show("Toolbar "+toolbarId.ToString()+" - Button "+buttonId.ToString()+" Clicked.")
def SetUserOutput(filename, analysis):
solverDir = analysis.WorkingDir
return os.path.join(solverDir,filename)
該腳本中通過def定義了多個函數(shù),其中有按鈕所綁定的函數(shù),在這段Py代碼中除了用到通常的python語言,也用到了ANSYS Workbench的API函數(shù),例如ExtAPI.Log.WriteMessage(顯示信息)。
所有關(guān)鍵的功能也是通過Python語言和API函數(shù)聯(lián)合實現(xiàn)的。一般來說,提供的接口越多,所能做的開發(fā)也越復雜,開發(fā)起來也容易。
結(jié)合xml和py兩個文件以及其他一些輔助的,比如背景圖片等,就可以完成一個extension的開發(fā),以擴展Workbench的功能。
轉(zhuǎn)自公眾號:CAE技術(shù)分享
相關(guān)標簽搜索:Workbench如何做二次開發(fā)【轉(zhuǎn)發(fā)】 Ansys有限元培訓 Ansys workbench培訓 ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢 ansys基礎知識 ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓