Workbench如何做二次开发【转发】
2017-07-03 by:CAE仿真在线 来源:互联网
下面文中的代码均来自ANSYS的帮助文档。
目前极少人做workbench的二次开发,一来是很不好做,二来可能必要性也没那么大。笔者对Workbench的二次开发作一个大概的介绍,用到的朋友大概也只能啃帮助手册了。
正文
ANSYS Workbench二次开发比较不容易做,其原因一是Workbench本身就是一个集成平台而非一个软件,二是开发接口很难理解,开发手册写的真不好,三是目前貌似极少人(资料)做这方面的东西,流传的资料几乎没有(除了ANSYS网站的官方文档,在百度文库有一些,再就是帮助手册了)。
举个例子,Workbench的二次开发与HyperMesh相比有多费劲,下图是HyperMesh的一个API函数帮助文档所给的注释,可以看到,注释写的非常的详细,包括函数的用途、类型、语法、描述、数据类型、变量描述等等。
图1
下面再看看ANSYS帮助手册所给的一个API函数的解释,相比之下,费劲很多,看了解释也很难知道到底该怎么使用这个API函数,而且更诡异的是居然还有很多的API函数没有给出解释,下图这个是创建一个圆柱壳的API函数,但是其他的比如创建矩形的API函数连解释都没有,使用者甚至不知道函数名称是什么。
感觉Workbench对于二次开发的功能没那么重视,不是其想引导的趋势。
图2
不过,饶是如此,还是可以做,尤其在后处理方面,在前处理方面则很是费劲,开放的接口太少。
今次大概介绍下Workbench的二次开发。
Workbench二次开发的程序叫做extension,Extension主要有四个功能:
定义工具条和按钮;
将按钮与ACT对象绑定;
定义弹窗;
存储数据。
下面的例子是在Workbench的Mechnical模块下创建工具条和按钮。
创建的工具条可以在支持ACT directomization(Workbench,AIM,Mechnical,DesignModeler,以及DesignXplore)的应用程序中使用,也可以在支持guided-process extension(Fulent、Eletronic Desktop)的应用程序中使用。
开发的extension的界面形式是通过xml语言进行编写的,通过xml定义extension的名称、属性、执行脚本、界面上的内容等等,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,执行的python脚本是toolbarsample.py,通过<image>指定了背景,通过<interface context>指定该extension应用在mechnical模块下,通过<toolbar>定义了名称为ToolBar1的工具条,并且通过<entry>定义了按钮入口,也就是该按钮可以执行函数OnClickTB1Button1。同样的按钮还定义了ToolBar2和ToolBar3,并分别绑定了点击这几个按钮所要执行的函数,这些函数均在toolbarsample.py脚本文件中定义。
后面的代码定义了另一个工具条,也即是上面这段代码定义了两个工具条,每个工具条上面分布有三个按钮。
这六个按钮均有相应的函数与之绑定,一旦点击该按钮,便能执行相应的函数,完成某个功能。
定义完成后的extension形式如下所示:
图3
可以看到定义的两个工具条及6个按钮。
上面的XML所定义的接口代码需要通过Python脚本文件的形式来实现。
针对上面按钮所绑定的函数,定义的toolbarsample.py文件内容如下:
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定义了多个函数,其中有按钮所绑定的函数,在这段Py代码中除了用到通常的python语言,也用到了ANSYS Workbench的API函数,例如ExtAPI.Log.WriteMessage(显示信息)。
所有关键的功能也是通过Python语言和API函数联合实现的。一般来说,提供的接口越多,所能做的开发也越复杂,开发起来也容易。
结合xml和py两个文件以及其他一些辅助的,比如背景图片等,就可以完成一个extension的开发,以扩展Workbench的功能。
转自公众号:CAE技术分享
相关标签搜索:Workbench如何做二次开发【转发】 Ansys有限元培训 Ansys workbench培训 ansys视频教程 ansys workbench教程 ansys APDL经典教程 ansys资料下载 ansys技术咨询 ansys基础知识 ansys代做 Fluent、CFX流体分析 HFSS电磁分析 Abaqus培训