CATIA 的标准件库(Catalog)是一种特殊的 .catalog 文档,专门用来管理可参数化、可大量复用的零件。它的组织结构是清晰的三层:
| 层级 | 接口 | 含义 |
|---|---|---|
| Catalog 文档 | CATICatalogDocument | 整个 .catalog 文件 |
| Chapter(章节) | CATICatalogChapter | 分类节点,可嵌套(GB/DIN/ISO) |
| Family(族) | CATICatalogFamily | 同一种零件的参数族(如 GB5782 六角螺栓) |
| Component(实例条目) | CATICatalogDescription | 族里的一行规格(M10×100) |
Family 内部维护一张关键字段表(Keywords):每行是一个具体规格,每列是一个参数(M、L、Length、Pitch等)。Family 还绑定一个参考 CATPart(带参数化建模特征),实例化时按选中行的参数值代入参数表,重新计算 CATPart 得到一个具体零件。
这个机制的工业价值:100 万种紧固件不需要 100 万个 CATPart 文件,一个参数化模板 + 一张 100 万行的 Excel 表即可。
CATDocumentServices::New("catalog", pDoc)。CATICatalogFactory::CreateChapter 嵌套出"GB → 紧固件 → 螺栓"路径。CreateComponentFamily 传入 Chapter 和模板 CATPart 路径。AddDescription,把规格名和参数值塞进去。// BuildGB5782Catalog.cpp
// 输入:参数化模板 CATPart 路径 + Excel 规格表(M, L, Pitch, HeadHeight, Width)
// 输出:GB5782_Bolts.catalog
#include "CATICatalogFactory.h"
#include "CATICatalogDocument.h"
#include "CATICatalogChapter.h"
#include "CATICatalogFamily.h"
#include "CATICatalogDescription.h"
#include "CATDocumentServices.h"
struct BoltSpec {
CATUnicodeString name; // "GB5782_M10x100"
double M; // mm
double L;
double pitch;
double headHeight;
double headWidth;
};
HRESULT BuildBoltCatalog(
const CATUnicodeString& templatePart,
const std::vector<BoltSpec>& specs,
const CATUnicodeString& outCatalog)
{
HRESULT rc = S_OK;
CATDocument* pDoc = NULL;
rc = CATDocumentServices::New("CatalogDocument", pDoc);
if (FAILED(rc) || !pDoc) return rc;
CATICatalogDocument_var spCat = pDoc;
if (spCat == NULL_var) return E_FAIL;
CATICatalogFactory_var spFac = pDoc;
// 1. 建 Chapter 树
CATICatalogChapter_var spRootChap, spGBChap, spBoltChap;
spCat->GetRootChapter(spRootChap);
spFac->CreateChapter(spRootChap, "GB", spGBChap);
spFac->CreateChapter(spGBChap, "Hex_Bolts_GB5782", spBoltChap);
// 2. 建 Family,绑模板
CATICatalogFamily_var spFam;
rc = spFac->CreateComponentFamily(
spBoltChap, "GB5782_AllSizes",
templatePart, spFam);
if (FAILED(rc)) return rc;
// 3. 声明 Keywords(必须和模板里 KBE 参数名一致)
spFam->AddKeyword("M", CATCatalogKeywordReal);
spFam->AddKeyword("L", CATCatalogKeywordReal);
spFam->AddKeyword("pitch", CATCatalogKeywordReal);
spFam->AddKeyword("headHeight", CATCatalogKeywordReal);
spFam->AddKeyword("headWidth", CATCatalogKeywordReal);
// 4. 灌行
int n = 0;
for (const auto& s : specs) {
CATICatalogDescription_var spDesc;
spFam->AddDescription(s.name, spDesc);
spDesc->SetRealValue("M", s.M);
spDesc->SetRealValue("L", s.L);
spDesc->SetRealValue("pitch", s.pitch);
spDesc->SetRealValue("headHeight", s.headHeight);
spDesc->SetRealValue("headWidth", s.headWidth);
++n;
}
cout << "Inserted " << n << " bolt specs.\n";
// 5. Save
rc = CATDocumentServices::SaveAs(*pDoc, outCatalog);
CATDocumentServices::Remove(*pDoc);
return rc;
}
© 上海琛兴科技发展有限公司 · 转载请注明出处 · CATIA 是 Dassault Systèmes 注册商标