最近在学HYPERMESH二次开发.docx

上传人:b****4 文档编号:27244008 上传时间:2023-06-28 格式:DOCX 页数:8 大小:577.04KB
下载 相关 举报
最近在学HYPERMESH二次开发.docx_第1页
第1页 / 共8页
最近在学HYPERMESH二次开发.docx_第2页
第2页 / 共8页
最近在学HYPERMESH二次开发.docx_第3页
第3页 / 共8页
最近在学HYPERMESH二次开发.docx_第4页
第4页 / 共8页
最近在学HYPERMESH二次开发.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

最近在学HYPERMESH二次开发.docx

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

最近在学HYPERMESH二次开发.docx

最近在学HYPERMESH二次开发

 

最近在学HYPERMESH二次开发

最近在学HYPERMESH二次开发,发觉可以用它做很多有用的东西以简化工作。

下面例子讲述的是如何利用hypermesh二次开发在ansys模板下求2d单元面积。

    问题描述:

在Ansys模板下,如果要用下面工具求2d单元面积,则单元必须要有单元类型,如果没有单元类型,则面积不可求,这就有一个麻烦,当我们须要导出ansys的只是三维模型,那么二维单元相对于后面计算来说是不须导出的,所以也不须赋与其单类型,但可能计算时又要用到模型某个面的面积,这样又必须赋与其单元,通常做法是为单元赋与shell93单元类型,那么有没有一种更直接的方法测量任何2d单元的面积,不管它有没有单元类型呢?

这就是本二次开发的一个目的。

  首先,要创要创建一个名称空间,名字InquireArea,如下  namespaceeval:

:

Ansys:

oolKit:

:

InquireArea{    setelem_ids_list[]setarea_sum0  }  该名称空间创建了两个变量,其中elem_ids_list用存放选取的单元ID值,area_sum用来存放最后总的面积,并且作为结果输出。

  下一步,创建一个计算单元面积的过程:

  proc:

:

Ansys:

oolKit:

:

InquireArea:

:

CalculateArea{args}{#声名变量为该名称空间的变量variableelem_ids_listvariablearea_sum0  #计算每一个单元的面积并累加到area_sum中去foreachelem_id$elem_ids_list{  #通过dataname访问每个单元的面积  setcurrent_elem_area[hm_getentityvalueelems$elem_id"area"0]  setarea_sum[expr$current_elem_area+$area_sum]}#这句语句是算完面积清空单元列表,以便下一次求面积set:

:

Ansys:

oolKit:

:

InquireArea:

:

elem_ids_list[]  }  有了计算单元的过程,下一步我们要做什么呢?

当然我们要做是把要求面积的单选取出来,下面这个过程就是选取单元的过程  proc:

:

Ansys:

oolKit:

:

InquireArea:

:

AddElems{args}{  if{[lindex$args0]=="typechangenotify"}{        return;    }    switch[lindex$args0]{        "getadvselmethods"{            *entityhighlighting1            *clearmarkelems1            wmwithdraw.inquireAreaWindow;            *createmarkpanelelems1"Selectelements:

"            wmdeiconify.inquireAreaWindow;            evallappend:

:

Ansys:

oolKit:

:

InquireArea:

:

elem_ids_list[hm_getmarkelems1]            *clearmarkelems1            *entityhighlighting0          if{[llength$:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list]==0}{                tk_messageBox-message"Noelementswereselected.\nPleaseselectelementstoinquirearea"-title"AltairHyperMesh"                return;            }                        return;        }        "reset"{            set:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list[]            return;                    }        default{          return1;                }    }  }  这个过程看起来有点复杂,其实是比较简单的,下面拆解分析下它,      首先,这个proc中部分语句是为gui服务的,GUI编写放在后面,你也可以联合起来看,现在我们只看单元选取的,很简单,就一句语句*createmarkpanelelems1"Selectelements:

",找到了没呢?

有了这条语句,当TCL运行到它时,就会弹出选择面板了  在它下面的一条语句是evallappend:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list[hm_getmarkelems1],这条语句的作用取得刚选取的单元ID值并把它们附到elem_ids_list中去,到这一步为止,elem_ids_list列表已经有东西了,也就是,我们已经把单元选出来了,此时只调用proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

CalculateArea过程,就可以算出面积来了。

  那么下步做什么呢,那当然是要把我们的结果显示出来,有很多种方法,其中最简单的是调用TCL语言TK语句:

  tk_messageBox-message"Areais  :

$:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

area_sum"  -title"InquireArea"-iconinfo这个东西有个坏处,就是你不能复制里面的面积信息,也就是说,你只能看。

  那么我们可以做一简单的GUI,通过entry(输入框)来取得面积信息  上面那个选取单元的过程提到过,那里部分语句是为GUI服务,下面写这个GUI  首先,这个GUI用到hypermeshhwttoolkit,因此第上步加入下面语句  packagerequirehwt;  这样我们就可以大胆用hwt里面的一些控件了  此外还用到hypermesh软件包自带的一过程,我们也要把它SOURCE进来  SourceFile[filejoin[hm_info-appinfoSPECIFIEDPATHhw_tcl_common]"hw""collector""hwcollector.tcl"]好了,下面可能是读者最心的,如何创建一个窗口,通常还是把它放在一个过程里面    proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

InquireAreaWindow{args}{:

:

Ansys:

:

ToolKit:

:

InquireArea:

esroyhwt:

:

CreateWindow.inquireAreaWindow\  -windowtitle"InquireArea"\  -noGeometrySaving\  -cancelButtonCancel\  -helpButtonhelp\    destroyOnUnpost\  -post;#设置窗口最大与最小值wmminsize.inquireAreaWindow400140;wmmaxsize.inquireAreaWindow400140;#如果置顶窗口,加上它吧wmattribute.inquireAreaWindow-topmosttrue#取得空腔,也就窗口里面放控件的地方吧,这是个pathsetbase[hwt:

:

WindowRecess.inquireAreaWindow]#创建一个框架,然后我们才能往里放东西setfra1[frame$base.fra1]#创建了框架,还要把它显示出来吧,下面这语句就是把它显示出来pack$fra1-sidetop-anchornw-fillx-expandfalse#一个框架是不够的,多创建一个吧,反正不用钱的setfra2[frame$base.fra2]pack$fra2-sidetop-anchornw-fillx-expandfalse#创建一个标签,setelem_label[label$fra1.elem_label\    -text"Selectelements:

"\    -font[hwt:

:

AppFont]\    -justifycenter]#显示这个标签,至于里面的选项,不懂可以看TCL的参考书pack$elem_label-sideleft-anchornw-fillnone-expand0-padx4-ipady3#创建选取单元按钮setelems_button[Collector$fra1.addelemsentity1HmMarkCol\        -types"elements"\        -withtype0\        -withReset1\        -callback":

:

Ansys:

:

ToolKit:

:

InquireArea:

:

AddElems"]  #显示它  pack$fra1.addelems-sideleft-padx3-pady5#这里创建一个输入框,你可以从这里复制面积setarea_entry[AddEntry$fra2.areaentry\    -label"Area="\    -labelWidth15\    -entryWidth24\    -validatereal\    -statenormal\    -textVariable:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

area_sum]pack$area_entry-sideleft-anchornw-padx4-pady5  #这里计算面积的按钮,-command调用了我们之前创建的过:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

CalculateArea#这样我们按下它时,就执行这个过程了setget_area_but[button$fra2.getareabut\    -text"Calculate"\    -command:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

CalculateArea]pack$get_area_but-sideleft-anchornw-padx10-pady5-ipadx10-ipady3    }  相对是一个比较长的过程,先看一下效果,如果你是第一次接触GUI,估计不看效果也很头痛的

[]QQ截图20130106194501.jpg(14.36K)

2013/1/1510:

36:

57

  很简,两个entry,两个按钮  好吧,下面我们分析一下吧  :

:

Ansys:

:

ToolKit:

:

InquireArea:

esroy调用一个Desroy的过程,现在还没有写这个过程,接下来就写它吧  proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

esroy{}{      destroy.inquireAreaWindow  }  就一条语句,其中.inquireAreaWindow叫做窗口路径,通过destroy语句,我们把窗口毁了,这样每次我们创建一新的窗口之前,都会先毁一下窗口,保证只有一.inquireAreaWindow显示出来  通过这条语句,我们就可以创建下个窗口了hwt:

:

