ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

把214次手工点击变成1次回车:PyCATIA几何特征识别与批量自动化实战

把214次手工点击变成1次回车:PyCATIA几何特征识别与批量自动化实战 把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 fNormal_{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),仅供参考
返回列表