前几期我们拿到了“钥匙”(Model),也学会了用“购物车”(Collection)选中对象。现在,假设你要把 100 个材料的密度改成 7.85,或者把所有焊点的类型改成 ACM。在 Tcl 里,这需要你精通 *setvalue 命令并熟记各种生僻的 Data Name。但在 HyperMesh 2026 的 Python API 中,实体“活”了过来。修改属性就像给变量赋值一样简单——IDE 甚至会通过下拉菜单告诉你有哪些属性可改。
老手们都懂,用 Tcl 修改一个属性是多么痛苦:
先去 Help 文档查这个实体的 Data Name(比如杨氏模量是 E 还是 YoungsModulus?)。
拼凑出像 *setvalue mats id=1 STATUS=2 100.0 这样晦涩的句子。
一旦拼错一个字母,整个脚本报错。
Python 的革命性变化:实体(Entity)不再是一个冷冰冰的 ID 数字,它是一个对象。对象自带属性(Attributes),你只需要用 “点” 就能点出来。
让我们试着修改一个材料的参数。
import hm
import hm.entities as ent
# 1. 获取一个现有的材料对象 (假设 ID 为 1)
my_mat = ent.Material(hm.Model(), 1)
# 2. 【读】获取当前属性
print(f"当前密度: {my_mat.Rho}")
print(f"当前名称: {my_mat.name}")
# 3. 【写】直接赋值修改
my_mat.Rho = 7.85e-9 # 修改密度
my_mat.name = "Steel_S355 # 修改名称
my_mat.color = 12 # 修改颜色为红色
# 不需要任何 *update 命令,修改即时生效!
3. 批量修改:配合 Collection 的威力
还记得上一期的 Collection 吗?现在我们把它们结合起来。场景:把所有名字里带 "Rubber" 的材料,杨氏模量统一改为 500。
model = hm.Model()
# 1.筛选出目标材料
rubbers = hm.Collection(
model,
hm.FilterByAttribute(
ent.Material,
"name *='Rubber'"
)
)
# 2. 循环修改
for mat in rubbers:
# 甚至可以加个判断逻辑
if mat.E > 1000:
mat.E = 500
print(f"已修正材料: {mat.name}")
除了修改属性(名词),我们经常还需要对实体做动作(动词),比如删除、重命名、移动。这些操作通常封装在 Model 类 的方法中。
Python API 的最大魅力之一,就是把“数据”变成了“对象”。你不再需要去背诵那些晦涩的 Data Name,利用 IDE 的自动补全(IntelliSense),你可以像浏览菜单一样探索一个实体到底有哪些属性可以修改。这极大地降低了编写脚本的记忆负担。
👉 下期预告:
“道理我都懂,但有些复杂操作(比如网格切分、几何抽取)我实在猜不到 Python 函数名叫什么,怎么办?”难道还要去查那本 2000 页的帮助文档吗?不!下一期我们将介绍 HyperMesh 2026 的“影分身”功能 —— 录制器 (Recording)。教你如何把鼠标操作直接变成 Python 代码,彻底解放双手!