部品表 (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オブジェクトに追加されます。
AcmDictionaryの状態