在CAE仿真工程师的日常工作中,你是否经常遇到这样的场景:
项目交付前,需要抽查一批历史计算模型(FEM文件),检查网格质量、边界条件或进行结果后处理。面对成百上千个文件,手动一个个导入、切换视角、截图、保存……不仅耗时耗力,还容易因为枯燥的重复劳动导致漏截或错截。
如果一个重复性的工作超过5次,我们就应该寻找自动化的方法。 今天,我们将通过一段实用的HyperMesh TCL二次开发代码,教你如何实现 “批量随机抽取FEM文件 + 自动导入 + 一键截图” ,让HyperMesh替你完成这些枯燥的“摸鱼”工作!
下面这段代码是一个完整的自动化脚本框架,主要分为“文件检索与随机抽样”和“循环导入与截图”两大逻辑块。
if 1 {
# 1. 指定多个目标文件夹路径
set dirs [list \
"result_out_20260608" \
"result_out_20260608-1" \
"result_out_20260608-2"]
# 2. 遍历文件夹,收集所有.fem文件并去重排序
set femList [list]
foreach d $dirs {
set tmp [glob -nocomplain $d/*.fem]
set femList [concat$femList$tmp]
}
set femList [lsort -unique $femList]
# 3. 容错处理:如果没有找到文件,直接退出
if {[llength$femList] == 0} {
puts"找不到任何fem文件,脚本退出"
return
}
# 4. 设置抽取数量,并兼容HM环境的随机抽取逻辑
set pickNum 30
set total [llength$femList]
set selFem [list]
while {[llength$selFem] < $pickNum && [llength$selFem] < $total} {
set rndIdx [expr int(rand() * $total)]
set target [lindex$femList$rndIdx]
if {[lsearch$selFem$target] == -1} { lappend selFem $target }
}
} 💡 亮点说明:
glob -nocomplain 可以安全地跨多个文件夹检索文件,即使某个文件夹为空也不会报错中断。lsort -unique 保证文件列表不重复;在随机抽取时,使用 lsearch 判断已选列表,确保抽出的30个模型绝对不重样。while + rand() 的经典写法代替 shuffle,保证了脚本在HM中的稳定运行。 foreach fem $selFem {
# 1. 静默清理当前模型,避免弹窗打断自动化流程
hm_answernext yes
*deletemodel
# 2. 配置导入参数并导入FEM文件
*feinputpreserveincludefiles
*createstringarray 13 "OptiStruct " " " "ANSA " "PATRAN " "EXPAND_IDS_FOR_FORMULA_SETS " \
"ASSIGNPROP_BYHMCOMMENTS " "LOADCOLS_DISPLAY_SKIP " "VECTORCOLS_DISPLAY_SKIP " \
"SYSTCOLS_DISPLAY_SKIP " "CONTACTSURF_DISPLAY_SKIP " "\[DRIVE_MAPPING=\] " \
"CREATE_PART_HIERARCHY " "IMPORT_MATERIAL_METADATA "
*feinputwithdata2 "\#optistruct\\optistruct""$fem"0000011310
# 3. 切换标准等轴测视角并自动截图
*view "iso1"
*screencopy
}
puts "执行完毕,共处理[llength $selFem]个fem" 💡 亮点说明:
hm_answernext yes 配合 *deletemodel 是自动化脚本的标配,它能自动确认删除提示,让脚本实现真正的“无人值守”。*view "iso1" 确保每次截图的视角完全一致,方便后续进行统一的网格质量评审或汇报展示。二次开发并不是程序员的专属,而是仿真工程师提升效率的“外挂”。从几行简单的TCL代码开始,把重复劳动交给软件,把思考的时间留给真正的工程设计。
互动话题:你在HyperMesh中最头疼的重复性工作是什么?欢迎在评论区留言,我们一起探讨如何用代码解决它!