[返回博客](/cn/blog) # Teigha Mechanical：创建 BOM 表

Andrii Morozov 四月 05, 2018 [\#mechanical](/cn/blog/tag/mechanical) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

物料清单 (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对象中。

![image1](/files/inline-images/image001_29.png)AcmDictionary状态

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
