[ブログに戻る](/ja/blog) # Mechanical SDKのBOMマネージャー

Andrii Morozov 5月 02, 2019 [\#mechanical](/ja/blog/tag/mechanical)

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

Mechanical SDKの大部分は、図面の要素を構造化するのに役立つ部品表（Bill Of Materials）テーブル機能です。部品表テーブルは、他のMechanical SDKエンティティと相互作用する特別なデータベース永続オブジェクトです。

Mechanical SDKのBOMテーブルについては、以前に[部品表の紹介](https://www.opendesign.com/blog/2017/july/introduction-bill-materials-teigha-mechanical)や、Mechanicalの構造と部品（部品参照）に関連する他の記事で説明されています。

#### BOMテーブルの説明

機械製図は、ポリライン、円などのプリミティブの単なる集合ではありません。通常、機械製図は複雑で階層化されています。Mechanical SDKを使用すると、ユーザーは図面のジオメトリをマークし、それをBOMテーブルに収集できます。ジオメトリは、コンポーネントまたは部品としてマークできます。各部品は、BOMテーブルに行として表示されます。この機能は複雑であり、作業を容易にするためにBOM Managerサービス クラスが使用されます。

#### BOMテーブルと図面SDK

データベースレベルでは、BOMテーブルはDrawings SDKの辞書オブジェクトのように見えるオブジェクトです。論理的には、部品表（BOM）テーブルは単なる行の集合ですが、それ自体にはグラフィカルな表現はありません。この目的のために、Mechanical SDKにはテーブルの内容を表示するPartListエンティティがあります。PartListは単なるBOM行ではなく、フィルターやグループを介して再構成可能であるため、任意のBOMテーブルは複数のPartListエンティティを保持できます。

この部品表はBOMテーブルの内容を示しています。

![bom manager mechanical](/files/inline-images/BOM%20Manager.png)#### BOMマネージャーの使用方法

BOMマネージャーを使用するには、次のファイルを含めるだけです。

```
#include "AcmBOMManager.h"
```

そして、この関数を呼び出します。

```
AcmBOMManagerPtr pBomMgr = getAcmBomMgr();
```

#### 必須の作成メソッド

現在、BOMマネージャーにはBOMテーブルを作成するための3つの作成メソッドがあります。

```
virtual OdResult createBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId targetId = OdDbObjectId::kNull, const OdString& name = "", bool addToBrowser = true, OdDbDatabase * pHostDb = NULL);

virtual OdResult createBomTable(OdDbObjectId& aNewBomTableId, const AmiCompDefKey* pTargetKey, OdString name = OdString::kEmpty);

virtual OdResult createBorderBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId borderId, OdString name = "", bool populate = false);

```

これらのメソッドは類似したシグネチャを持っています。最初にBOMテーブルパラメータがあり、次にターゲットパラメータ（ブロックまたはコンポーネント定義）、BOMテーブル名、およびOdDbDatabaseが続きます。最初の2つのメソッドは同じテーブルを生成しますが、シグネチャが異なり、3番目のメソッドは特定のタイトル境界にアタッチされたBOMテーブルを生成します。

#### 必須のゲッター

BOMテーブルとBOM行は、バルーンなどのさまざまな機械エンティティと複雑な相互作用をします。バルーンはBOM行にアタッチされます。BOMマネージャーには、特定のBOM行（BOM行はアイテムまたはBOMアイテムと呼ばれることもあります）のバルーンを選択する特別なメソッドがあります。

```

virtual OdResult getItemBalloons(const OdDbObjectId& itemId, OdDbObjectIdArray& ballIdArray, const OdDbObjectId& refId) const; virtual OdResult getItemBalloons(const OdDbObjectId& itemId, OdDbObjectIdArray& ballIdArray, const OdDbObjectIdArray& refIds) const;
```

最初のパラメータは行ID、2番目のパラメータは行に関連するバルーンの配列、3番目のパラメータは特定のバルーンを取得するための単一の参照IDまたは参照IDの配列です。

以下は、アイテム番号「1」の値を持つ行にアタッチされたバルーンの例です。

![шьфпу2](/files/inline-images/2_2.jpg)もう1つの便利なBOM機能は、その行が属性（または行にアタッチされたコンポーネント）、例えば数量、名前、標準などを保持できることです。ほとんどの場合、属性のセットはその標準（BOMStd）によって制限されます。BOMマネージャーには、特定の行のデータを取得できるいくつかのメソッドがあります。

```

virtual OdResult getItemAttribute(const OdDbObjectId& itemId, const OdString& key, OdString& attrib, bool evaluate = true, const OdDbObjectId& bomStdId = OdDbObjectId::kNull) const;
```

最初のパラメータは行ID、2番目のパラメータは属性名、3番目のパラメータは属性値です。

```

virtual OdResult getItemData(const OdDbObjectId& itemId, OdString& itemNo, OdUInt32& numOfItems, OdMapStringToString& valueMap, const OdDbObjectId& bomStdId = OdDbObjectId::kNull) const;
```

最初のパラメータは行ID、2番目はBOM行番号、3番目は数量（またはアイテム数）、4番目は「属性名」と「属性値」のペアのセットを持つ値マップです。

例えば、この記事の最初の図を見て、最初の行のgetItemDataを取得したいとします。次の値を持つマップが得られます。

- 名称: スクリュープラグ
- 規格: DIN 910 - M18 x 1.5
- 材質: \*空\*

また、「itemNo」はBOM行の番号を示す「1」となり、「numOfItems」はアイテムの数量を示す「1」となります。

#### BOMマネージャーイテレーター

BOMマネージャーは2つのイテレーターを提供します:

- アイテムイテレーター (BOM行を反復処理します)
- 部品データイテレーター (部品データを反復処理します)

```

virtual AcmIteratorPtr newItemIterator(const OdDbObjectId& bomId, Acm::PartListDirection sort = Acm::kTopDown, bool expanded = false) const;
```

「newPartDataIterator」メソッドは部品データイテレーターを返します。最初のパラメーターはOdDbDatabaseオブジェクトで、2番目のパラメーターはメインBOMテーブルデータのみが収集されるかどうかを定義し、3番目のパラメーターは外部参照が使用されるかどうかを定義します。

メカニカルBOMは非常に複雑ですが、エンジニアが図面をより明確で理解しやすくするのに役立つ強力なツールです。メカニカルSDKは現在、BOMマネージャーがサポートすべきすべての必須メソッドをサポートしています。この記事にはサービスクラスの基本的な説明のみが含まれており、将来的に拡張される予定です。

####  

## 今すぐ始める

**ODAソフトウェアを60日間無料でお試しください。  
リスクなし、クレジットカード不要。**

[無料で試す](https://www.opendesign.com/ja/free-trial)
