物料清单 (BOM) 管理器是一种服务(服务类),它为绘图中的 BOM 表、零件和组件提供接口。BOM 管理器还为 BOM 行及其数据(反映或包含零件数据或组件数据的行)提供接口。
本主题包含以下部分:
- BOM 管理器功能和示例
- 获取所有 BOM 表
- 按名称获取 BOM 表
- 按 ID 获取零件数据
- 按 ID 获取 BOM 行或零件列表组项的项数据
BOM 管理器功能和示例
物料清单收集机械结构和零件的所有数据,并以表格形式表示所有数据。BOM 管理器处理不同的数据源,例如 BOM 行和数据条目。
BOM 管理器可以按如下方式创建和调用:
OdRxClassPtr pService = odrxServiceDictionary()->getAt(L"AcmBOMManager");
AcmBOMManagerPtr pBOMMgr = pService->create();
物料清单是一个特殊的字典。AcmBOM 条目可以在 BOM 表列表的 AcmDictionary 部分中找到。
图 1 – BOM 表列表
BOM 管理器处理开放绘图或数据库中的对象,通常将 OdDbObjectId 作为参数。
获取所有 BOM 表
在下图中,示例文件中显示了三种 BOM 类型:
- 名为“MAIN”的主 BOM 表
- 名为“COMPONENT ASSEMBLY BOM”的装配 BOM 表
- 名为“TITLE BORDER BOM”的标题边框 BOM 表
要获取整个绘图的所有 BOM 表以及可选地从外部引用文件中获取任何 BOM 表,请使用 getAllBomTables() 方法:
OdResult getAllBomTables(OdDbObjectIdArray& bomIds, bool xrefed, OdDbDatabase * pHostDb);
第一个参数 bomIds 是一个包含 BOM 表 ID 的 OdDbObjectId 元素数组。第二个参数 xrefed 定义是否从外部引用文件中获取 BOM 表。最后一个参数 pHostDb 指定要查找 BOM 表的数据库。
使用 getAllBomTables() 方法的示例:
OdDbObjectIdArray objIdArr; pBOMMgr->getAllBomTables(objIdArr, useXrefs, pDb);
getAllBomTables() 方法的示例输出:
List of BOM tables (objIdArr) for the above example file will contain IDs of the BOM Tables: MAIN COMPONENT ASSEMBLY BOM TITLE BORDER BOM
按名称获取 BOM 表
要获取 BOM 表,请使用 getBomTable() 方法,该方法返回具有指定名称的 BOM 表的 OdDbObjectId:
OdResult getBomTable(const OdString& name, OdDbObjectId& bomTableId, OdDbDatabase * pDb);
第一个参数 name 是 BOM 表名称。第二个参数 bomTableId 接收相应 BOM 表对象 ID 的返回值。第三个参数 pDb 是指向 BOM 表所在数据库的指针。
使用 getBomTable() 方法的示例:
OdString bomName(L"MAIN");
OdDbObjectId bomTableId;
OdResult result = pBOMMgr->getBomTable(bomName, bomTableId, pDb);
if (result == eOk)
{
AcmBomPtr pBom = AcmBom::cast(bomTableId.safeOpenObject());
odPrintConsoleString(pBom->getBomName());
odPrintConsoleString(L"\n");
odPrintConsoleString(pBom->getDbHandle().ascii());
odPrintConsoleString(L"\n");
return eOk;
}
getBomTable() 方法的输出示例:
MAIN
34B
按 ID 获取零件数据
要按 ID 获取零件数据,请使用 getPartData() 方法,该方法适用于零件参照:
OdResult getPartData(const OdDbObjectId& referenceId, OdUInt32& numOfItems, OdMapStringToString& valueMap);
第一个参数 referenceId 是零件参照对象 ID。第二个参数 numOfItems 获取项目数量(QTY 字段)的返回值。第三个参数 valueMap 获取属性值的映射。
getPartData() 方法获取零件参照和零件参照数据条目所包含的数据。它将零件参照的 OdDbObjectId 作为输入参数,并将其输出参数设置为项目数量(QTY 字段)和属性值映射。getPartData() 方法检查 BOM 标准,如果属性为空,则返回默认 BOM 标准值(如果存在)。
使用 getPartData() 方法的示例:
OdUInt32 numOfItems; OdMapStringToString valueMap; result = pBOMMgr->getPartData(partRefObjId, numOfItems, valueMap);
getPartData() 方法的输出示例(valueMap 内容):
BOM_UNITS : ea DESCR : description is missing MATERIAL : Stainless NAME : OP9101SL STANDARD : ISO TOTAL_MASS : =IF(ISBLANK(MASS),BLANK,QTY*MASS)
按 ID 获取 BOM 行或零件清单组项目的数据
要按 ID 获取 BOM 行或零件清单组项目数据,请使用 getItemData() 方法:
OdResult getItemData(const OdDbObjectId& itemId, OdString& itemNo, OdUInt32& numOfItems, OdMapStringToString& valueMap, const OdDbObjectId& bomStdId);
第一个参数 itemId 是要获取项目数据的对象的 ID。第二个参数 itemNo 获取项目编号的返回值。第三个参数 numOfItems 获取项目数量(QTY 字段)的返回值。第四个参数 valueMap 获取属性值的映射。第五个参数 bomStdId 是用于获取默认 BOM 标准值的标准的 ID。
工作流程类似于 getPartData()。getItemData() 方法将要获取项目数据的对象(BOM 行或零件清单组项目)的 OdDbObjectId 作为输入参数。项目编号、项目数量 (QTY) 和属性值映射是输出参数。
使用 getItemData() 方法的示例:
OdString itemNo; OdUInt32 numOfItems; OdMapStringToString valueMap; pBOMMgr->getItemData(bomRowId, itemNo, numOfItems, valueMap);
getItemData() 方法的输出示例:
itemNo: 1 numOfItems: 4 valueMap contents: BOM_UNITS : ea DESCR : description is missing MATERIAL : Stainless NAME : OP9101SL STANDARD : ISO
更多 BOM 相关示例可在 Examples|TmBomEx 项目中找到。
更多信息请参见我们的文档。