最近在学HYPERMESH二次开发.docx

上传人:牧羊曲112 文档编号:5334508 上传时间:2023-06-27 格式:DOCX 页数:11 大小:192.36KB
返回 下载 相关 举报
最近在学HYPERMESH二次开发.docx_第1页
第1页 / 共11页
最近在学HYPERMESH二次开发.docx_第2页
第2页 / 共11页
最近在学HYPERMESH二次开发.docx_第3页
第3页 / 共11页
最近在学HYPERMESH二次开发.docx_第4页
第4页 / 共11页
最近在学HYPERMESH二次开发.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《最近在学HYPERMESH二次开发.docx》由会员分享,可在线阅读,更多相关《最近在学HYPERMESH二次开发.docx(11页珍藏版)》请在三一办公上搜索。

1、最近在学HYPERMESH 二次开发,发觉可以用它做很多有用的东西以简化工作。下面例子讲述 的是如何利用hypermesh二次开发在ansys模板下求2d单元面积.问题描述:在Ansys模板下,如果要用下面工具求2d单元面积,则单元必须要有单 元类型,如果没有单元类型,则面积不可求,这就有一个麻烦,当我们须要导出ansys的只是三维模型,那么二维单元相对于后面计算来 说是不须导出的,所以也不须赋与其单类型,但可能计算时又要用到模型某个面的面积,这样又必须赋与其单元,通常做法是为单元赋与shell 93单元类型,那么有没有一种更直接的方法测量任何2d单元的面积,不管它有没有单元类型呢?这就是本二

2、次开发 的一个目的。:无、往蹋7项a x月啥右药孝如m窗遂七坦卧幽a林口lomon也 |口 lomtH |=0 . D 0 UL Suilg 女0 0 0 D广 xli。,mast -0 0 0 D=Fi rwrtVv.ri 1-E.j.Cfli首先,要创要创建一个名称空间,名字InquireArea,如下M |namespace eval : : Ansys: -*oolKit:: InquireArea set elem_ids_list set area_sum 0该名称空间创建了两个变量,其中elem_ids_list用存放选取的单元ID值,area_sum 用来存放最后总的面积,并且

3、作为结果输出。下一步,创建一个计算单元面积的过程:pp Iproc : : Ansys: -,oolKit:InquireArea:: CalculateArea args 祥声名变量为该名称空间的变量variable elem_ids_listvariable area_sum 0祥计算每一个单元的面积并累加到area_sum中去foreach elem_id $elem_ids_list 祥通过dataname访问每个单元的面积set current_elem_area hm_getentityvalue elems $elem_id area” 0 set area_sum expr $

4、current_elem_area + $area_sum 祥这句语句是算完面积清空单元列表,以便下一次求面积set : Ansys:割oolKit: :InquireArea: elem_ids_list 口有了计算单元的过程,下一步我们要做什么呢?当然我们要做是把要求面积的单选取 出来,下面这个过程就是选取单元的过程PI? Iproc : : Ansys: oolKit:: InquireArea: :AddElems args if lindex $ args 0 = typechangenotify return;switch lindex $args 0 getadvselmetho

5、ds *entityhighlighting 1*clearmark elems 1wm withdraw 。 inquireAreaWindow;大createmarkpanel elems 1 Select elements:” wm deiconify .inquireAreaWindow;M |eval lappend : :Ansys:oolKit: :InquireArea: :elem_ids_list hm_getmark elems 1 *clearmark elems 1 *entityhighlighting 0if llength $:Ansys:ToolKit: :I

6、nquireArea: :elem_ids_list = 0 tk_messageBox -message No elements were selected.n Please select elements to inquire area -title Altair HyperMeshreturn; return;reset set :Ansys:ToolKit:InquireArea:: elem_ids_list return;default return 1;这个过程看起来有点复杂,其实是比较简单的,下面拆解分析下它,首先,这个proc中部分语句是为gui服务的,GUI编写放在后面,你

7、也可以联 合起来看,现在我们只看单元选取的,很简单,就一句语句 *createmarkpanel elems 1 Select elements:,找到了没呢? 有了这条语句,当TCL运行到它时,就会弹出选择面板了在它下面的一条语句是 eval lappend : Ansys: :ToolKit: InquireArea: elem_ids_list hm_getmark elems 1 ,这条语句的作用取得刚选取的单元ID值并把它们附到elem_ids_list中去,到这一步为止,elem_ids_list 列表已经有东西了,也就是,我们已经把单元选出来了,此时只调用proc : :Ansy

