3. HyperMesh命令体系与API入门
在HyperMesh中做批处理与脚本自动化,第一步不是急着写代码,而是先弄清楚“命令从哪里来、参数怎么给、脚本怎么生成”。HyperMesh的命令体系可以理解为三层:最上层是图形界面按钮,中间层是Tcl命令与HyperMesh专用命令,最底层是求解器接口与文件读写。图形界面上的每一次点击,本质上都在调用一条或多条Tcl命令;而脚本录制回放机制,正是把界面操作翻译成Tcl命令并保存为可重复执行文件的过程。理解这三层关系,才能从“点鼠标”过渡到“写脚本”。
一、常用命令分类:按功能域建立索引
HyperMesh的Tcl命令数量庞大,但按功能域归类后并不难记。常用命令大致可分为六类:
- 模型与实体操作类:如
*createentity、*deleteentity、*renameentity,用于创建、删除、重命名组件、材料、属性等实体。 - 网格与几何类:如
*elementcreate、*mesh、*surfacemesh,用于生成单元、划分网格、处理几何。 - 选择与集合类:如
*createmark、*clearmark、*markentity,用于构建选择集,是批处理中最关键的“数据入口”。 - 查询与信息类:如
*getentity、*queryentity、*countentity,用于读取模型信息、统计数量、获取ID。 - 文件与导出类:如
*writefile、*export、*feoutput,用于保存模型、导出求解器文件。 - 流程控制与界面类:如
if、foreach、proc、*display,用于编写逻辑、封装函数、控制显示。
其中,*createmark 与 *getentity 是批处理脚本的“左右手”:前者把一批对象标记为操作目标,后者把对象信息读出来供判断或计算。很多初学者写脚本失败,不是命令拼错,而是没有先建立正确的mark集合,导致后续命令找不到操作对象。
二、命令查询方法:从帮助到命令行
HyperMesh提供了多种命令查询途径。最直接的是 Command Browser(命令浏览器),在菜单栏 View → Command Browser 打开,可按功能分类浏览所有Tcl命令,点击某条命令即可看到语法、参数说明和示例。第二种是 Help 文档中的 HyperMesh Tcl Commands 章节,适合系统查阅。第三种是在HyperMesh命令行窗口直接输入 help 命令名,例如 help *createmark,会返回该命令的简要用法。第四种是脚本录制后反向阅读,录制生成的代码本身就是最贴近实际操作的命令示例。
*createmark、*getentity、*elementcreate、*writefile 四条命令的帮助页先读一遍,它们覆盖了“选对象—读信息—建单元—存文件”这条最小闭环。三、命令参数解析:以 *createmark 为例
HyperMesh命令的参数通常遵循“命令名 + 操作对象类型 + 标记号 + 选择方式 + 具体值”的结构。以最常用的 *createmark 为例:
*createmark components 1 "by id" 100 101 102
*createmark elements 2 "by collector" "shell_plate"
*createmark nodes 1 "by surface" 5
第一行表示:在 components 类型上创建标记号 1,选择方式为 "by id",具体ID为100、101、102。第二行表示:在 elements 上创建标记号 2,按collector名称 "shell_plate" 选择。第三行表示:在 nodes 上创建标记号 1,按surface ID 5选择。
参数解析的关键在于三点:对象类型决定后续命令能操作什么;标记号是临时选择集的编号,同一脚本中不同标记号互不干扰;选择方式决定是按ID、按collector、按面还是按坐标范围。理解这三者,就能把界面上的“选择”翻译成脚本里的“mark”。
再以 *getentity 为例:
set elemList [*getentity elements 1]
set compName [*getentity components 1 name]
第一行把标记号1中的单元ID列表读入变量 elemList;第二行读取标记号1中组件的名称。注意:*getentity 读取的是当前mark集合中的对象,因此必须先 *createmark,再 *getentity,顺序不能颠倒。
四、脚本录制回放机制:从操作到代码
HyperMesh的脚本录制通过 Scripting → Record 启动,选择保存路径后,界面上的每一步操作都会被翻译成Tcl命令写入文件。录制结束后用 Scripting → Play 回放,或直接在命令行 source 脚本名.tcl 执行。录制回放的核心价值在于:它把“界面操作”变成“可重复、可修改、可批量”的代码。
但录制脚本不能直接用于生产,原因有三:一是录制会记录大量界面状态命令,冗余且依赖当前模型状态;二是录制中的选择往往按屏幕坐标或临时ID,换一个模型就失效;三是录制不会自动加入循环和判断。因此,实际批处理脚本通常以录制代码为起点,再手工替换为 *createmark 按ID或collector选择,并加入 foreach 循环与 if 判断。
五、从录制到可复用脚本:一个最小示例
假设要对一个名为 plate_mesh 的组件中所有单元执行“按collector选择—统计数量—导出”的操作。录制得到的原始代码可能包含大量界面状态命令,手工整理后可以写成:
*createmark elements 1 "by collector" "plate_mesh"
set n [*getentity elements 1]
puts "单元数量: [llength $n]"
*createmark elements 1 "by collector" "plate_mesh"
*feoutput "C:/work/plate_mesh.nas" 1 1 1 1 1 1
这段脚本中,*createmark 建立选择集,*getentity 读取ID列表,llength 统计数量,*feoutput 导出Nastran文件。运行后可在命令行看到单元数量输出,并在指定路径找到导出文件。判断脚本是否成功,一看命令行有无报错,二看导出文件是否存在且大小合理,三可重新导入检查单元数量是否一致。