PMI(Product Manufacturing Information)= 工程图上"基准/GDT/粗糙度/工艺备注"在 3D 模型上的直接表达。CATIA 的 FTA(Functional Tolerancing & Annotation)工作台是它的实现,所有 PMI 对象都挂在 3D Part 里、绑定到 BRep 面/边,跟着几何走。这点是它和 Drawing 标注的本质区别——后者绑在 2D 视图上。
| 对象 | 接口 | 含义 |
|---|---|---|
| Annotation Set | CATIFTAAnnotationSet | 视图捕获容器(一个 capture 一组标注) |
| Datum | CATIFTADatumFeature / DatumTarget | 基准(A/B/C)和基准目标 |
| GDT | CATIFTAGeometricalTolerance | 形位公差(圆度、平面度、位置度等) |
| Dimension | CATIFTADimension | 3D 尺寸(线性/角度/直径) |
| Surface Finish | CATIFTASurfaceFinish | 粗糙度 |
| Annotation | CATIFTAAnnotation | 所有标注的根基类 |
所有 PMI 通过 CATIFTASemantic 接口和它绑定的 BRep 元素(CATIBRepAccess)双向关联。改了几何,标注会自动飘到对应位置;删几何,标注变 isolated。
视图捕获(Capture)是 PMI 特有的概念:每个 capture 锁定一个观察方向 + 一组可见标注。一份零件可以有多个 capture(前视/俯视/局部放大),导出 STEP AP242 / 3D PDF / 工程图时按 capture 切换视角。
CATIFTAFactory_var spFac = pPartDoc 拿工厂。CATISpecObject_var(face 引用)。CreateDatumFeature,传入面引用 + 字母("A")。CreateGeometricalTolerance,传入特征类型(位置度/平行度等)+ 公差值 + 关联 Datum。CATIFTAAnnotationSet::AddAnnotation 把标注加进当前 capture,触发 Update。E_FTA_DUPLICATE_DATUM。SetDatumReference,会创建一个语义不完整的 GDT,UI 显示正常但 STEP 导出时被忽略。Ra)和新版(Surface Texture Symbol)字段不通用。CAA 默认建新版,老图纸要切回旧版用 SetSymbolStyle(CATFTAStyleOld)。SetActiveCapture,否则即使 AddAnnotation 成功,3D 视图里也是不可见的。批量自动标注完最后要回切 default capture。CATIFTASemantic::CheckSemantic 校验。SetExportPMI(TRUE),否则下游看到的是空 viewer。CATIFTAStandard 的 GlobalFontSize。批量时改 Standard 一次即可。// AutoFTA.cpp
// 输入:CATPart 文档 + 目标平面 BRep 引用
// 输出:在面上挂 Datum A、平面度 0.05、Ra 1.6
#include "CATIFTAFactory.h"
#include "CATIFTAAnnotationSet.h"
#include "CATIFTADatumFeature.h"
#include "CATIFTAGeometricalTolerance.h"
#include "CATIFTASurfaceFinish.h"
#include "CATIFTASemantic.h"
#include "CATIFTACapture.h"
HRESULT AutoAnnotate(
CATIPartRequest_var spPart,
CATISpecObject_var spFaceRef)
{
HRESULT rc = S_OK;
CATIFTAFactory_var spFac = spPart;
if (spFac == NULL_var) return E_FAIL;
// 1. 拿/建 AnnotationSet
CATIFTAAnnotationSet_var spSet;
spFac->GetCurrentAnnotationSet(spSet);
if (spSet == NULL_var) spFac->CreateAnnotationSet(spSet);
// 2. 创建/激活 capture
CATIFTACapture_var spCap;
spFac->CreateCapture("AutoMfgView", spCap);
spSet->SetActiveCapture(spCap);
// 3. 建基准 A
CATIFTADatumFeature_var spDatum;
rc = spFac->CreateDatumFeature(spFaceRef, "A", spDatum);
if (FAILED(rc)) return rc;
spSet->AddAnnotation(spDatum);
// 4. 建平面度公差 0.05
CATIFTAGeometricalTolerance_var spGDT;
rc = spFac->CreateGeometricalTolerance(
CATFTAFlatness, 0.05, spFaceRef, spGDT);
if (FAILED(rc)) return rc;
// 平面度无须 datum reference
spSet->AddAnnotation(spGDT);
// 5. 建粗糙度 Ra 1.6
CATIFTASurfaceFinish_var spSF;
rc = spFac->CreateSurfaceFinish(spFaceRef, spSF);
if (FAILED(rc)) return rc;
spSF->SetRoughness("Ra", 1.6);
spSet->AddAnnotation(spSF);
// 6. Update
CATIUpdate_var spUpd = spPart;
if (spUpd != NULL_var) spUpd->Update();
// 7. 校验语义完整性
CATIFTASemantic_var spSem = spGDT;
int valid = 0;
spSem->CheckSemantic(valid);
cout << "GDT semantic valid = " << valid << "\n";
return rc;
}
© 上海琛兴科技发展有限公司 · 转载请注明出处 · CATIA 是 Dassault Systèmes 注册商标