4. 零件文档的自动化创建与操作

在CATIA二次开发中,零件文档(PartDocument)是最基础也最常用的文档类型。批量初始化零件文档的核心任务可以归纳为四件事:创建文档对象、写入文档属性、建立几何体集与有序几何图形集、以及按统一规范组织这些容器。本节围绕这四件事展开,并给出可直接运行的CAA/CATScript风格示例。

一、创建新零件文档

创建零件文档有两种典型路径。第一种是"从模板新建",即基于已有的.CATPart模板文件打开并另存,适合需要继承标准设置(材料、单位、图层、参数)的场景;第二种是"从零新建",直接调用文档工厂创建空白零件。批量初始化通常推荐第一种,因为模板能保证所有零件在单位、坐标系、图层规范上完全一致。

以CATIA Automation(VBA/CATScript)为例,从零创建的核心代码如下:

Dim oPartDoc As PartDocument
Set oPartDoc = CATIA.Documents.Add("Part")
Dim oPart As Part
Set oPart = oPartDoc.Part
' 此时零件中已自动包含 PartBody 与 三个基准平面

若采用模板方式,则改为:

Dim oPartDoc As PartDocument
Set oPartDoc = CATIA.Documents.Open("D:\Templates\Std_Part.CATPart")
' 另存为新零件
oPartDoc.SaveAs "D:\Output\Part_001.CATPart"

需要注意:Documents.Add("Part") 创建的空白零件默认只包含一个 PartBody(几何体集)和三个基准平面(XY、YZ、ZX)。如果模板中预置了参数、材料或自定义属性,这些内容会随模板一起被继承,这是模板方式的最大优势。

二、设置文档属性

文档属性分为两类:一类是CATIA内置属性,如 PartNumber、Revision、Definition、Nomenclature;另一类是用户自定义属性,通过 UserRefProperties 集合管理。批量初始化时,通常需要把零件编号、版本、设计者、日期等信息写入属性,便于后续PDM系统识别。

Dim oProd As Product
Set oProd = oPartDoc.Product
oProd.PartNumber = "BRK-2024-001"
oProd.Revision = "A"
oProd.Definition = "支架类零件"
oProd.Nomenclature = "Bracket"

' 写入自定义属性
Dim oProps As Properties
Set oProps = oPartDoc.Product.Properties
oProps.Add "Designer", "ZhangSan"
oProps.Add "CreateDate", "2024-06-01"

属性写入后应立即回读校验,避免因属性名拼写错误导致静默失败。判断依据是:oProps.Item("Designer").Value 应返回预期字符串,若抛出异常则说明属性未成功写入。

三、几何体集与有序几何图形集

这是本节最容易混淆的部分。CATIA零件中存在两种容器:

  • 几何体集(Geometrical Set):用于存放点、线、面等参考几何,内部特征顺序不影响最终结果,可随时重排。
  • 有序几何图形集(Ordered Geometrical Set):内部特征严格按创建顺序求值,后一个特征可以引用前一个特征的结果,适合构建有依赖关系的曲面链。

两者的创建方式不同。几何体集通过 HybridBodies.Add() 创建;有序几何图形集通过 HybridShapeFactory 配合 OrderedGeometricalSets 集合创建。批量初始化时,建议按命名规范统一创建,例如 GS_Reference、OGS_Surface、GS_Construction。

Dim oHB As HybridBodies
Set oHB = oPart.HybridBodies
Dim oGS As HybridBody
Set oGS = oHB.Add()
oGS.Name = "GS_Reference"

Dim oOGS As OrderedGeometricalSet
Set oOGS = oPart.OrderedGeometricalSets.Add()
oOGS.Name = "OGS_Surface"

判断容器是否创建成功,可遍历 oPart.HybridBodies 与 oPart.OrderedGeometricalSets,检查名称与数量是否符合预期。若模板中已存在同名容器,应先删除或重命名,避免重名导致后续特征引用歧义。

四、批量初始化的组织方式

批量初始化不是简单循环,而是"模板 + 参数表 + 命名规则"的组合。典型做法是:准备一个标准模板,用Excel或CSV维护零件清单(编号、名称、版本、设计者),脚本逐行读取,打开模板、另存、写属性、建容器、保存关闭。整个过程的关键控制点有三个:模板路径必须固定、输出目录必须存在、每个零件保存后要释放文档对象,否则内存会持续增长。

For i = 2 To lastRow
    Set oDoc = CATIA.Documents.Open(templatePath)
    oDoc.Product.PartNumber = Cells(i, 1).Value
    oDoc.Product.Revision = Cells(i, 2).Value
    ' 创建标准容器
    oDoc.Part.HybridBodies.Add().Name = "GS_Reference"
    oDoc.Part.OrderedGeometricalSets.Add().Name = "OGS_Surface"
    oDoc.SaveAs outputPath & Cells(i, 1).Value & ".CATPart"
    oDoc.Close
    Set oDoc = Nothing
Next i

下面这张图展示了从模板到批量输出的完整数据流与容器结构关系,可作为脚本编写时的对照参考。

标准模板 Std_Part.CATPart 参数清单 Excel / CSV 命名规则 GS_ / OGS_ 前缀 批量初始化脚本 ① 打开模板 ② 写入文档属性 ③ 创建几何容器 ④ 另存并释放 输出零件文档 Part_001.CATPart Part_002.CATPart Part_003.CATPart … 按清单逐行生成 零件内部容器结构 PartBody(默认几何体集) GS_Reference(几何体集) OGS_Surface(有序几何图形集) 关键控制点: • 模板路径固定,避免每次重新配置单位与图层 • 每个零件保存后必须 Close 并释放对象,防止内存累积 • 容器命名统一前缀,便于后续特征引用与检索 • 属性写入后回读校验,确认无静默失败

五、常见问题与判断依据

批量初始化过程中,最常遇到三类问题。第一类是模板打开失败,通常是因为模板路径含中文或网络路径权限不足,判断依据是 Documents.Open 抛出异常,此时应改用本地英文路径。第二类是属性写入无效,多因属性名与CATIA保留字段冲突,例如自定义属性不能命名为 PartNumber,否则会被内置属性覆盖。第三类是容器重名,模板中已有 GS_Reference 时再次创建同名容器,CATIA会自动追加后缀(如 GS_Reference.1),导致后续按名称引用失败。判断方法是遍历容器集合,检查名称是否与预期完全一致。

建议在脚本中加入日志输出,每完成一个零件记录其编号、属性写入结果、容器数量与保存路径。这样在批量运行结束后,可以快速定位是哪一个零件、哪一步出现了偏差,而不必逐个打开文件检查。