物料清单 (BOM) 是一个包含所有零件和组件及其相应数据和属性的表格。其逻辑表示是一个带有行的表格,每行代表一个零件或组件。
创建 BOM 表格有三种方式:
- 主 BOM 表 — 针对所有模型空间的 BOM 表。
- 装配 BOM 表 — 针对包含子组件的组件的 BOM 表。
- 边框 BOM 表 — 针对标题边框、块参照的 BOM 表。
为装配和主 BOM 创建 BOM 表签名:
OdResult createBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId targetId, const OdString& name, bool addToBrowse, OdDbDatabase * pHostDb);
创建主 BOM
在大多数情况下,主 BOM 最适合一般用途。您可以使用 BOM 管理器创建它,BOM 管理器是一项允许您处理零件和组件并创建 BOM 表的服务。
首先,创建一个 BOM 管理器服务类:
AcmBOMManagerPtr pBomMng = getAcmBomMgr();
然后使用以下参数调用 AcmBOMManager::createBomTable 方法:
- aNewBomTableId — 新 BOM 的 OdDbObjectId。
- targetId — 目标对象的 OdDbObjectId。对于主 BOM,传递空 ID — OdDbObjectId::kNull。
- Name — 带有 BOM 表名称的 OdString 对象(“MAIN”即可)。
- pDb — 数据库指针。
OdDbObjectId newBomTbl;
pBomMng->createBomTable(newBomTbl, OdDbObjectId::kNull, L"MAIN", true, pDb);
创建装配 BOM
装配是一种特殊的组件,它包含其他(折叠的)组件。在这种情况下,装配的 BOM 也可以使用 AcmBOMManager::createBomTable 方法创建,但参数不同。应将组件定义对象作为 targetId 参数传递,而不是 OdDbObjectId::kNull(用于主 BOM)。
获取组件定义:
OdDbObjectId compDefObjectId = pDb->getOdDbObjectId(compDefHandle);
然后使用参数和组件定义 objectId 作为 targetId 调用 AcmBOMManager:
pBomMng->createBomTable(newBomTbl, compDefObjectId, L"MAIN", true, pDb);
创建边框 BOM
标题边框是定义图纸边界的边框。标题在数据库中以 BlockReference 的形式表示,它引用 BlockTableRecord。标题边框可以有自己的物料清单表。边框 BOM 表有一个特殊功能:它只为位于标题边框内的组件创建 BOM 条目(BOM 行)。在这种情况下,边框的 BOM 可以使用 AcmBOMManager::createBorderBomTable 和以下参数创建:
OdResult createBorderBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId borderId, OdString name = "", bool populate = false);
- aNewBomTableId — 新 BOM 的 OdDbObjectId。
- targetId — 目标 blockReference 的 OdDbObjectId。
- Name — 带有 BOM 表名称的 OdString 对象(如果为空,将使用默认名称)。
- populate — 允许为 BOM 创建 BOM 行的布尔标志。
获取 blockReference:
OdDbObjectId borderId = pDb->getOdDbObjectId(borderHandle);
然后使用参数和 blockReference objectId 作为 targetId 调用 AcmBOMManager:
OdDbObjectId newBomTbl;
pBomMng->createBorderBomTable(newBomTbl, borderId, "", true);
创建 BOM 时的数据库更改
创建BOM后,一些新对象会添加到数据库中。在AcmDictionary中,折叠的AcmBomRow对象会添加到字典“AcmBOM”AcmBom对象中。
AcmDictionary状态