把214次手工点击变成1次回车:PyCATIA几何特征识别与批量自动化实战
【免费下载链接】pycatiapython module for CATIA V5 automation项目地址: https://gitcode.com/gh_mirrors/py/pycatia
如果你的工作日志里出现过这样一行记录——"在曲面上逐一点选,补做法线标记",那你基本已经中了 CATIA 二次开发的"毒":明知道有更快的办法,却总被项目节奏推着继续重复劳动。上个月我帮同事处理一台空气净化器弧形外壳的曲面法向检查,外壳上需要布 214 个采样点并逐个生成法线。他用鼠标点了大半天,中途数错两次,最后交到我手上时,我用 PyCATIA 写了 35 行脚本,3 分钟跑完全部特征识别、法线生成和命名。这篇文章不讲大道理,就把这条脚本从动机到落地完整拆给你看,包括我踩过的坑。
先看结果,再讲原理
下面这张图,是脚本运行后 CATIA 里的真实画面:外壳曲面上均匀分布的采样点全部自动生成,法线方向被逐一标出。过去人工需要数小时的操作,现在从"识别曲面特征"到"批量出线"一条命令走完。
一句话原理:PyCATIA 是 CATIA V5 COM 接口的 Python 封装。脚本并不"理解"曲面,它只是替你把鼠标点击翻译成一个个 COM 调用——选中什么、创建什么、判断什么,全部由
HybridShapeFactory这个"几何工厂"代劳。
它凭什么能跑:给曲面插一排"刺猬的刺"
理解这条脚本,只需要一个画面:把曲面想象成一块展开的布,法线就是垂直扎在布面上的刺。手工操作是"用眼睛找到位置→点一下→拉一条线",脚本做的则是三件事:
- 认刺:遍历几何集里的所有特征,用
get_geometrical_feature_type问一句"你是什么"——点、线、曲线、曲面,一问便知,这就是几何特征识别。 - 找对刺:只留下类型为"点"的特征,其余一律跳过。
- 扎刺:对每个点调用
add_new_line_normal,一句话同时完成"定起点、定长度、定朝向"。
整个流程没有任何玄学。你手工做的是"看到一个点,拉一条线",脚本做的是"遍历所有点,循环拉线"。唯一的差别在于:循环不需要休息、不会手抖、不会数错数。
完整脚本:识别+批量出线,35行搞定
下面这条脚本可以直接复制使用。运行前请保证 CATIA 已打开、当前文档是一个含曲面和点几何集的 CATPart。脚本会依次弹出两次选择框:先选曲面,再选装有采样点的几何集,然后自动完成剩余全部工作。
from pycatia import catia, GeometricalFeatureType from pycatia.mec_mod_interfaces.hybrid_shape import HybridShape from pycatia.mec_mod_interfaces.part_document import PartDocument LINE_LENGTH = 25 # 法线半长,单位 mm,按需调整 # 1. 连接正在运行的 CATIA,拿到当前零件文档 app = catia() doc: PartDocument = app.active_document part = doc.part hsf = part.hybrid_shape_factory # 几何工厂:所有"造点造线"都从它这走 # 2. 新建一个几何集,用来收纳生成的法线 line_set = part.hybrid_bodies.add() line_set.name = "AutoNormals" # 3. 交互选择曲面(BiDim 过滤器对应曲面类特征) sel = doc.selection sel.clear() sel.select_element2(("BiDim",), "请点选目标曲面", True) surface = HybridShape(sel.item2(1).value.com_object) # 4. 交互选择装有采样点的几何集 sel.clear() sel.select_element2(("HybridBody",), "请点选含点的几何集", True) point_set = sel.item2(1).value # 5. 遍历几何集内的所有特征,只挑出"点",逐个生成法线 made = 0 for shape in point_set.hybrid_shapes: ref = part.create_reference_from_object(shape) # 判断前必须先转 Reference kind = hsf.get_geometrical_feature_type(ref) # 核心:几何特征识别 if kind == GeometricalFeatureType.Point: normal = hsf.add_new_line_normal( surface, ref, -LINE_LENGTH, LINE_LENGTH, False ) normal.name = f"Normal_{made + 1:03d}" # 统一命名,方便后续追溯 line_set.append_hybrid_shape(normal) made += 1 # 6. 刷新模型,让 CATIA 界面同步显示 part.update() print(f"识别 {point_set.hybrid_shapes.count} 个特征,生成 {made} 条法线")运行完,打开 CATIA 左侧结构树,"AutoNormals" 几何集里就是一批命名规整的法线,编号从Normal_001连续排到Normal_214。
一句话原理:
get_geometrical_feature_type返回一个枚举,Point对应数值 1、Curve对应 2、Line对应 3、Surface对应 5。判断类型时永远写枚举名,不要写死数字。
我踩过的三个坑
脚本现在看起来干净,但初版我改了三轮。这些坑没有一条会报错,它们只会让你的脚本"卡死"或"静默失败"。
坑一:判断类型前必须先转 Reference。我第一版直接拿shape对象去调get_geometrical_feature_type,运行到一半就抛异常。正确做法是part.create_reference_from_object(shape)——CATIA 的几何工厂只认 Reference 句柄,不认原始对象。这几乎适用于所有几何操作,养成"先转 Reference 再干活"的习惯,能避开 PyCATIA 里一半的坑。
坑二:选择过滤器写错,脚本会卡在选择状态不动。曲面要传("BiDim",),几何集要传("HybridBody",)。我最初把曲面过滤器写成了("Surface",),结果弹出的选择框永远等不到可选项,脚本就僵在那儿,只能杀掉重来。
坑三:忘了part.update()。脚本全部跑完后模型树一片空白,我一度以为法线没建成功,其实对象已经存在,只是界面没刷新。更隐蔽的是,不更新就去读后续对象属性,可能拿到过期句柄。批量处理上千条时,建议每 100 条调用一次part.update(),既保证界面跟得上,又避免一次性卡顿。
✅省一半调用的小技巧:法线可以直接用add_new_line_normal(surface, point, -L, L, False)一步到位,不需要先算方向向量再建线。最后一个参数是朝向开关,发现法线全部反向,改成True重跑即可,不用改任何其他代码。
同一套 API 的三种延伸用法
get_geometrical_feature_type这个识别能力,远不止用来过滤点。把判断逻辑换个组合,就能做三种完全不同的事:
① 几何资产体检。遍历所有几何集,统计每个集合里点、线、曲线的数量,输出一份"零件几何构成表"。对动辄几百个特征的历史模型,这份表是快速摸清家底的利器。
② 批量规范化命名。仓库的示例脚本里就有一段经典用法:把几何集里所有的点按顺序统一重命名为Point_001、Point_002……手工改 200 个名字要一下午,脚本几秒钟,而且再也不会出现点-副本(3)这种灾难命名。
③ 特征清单导出。识别出全部特征后,把名称、类型、所在几何集写进 CSV。交接给下游 CFD 或 CAM 团队时,这份清单就是最干净的接口文档,数据一致性从此有据可查。
这套"识别→筛选→批量操作"的骨架一旦搭起来,换任何几何类型都能套用:把法线换成点、把点换成平面、把筛选条件从Point换成Surface,代码骨架几乎不用动。
效率账:什么时候值得写脚本
不是所有任务都值得自动化。我给自己定的判断标准很简单:
| 维度 | 手工操作 | PyCATIA 脚本 |
|---|---|---|
| 214 个法线耗时 | 约 4 小时 | 约 3 分钟 |
| 命名规范性 | 看心情 | 严格统一 |
| 出错率 | 点错、数错常有 | 逻辑正确即零错 |
| 重复使用成本 | 每次重来 | 换零件重跑一遍 |
重复次数少于 20 次的任务,直接手点更划算——写脚本本身也是时间。但凡是"同一批操作要做第二次"的场景,脚本的回本速度远超想象。这笔账,做 CAE 前处理的工程师体会最深:一次网格布点,省下的时间足够再写两条脚本。
别把自动化当终点
回到开头那台空气净化器。真正让我有成就感的不是那 3 分钟,而是交付时同事的一句话:"这个模型我以后改曲面都不用重新布点了,跑一遍脚本就行。" 特征识别与批量自动化的长期价值,从来不是省下某一次的时间,而是让几何数据从"手工作坊"变成"可复现的流水线"——同样的零件、同样的操作、同样的结果,误差归零,版本可控。
下一步我会把这套脚本和参数化模板结合起来:把曲面选择、点密度、法线长度全部参数化,生成标准化的技术文档与工程图纸交付物。当几何处理变成可复现的代码资产,设计师才能把精力放回真正需要判断力的地方。这,才是 CATIA 二次开发最迷人的部分。
【免费下载链接】pycatiapython module for CATIA V5 automation项目地址: https://gitcode.com/gh_mirrors/py/pycatia
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考