Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】
2017-07-03 by:CAE仿真在線(xiàn) 來(lái)源:互聯(lián)網(wǎng)
下面文中的代碼均來(lái)自ANSYS的幫助文檔。
目前極少人做workbench的二次開(kāi)發(fā),一來(lái)是很不好做,二來(lái)可能必要性也沒(méi)那么大。筆者對(duì)Workbench的二次開(kāi)發(fā)作一個(gè)大概的介紹,用到的朋友大概也只能啃幫助手冊(cè)了。
正文
ANSYS Workbench二次開(kāi)發(fā)比較不容易做,其原因一是Workbench本身就是一個(gè)集成平臺(tái)而非一個(gè)軟件,二是開(kāi)發(fā)接口很難理解,開(kāi)發(fā)手冊(cè)寫(xiě)的真不好,三是目前貌似極少人(資料)做這方面的東西,流傳的資料幾乎沒(méi)有(除了ANSYS網(wǎng)站的官方文檔,在百度文庫(kù)有一些,再就是幫助手冊(cè)了)。
舉個(gè)例子,Workbench的二次開(kāi)發(fā)與HyperMesh相比有多費(fèi)勁,下圖是HyperMesh的一個(gè)API函數(shù)幫助文檔所給的注釋,可以看到,注釋寫(xiě)的非常的詳細(xì),包括函數(shù)的用途、類(lèi)型、語(yǔ)法、描述、數(shù)據(jù)類(lèi)型、變量描述等等。
圖1
下面再看看ANSYS幫助手冊(cè)所給的一個(gè)API函數(shù)的解釋,相比之下,費(fèi)勁很多,看了解釋也很難知道到底該怎么使用這個(gè)API函數(shù),而且更詭異的是居然還有很多的API函數(shù)沒(méi)有給出解釋,下圖這個(gè)是創(chuàng)建一個(gè)圓柱殼的API函數(shù),但是其他的比如創(chuàng)建矩形的API函數(shù)連解釋都沒(méi)有,使用者甚至不知道函數(shù)名稱(chēng)是什么。
感覺(jué)Workbench對(duì)于二次開(kāi)發(fā)的功能沒(méi)那么重視,不是其想引導(dǎo)的趨勢(shì)。
圖2
不過(guò),饒是如此,還是可以做,尤其在后處理方面,在前處理方面則很是費(fèi)勁,開(kāi)放的接口太少。
今次大概介紹下Workbench的二次開(kāi)發(fā)。
Workbench二次開(kāi)發(fā)的程序叫做extension,Extension主要有四個(gè)功能:
定義工具條和按鈕;
將按鈕與ACT對(duì)象綁定;
定義彈窗;
存儲(chǔ)數(shù)據(jù)。
下面的例子是在Workbench的Mechnical模塊下創(chuàng)建工具條和按鈕。
創(chuàng)建的工具條可以在支持ACT directomization(Workbench,AIM,Mechnical,DesignModeler,以及DesignXplore)的應(yīng)用程序中使用,也可以在支持guided-process extension(Fulent、Eletronic Desktop)的應(yīng)用程序中使用。
開(kāi)發(fā)的extension的界面形式是通過(guò)xml語(yǔ)言進(jìn)行編寫(xiě)的,通過(guò)xml定義extension的名稱(chēng)、屬性、執(zhí)行腳本、界面上的內(nèi)容等等,xml寫(xiě)出來(lái)的程序本身不能完成有效功能,只是一個(gè)定義好屬性以及保留了接口的界面而已。
<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>
整段代碼定義了一個(gè)名為ExtToolbarSample的extension,執(zhí)行的python腳本是toolbarsample.py,通過(guò)<image>指定了背景,通過(guò)<interface context>指定該extension應(yīng)用在mechnical模塊下,通過(guò)<toolbar>定義了名稱(chēng)為T(mén)oolBar1的工具條,并且通過(guò)<entry>定義了按鈕入口,也就是該按鈕可以執(zhí)行函數(shù)OnClickTB1Button1。同樣的按鈕還定義了ToolBar2和ToolBar3,并分別綁定了點(diǎn)擊這幾個(gè)按鈕所要執(zhí)行的函數(shù),這些函數(shù)均在toolbarsample.py腳本文件中定義。
后面的代碼定義了另一個(gè)工具條,也即是上面這段代碼定義了兩個(gè)工具條,每個(gè)工具條上面分布有三個(gè)按鈕。
這六個(gè)按鈕均有相應(yīng)的函數(shù)與之綁定,一旦點(diǎn)擊該按鈕,便能執(zhí)行相應(yīng)的函數(shù),完成某個(gè)功能。
定義完成后的extension形式如下所示:
圖3
可以看到定義的兩個(gè)工具條及6個(gè)按鈕。
上面的XML所定義的接口代碼需要通過(guò)Python腳本文件的形式來(lái)實(shí)現(xiàn)。
針對(duì)上面按鈕所綁定的函數(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)
該腳本中通過(guò)def定義了多個(gè)函數(shù),其中有按鈕所綁定的函數(shù),在這段Py代碼中除了用到通常的python語(yǔ)言,也用到了ANSYS Workbench的API函數(shù),例如ExtAPI.Log.WriteMessage(顯示信息)。
所有關(guān)鍵的功能也是通過(guò)Python語(yǔ)言和API函數(shù)聯(lián)合實(shí)現(xiàn)的。一般來(lái)說(shuō),提供的接口越多,所能做的開(kāi)發(fā)也越復(fù)雜,開(kāi)發(fā)起來(lái)也容易。
結(jié)合x(chóng)ml和py兩個(gè)文件以及其他一些輔助的,比如背景圖片等,就可以完成一個(gè)extension的開(kāi)發(fā),以擴(kuò)展Workbench的功能。
轉(zhuǎn)自公眾號(hào):CAE技術(shù)分享
相關(guān)標(biāo)簽搜索:Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】 Ansys有限元培訓(xùn) Ansys workbench培訓(xùn) ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢(xún) ansys基礎(chǔ)知識(shí) ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓(xùn)