CreateWindow.inquireAreaWindow\  -windowtitle"InquireArea"\  -noGeometrySaving\  -cancelButtonCancel\  -helpButtonhelp\    destroyOnUnpost\  -post;    有兴趣的可以把这段语句与packagerequirehwt一起放到复制到txt文档,保存为tcl运行一下吧    其中的选项我就不说,已经很很啰嗦啦,可以查看帮助,其它的请看注释最后,加上这条语句:

:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

InquireAreaWindow各个过程就串接起来了      到现在为止,整个开发就完成了,,当然还有许多细节说不到的,请大家原谅    下面给出完整脚本:

  namespaceeval:

:

Ansys:

:

ToolKit:

:

InquireArea{    setelem_ids_list[]setarea_sum0  }packagerequirehwt;SourceFile[filejoin[hm_info-appinfoSPECIFIEDPATHhw_tcl_common]"hw""collector""hwcollector.tcl"]  proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

CalculateArea{args}{variableelem_ids_listvariablearea_sum0foreachelem_id$elem_ids_list{    setcurrent_elem_area[hm_getentityvalueelems$elem_id"area"0]  setarea_sum[expr$current_elem_area+$area_sum]}set:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list[]  }  proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

esroy{}{destroy.inquireAreaWindow  }  proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

InquireAreaWindow{args}{packagerequirehwt:

:

Ansys:

:

ToolKit:

:

InquireArea:

esroyhwt:

:

CreateWindow.inquireAreaWindow\  -windowtitle"InquireArea"\  -noGeometrySaving\  -cancelButtonCancel\  -helpButtonhelp\    destroyOnUnpost\  -post;wmminsize.inquireAreaWindow400140;wmmaxsize.inquireAreaWindow400140;wmattribute.inquireAreaWindow-topmosttruesetbase[hwt:

:

WindowRecess.inquireAreaWindow]setfra1[frame$base.fra1]pack$fra1-sidetop-anchornw-fillx-expandfalsesetfra2[frame$base.fra2]pack$fra2-sidetop-anchornw-fillx-expandfalsesetelem_label[label$fra1.elem_label\    -text"Selectelements:

"\    -font[hwt:

:

AppFont]\    -justifycenter]pack$elem_label-sideleft-anchornw-fillnone-expand0-padx4-ipady3setelems_button[Collector$fra1.addelemsentity1HmMarkCol\        -types"elements"\        -withtype0\        -withReset1\        -callback":

:

Ansys:

:

ToolKit:

:

InquireArea:

:

AddElems"]    pack$fra1.addelems-sideleft-padx3-pady5setarea_entry[AddEntry$fra2.areaentry\    -label"Area="\    -labelWidth15\    -entryWidth24\    -validatereal\    -statenormal\    -textVariable:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

area_sum]pack$area_entry-sideleft-anchornw-padx4-pady5  setget_area_but[button$fra2.getareabut\    -text"Calculate"\    -command:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

CalculateArea]pack$get_area_but-sideleft-anchornw-padx10-pady5-ipadx10-ipady3    }  proc:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

AddElems{args}{  if{[lindex$args0]=="typechangenotify"}{        return;    }    switch[lindex$args0]{        "getadvselmethods"{            *entityhighlighting1            *clearmarkelems1            wmwithdraw.inquireAreaWindow;            *createmarkpanelelems1"Selectelements:

"            wmdeiconify.inquireAreaWindow;            evallappend:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list[hm_getmarkelems1]            *clearmarkelems1            *entityhighlighting0          if{[llength$:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list]==0}{                tk_messageBox-message"Noelementswereselected.\nPleaseselectelementstoinquirearea"-title"AltairHyperMesh"                return;            }                        return;        }        "reset"{            set:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

elem_ids_list[]            return;                    }        default{          return1;                }    }  }:

:

Ansys:

:

ToolKit:

:

InquireArea:

:

InquireAreaWindow下面是运行过程:

  首先,你总得要创建一个TCL文件吧  用文本编辑器把上述代码复制进去,保存为file_name.TCL就可以了  然后在hypermesh菜单File->run->tclscript  然后打开那个文件就OK了  弹出:

[]QQ截图20130106201953.jpg(14.61K)

2013/1/1510:

36:

57

双击elements

[]QQ截图20130106202038.jpg(140.23K)

2013/1/1510:

36:

57

选择单元(图中白色显示)

[]QQ截图20130106202058.jpg(15.34K)

2013/1/1510:

36:

57

单击Calculate按钮就可以计算面积了,共同学习,共同进步!

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

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1