8、s:ToolKit:InquireArea: :CalculateArea 过程,就可以算出 面积来了。那么下步做什么呢,那当然是要把我们的结果显示出来,有很多种方法,其中最简单的是 调用TCL语言TK语句:tk_messageBox message Area is :$: Ansys:ToolKit: :InquireArea:area_sum -title ” Inquire Area -icon info 这个东西有个坏处,就是你不能复制里面的面积信息,也就是说,你只能看.那么我们可以做一简单的GUI,通过entry (输入框)来取得面积信息上面那个选取单元的过程提到过,那里部分语句是为

9、GUI服务,下面写这个GUI首先,这个GUI用到hypermesh hwt toolkit,因此第上步加入下面语句package require hwt;这样我们就可以大胆用hwt里面的一些控件了此外还用到hypermesh软件包自带的一过程,我们也要把它SOURCE进来SourceFile file join hm_infoappinfo SPECIFIEDPATH hw_tcl_common hw collector hwcollector.tcT好了,下面可能是读者最心的,如何创建一个窗口,通常还是把它放在一个过程里面 proc : :Ansys: ToolKit: InquireAre

10、a:InquireAreaWindow args :Ansys: :ToolKit: InquireArea: esroyhwt: CreateWindow 。 inquireAreaWindow -windowtitle Inquire Area ” -noGeometrySaving cancelButton Cancel helpButton help destroyOnUnpost post;#设置窗口最大与最小值wm minsize .inquireAreaWindow 400 140;wm maxsize .inquireAreaWindow 400 140;祥如果置顶窗口,加上它

11、吧wm attribute 。 inquireAreaWindow topmost true祥取得空腔,也就窗口里面放控件的地方吧,这是个pathset base hwt: WindowRecess 。 inquireAreaWindow 祥创建一个框架,然后我们才能往里放东西 set fra1 frame $base。 fra1 #创建了框架,还要把它显示出来吧,下面这语句就是把它显示出来pack $fra1 -side top -anchor nw -fill x expand false#一个框架是不够的,多创建一个吧,反正不用钱的set fra2 frame $base.fra2 pa

12、ck $fra2 side top -anchor nw -fill x expand false 祥创建一个标签,set elem_label label $fra1。 elem_label -text ” Select elements : -font hwt: AppFont justify center 祥显示这个标签,至于里面的选项,不懂可以看TCL的参考书pack $elem_label side left -anchor nwfill none expand 0 -padx 4 ipady 3 祥创建选取单元按钮set elems_button Collector $fra1。

13、addelems entity 1 HmMarkCol -types ” elements -withtype 0 -withReset 1 -callback ” : Ansys: :ToolKit:InquireArea:: AddElems#显示它pack $fra1。 addelems -side left -padx 3 pady 5 祥这里创建一个输入框,你可以从这里复制面积set area_entry AddEntry $fra2。 areaentry -label Area = -labelWidth 15 -entryWidth 24 -validate real state

14、 normal -textVariable : :Ansys: ToolKit: InquireArea: area_sum pack $area_entry -side left anchor nw -padx 4 -pady 5#这里计算面积的按钮,-command调用了我们之前创建的过:Ansys:ToolKit:: InquireArea::CalculateArea祥这样我们按下它时,就执行这个过程了set get_area_but button $fra2。 getareabut text Calculate command :Ansys: :ToolKit: :InquireAr

15、ea: CalculateAreapack $get_area_but -side left -anchor nwpadx 10 pady 5 ipadx 10 ipady 3相对是一个比较长的过程,先看一下效果,如果你是第一次接触GUI,估计不看效果 也很头痛的很简,两个entry,两个按钮 好吧,下面我们分析一下吧Ansys: ToolKit: InquireArea:.-esroy调用一个Desroy的过程,现在还没有写这个过程,接下来就写它吧proc :Ansys:ToolKit::InquireArea.-esroy destroy .inquireAreaWindow就一条语句,其

16、中.inquireAreaWindow叫做窗口路径,通过destroy语句,我们把窗 口毁了,这样每次我们创建一新的窗口之前,都会先毁一下窗口,保证只有一 .inquireAreaWindow显示出来通过这条语句,我们就可以创建下个窗口了hwt: CreateWindow 。 inquireAreaWindow -windowtitle ” Inquire Area ” noGeometrySaving -cancelButton Cancel -helpButton help destroyOnUnpost post;有兴趣的可以把这段语句与package require hwt 一起放到复

