当前位置:首页>python>《HM Python 进化论Vol.3》告别 createmark!用 Python Collection 优雅地“点名”

《HM Python 进化论Vol.3》告别 createmark!用 Python Collection 优雅地“点名”

  • 2026-10-12 22:36:26
《HM Python 进化论Vol.3》告别 createmark!用 Python Collection 优雅地“点名”

前两期我们搞定了环境(Python Window)和钥匙(Model对象)。现在,面对模型里成千上万的节点和单元,我们如何精准地“抓住”我们想要的那一部分?Tcl 老手肯定对 *createmark 又爱又恨:它只有两个“卡槽”(1号和2号),逻辑稍微复杂点就得反复清空、覆盖。今天,我们将介绍 HyperMesh 2026 的实体选择神器 —— Collection(集合)。它像一个无限容量的智能购物车,让你的筛选逻辑像做数学题一样简单。

1. 痛点:被 *createmark 支配的恐惧

在 Tcl 时代,我们像是在玩杂耍,手里只能同时扔两个球(Mark 1 和 Mark 2)。如果你想做这件事:“选中 A 集合,减去 B 集合,再和 C 集合取交集”,在 Tcl 里你得写几十行代码来倒腾这两个 Mark ID。

在 Python 2026 中,Collection 对象解决了这个问题。

  • 无限数量:你可以创建 col_A, col_B, col_final 无数个变量。

  • 持久存在:除非你主动删除,否则它们一直在内存里,随时待命。

2. 基础操作:拿起你的“购物车”

创建一个集合,就像是推一辆购物车。最简单的用法是“全部装进去”。

Python    代码示例

import hm
import hm.entities as ent

model = hm.Model()

# 我要选中模型里所有的单元
# Tcl: *createmark elements 1 "all"
all_elems = hm.Collection(
 model,
 ent.Element
)

print(f"选中了 {len(all_elems)} 个单元")

3. 进阶筛选:Filter (过滤器)

当然,我们很少需要全选。我们需要的是精准打击。Python API 使用 hm.FilterBy... 系列类来充当“筛子”。

场景 1:只选特定 ID 的单元

Python    代码示例

# 目标:选中 ID 为 101, 102, 103 的单元
# Tcl: *createmark elements 1 "by id" 101 102 103

# Python: 使用 FilterByEnumeration (枚举过滤器)
target_ids = [101, 102, 103]
my_col = hm.Collection(
  model,
 hm.FilterByEnumeration(
   ent.Element,
   ids=target_ids
 )
)

场景 2:选中某个 Component 里的所有单元

这是一个非常经典的“套娃”操作:先选 Component,再通过 Component 找 Element。

Python    代码示例

# 1. 先选中名为 "B_Pillar" 的组件
comps = hm.Collection(
  model,
  hm.FilterByAttribute(
    ent.Component,
    name='B_Pillar
  )
)

# 2. 再选中属于这些组件的单元
# FilterByCollection:意思就是“依据另一个集合来筛选”
elems_in_comp = hm.Collection(
  model,
 hm.FilterByCollection(
   ent.Element,
   ent.Component
   comps
 )
)

4.集合运算:数学课没白上

这是 Python 最爽的地方。你可以直接对集合进行加减法!

  • 并集 (+):把两个选区合在一起。

  • 差集 (-):从一堆里剔除掉一部分。

Python    代码示例

# 假设我们有两个集合
col_A = hm.Collection(model, ...) # 比如:所有六面体
# 实例化
col_B = hm.Collection(model, ...) # 比如:质量差的单元

# ✅ 需求:从六面体中,剔除掉质量差的
final_col = col_A - col_B

# ✅ 需求:把两个区域合并
total_col = col_A + col_B

# 执行删除操作
model.delete(final_col)

5. 遍历:一个一个数

选中了集合后,我们经常需要遍历它,查看每个实体的属性。

Python    代码示例

# 打印集合中每个单元的 ID
for e in my_col:
 print(f"单元ID: {e.id}, 颜色: {e.color}")

结语

Python 的 Collection 不仅仅是 Tcl mark 的替代品,它是对选择逻辑的一次降维打击。记住三个关键词:Filter(筛选)、Set(运算)、Object(持久对象)。掌握了这三点,你就掌握了 HyperMesh 自动化的半壁江山。


👉 下期预告:

东西选好了,接下来该动刀子了。我想把选中的节点向 X 轴移动 10mm,或者把选中的单元放入一个新的 Component。下一期,我们将进入**《实战篇:修改与编辑》**,看看 Python 如何操控模型发生改变。

公众号

知识星球

扫码关注

科趣范,让科研更简单

小红书

抖音

最新文章

随机文章