python调用hypermesh调用tcl_TCL/TK编程之语法与hypermesh api讲解
TCL/TK編程語法上一篇文章講了TCL命令的處理規則,那么這篇文章就說一說TCL的三大替換和兩大引用。三大替換:變量替換、命令替換、反斜線替換。兩大引用:雙括號引用、大括號引用。變量替換每種替換會把單詞中的一些原始字符替換為另外一些值。變量替換由"$"符號引發如下:set kgrams 20expr?$kgrams*2.2046#輸出為44.092上面兩行代碼,第一行將變量kgrams賦值為20,第二行為將變量kgrams的值與2.2046相乘。其中"$kgrams"即為變量替換。變量替換的目的是取值,即將$kgrams替換為20。expr?$result*$base#兩個變量的值相乘,其中expr為數學運算命命令替換
命令替換是把一個單詞的部分或者全部替換為一個命令的結果。命令替換通過方括號"[]"表示。set kgrams 20set?lbs?[expr?$kgrams*2.2046]
上面代碼中第二行,方括號是對命令進行取值,即取方括號內的返回值。并將值賦值給變量lbs反斜線替換
反斜線也是取值,但是反斜線取的是在TCL中具有特殊意義的字符例如"[, $, \"等等。set msg Eggs:\ \$2.18/dozen\nGasoline:\ \$2.49/gallon#輸出:Eggs:?$2.18/dozen# Gasoline: $2.49/gallon
上面代碼中使用"\"取到了空格符、$、?換行符。下表為可反斜線替換的字符:雙引號引用
TCL提供了一些方法,可以阻止解析器對$和分號等字符進行特殊處理。這些方法被稱為引用。雙引號引用可以取消單詞和命令分隔符的特殊解釋。大括號引用取消所有特殊字符的特殊解釋。
雙括號引用會將空格、制表符、換行符以及分號都當做普通處理set?msg?"Eggs:?\$2.18/dozen\nGasoline:?\$2.49/gallon"#這行代碼中空格符被解釋為普通字符,因為有雙引號所以就不需要在空格符前加"\"set?msg?Eggs:?\$2.18/dozen\nGasoline:?\$2.49/gallon#如果去掉雙引號,則會報錯
大括號引用
大括號引用將取消所有特殊字符的特殊意義。set?msg?{"Eggs:?\$2.18/dozen\nGasoline:?\$2.49/gallon"}#輸出:?"Eggs: \$2.18/dozen\nGasoline: \$2.49/gallon"#取值的雙引號,空格,反斜線等全部都被當做普通字符處理
hypermesh api講解代碼:#本腳本運行在nastran模板下,先獲取當前模板名稱set solver_name [hm_getsolver]puts $solver_name#判斷當前模板是否是nastran模板,如果不是,提示修改模板if {$solver_name == "nastran"} {#獲取hypermesh全部component名稱,hm_entitylist comps name的返回值是列表set comps_name_list [hm_entitylist comps name]set num_comps [llength $comps_name_list]#對component進行循環for {set i 0} {$i
下面為使用到的hypermesh api:hm_getsolverhm_entitylist comps name*createmark comps 1 $cur_comp_namehm_getmark comps 1*deletemark components 1hm_getsolver
set solver_name [hm_getsolver]set solver_name [hm_getsolver name]set solver_id [hm_getsolver id]
獲取hypermesh當前模板,命令后不跟參數時,默認返回模板名稱(nastran、abaqus、lsdyna),也可以跟字符串"id"則返回模板ID。hm_entitylist
hm_entitylist nodes idhm_entitylist comps nameif { [ catch {command_name...} ] } {# Handle error}
返回entity的名稱或者id列表。其中entity包括component、element、node、met、property等。通過這個命令可以獲取制定entity所有的名稱或者id。*createmark
mark在hypermesh二次開發中是一種容器,他可以以各種的方式存放各種entity的全部或者部分內容。
hypermesh api的mark容器一共有兩個且只有兩個,如同兩個杯子,他們的ID分別為1和2。但是卻可以在同一個ID的容器中存放不同的entity。*createmark elems 1 "all"*createmark elems 2 "all"*createmark?nodes?1?"all"*createmark nodes 2 "all"*createmark comps 1 "display"*createmark comps 2 "display"
存放entity的方式也多種多樣*createmark elems 1 "all"*createmark elems 1 "displayed"*createmark elems 1 "retrieve"*createmark elems 1 "by assem id" 10 20*createmark elems 1 "by comp id" 20*createmark comps 1 "by name only" X Y*createmark elems 1 "by comps on mark" 1
以上只列舉了部分entity和存放方式,更多詳情還可以參考幫助文檔。*createmark可以說是hypermesh二次開發最重要的api。
hm_getmark是獲取mark中保存的entity,*deletemark則是刪除mark中保存的entity
總結
以上是生活随笔為你收集整理的python调用hypermesh调用tcl_TCL/TK编程之语法与hypermesh api讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 破解Navicat并登录MySQL方法
- 下一篇: 中国联通6G白皮书笔记