17、制到txt文档,保存 为tcl运行一下吧其中的选项我就不说,已经很很啰嗦啦,可以查看帮助,其它的请看注释最后,加上这条语句::Ansys:ToolKit::InquireArea::InquireAreaWindow各个过程就串接起来了到现在为止,整个开发就完成了,当然还有许多细节说不到的,请大家原谅下面给出完整脚本:namespace eval :Ansys: :ToolKit: InquireArea set elem_ids_list set area_sum 0package require hwt;SourceFile file join hm_info appinfo SPECIF

18、IEDPATH hw_tcl_common hw collector” ” hwcollector.tcl” proc : Ansys: :ToolKit:InquireArea: CalculateArea args variable elem_ids_listvariable area_sum 0foreach elem_id $elem_ids_list set current_elem_area hm_getentityvalue elems $elem_id area 0 set area_sum expr $current_elem_area + $area_sum set : :

19、 Ansys:ToolKit:: InquireArea:elem_ids_list destroy 。 inquireAreaWindowproc : Ansys: ToolKit:InquireArea:esroy proc : : Ansys: ToolKit: InquireArea: :InquireAreaWindow args package require hwtS n 1:Ansys: ToolKit: :InquireArea: Jesroy hwt:CreateWindow 。 inquireAreaWindow -windowtitle ” Inquire Area ”

20、 -noGeometrySaving cancelButton Cancel helpButton help destroyOnUnpost -post;wm minsize .inquireAreaWindow 400 140;wm maxsize .inquireAreaWindow 400 140;wm attribute .inquireAreaWindow topmost trueset base hwt: :WindowRecess 。 inquireAreaWindow set fral frame $base。fral pack $fra1 -side top -anchor

21、nw fill x -expand false set fra2 frame $base。 fra2 pack $fra2 -side top anchor nw -fill x expand false set elem_label label $fra1。 elem_label text ” Select elements :” -font hwt: :AppFont -justify center pack $elem_label side left -anchor nw -fill noneexpand 0 -padx 4ipady 3 set elems_button Collect

22、or $fra1.addelems entity 1 HmMarkCol -types ” elements withtype 0 -withReset 1 -callback : Ansys: :ToolKit: InquireArea: AddElems” pack $fra1.addelems -side left -padx 3 -pady 5 set area_entry AddEntry $fra2。 areaentry label ” Area = labelWidth 15 -entryWidth 24 validate real state normal -textVaria

23、ble : :Ansys: ToolKit: InquireArea: area_sum pack $area_entry side left -anchor nw -padx 4 pady 5set get_area_but button $ fra2.getareabut -text Calculate” -command : :Ansys: ToolKit: InquireArea:: CalculateArea pack $get_area_but -side left anchor nw padx 10 pady 5 ipadx 10 ipady 3proc : Ansys: Too

24、lKit: InquireArea:: AddElems args if lindex $ args 0 = typechangenotify” return; switch lindex $args 0 ” getadvselmethods *entityhighlighting 1 大clearmark elems 1 wm withdraw .inquireAreaWindow; *createmarkpanel elems 1 Select elements: wm deiconify 。 inquireAreaWindow; eval lappend ::Ansys::ToolKit

25、::InquireArea: elem_ids_list hm_getmark elems 1 大entityhighlighting 0if llength $: Ansys: ToolKit: InquireArea: elem_ids_list = 0 tk_messageBox -message ” No elements were selectedo n Please select elements to inquire area -title Altair HyperMesh return;return;reset set : : Ansys: ToolKit:InquireAre

26、a: :elem_ids_list 口 return;default return 1;:Ansys: ToolKit: InquireArea: InquireAreaWindow下面是运行过程:首先,你总得要创建一个TCL文件吧用文本编辑器把上述代码复制进去,保存为file_name。TCL就可以了然后在hypermesh菜单File一runtclscript然后打开那个文件就OK 了弹出:选择单元(图中白色显示)单击Calculate按钮就可以计算面积了,共同学习,共同进步!!I .心肘.f j JiL L J JBVa rrj二-S-? JW-=aja*143|DS J aaoBufts j a|UQlLOp 0卬*恶口。密塞-如3州闷,笛。5褶;0 寻 X T 号 F FL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号