[ブログに戻る](/ja/blog) # Teigha Mechanical: BOMテーブルの作成

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

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

部品表 (BOM) は、すべての部品とコンポーネントを対応するデータと属性とともに保持するテーブルです。論理的な表現は行を持つテーブルであり、各行は部品またはコンポーネントを参照します。

BOMテーブルを作成するには、次の3つの方法があります。

- メイン 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 マネージャーサービス クラスを作成します。

```
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 メソッドで作成できますが、他のパラメータを使用します。OdDbObjectId::kNull（メイン BOM の場合）の代わりに、コンポーネント定義オブジェクトを targetId パラメータとして渡す必要があります。

コンポーネント定義を取得します。

```
OdDbObjectId compDefObjectId = pDb->getOdDbObjectId(compDefHandle);

```

次に、パラメータと、コンポーネント定義のobjectIdをtargetIdとしてAcmBOMManagerを呼び出します。

```
pBomMng->createBomTable(newBomTbl, compDefObjectId, L"MAIN", true, pDb);

```

#### 境界BOMの作成

タイトル境界は、図面の境界を定義する境界です。タイトルは、BlockTableRecordを参照するBlockReferenceとしてデータベースに物理的に表現されます。タイトル境界は独自の部品表（BOM）テーブルを持つことができます。境界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行の作成を許可するboolフラグ。

#### 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/ja/free-trial)
