部品表 (BOM) マネージャーは、図面内のBOMテーブル、部品、およびコンポーネントのインターフェースを提供するサービス (サービスクラス) です。BOMマネージャーは、BOM行とそのデータ (部品データまたはコンポーネントデータを反映または含む行) のインターフェースも提供します。
このトピックには、次のセクションが含まれています。
- BOMマネージャーの機能と例
- すべてのBOMテーブルを取得
- 名前でBOMテーブルを取得
- IDで部品データを取得
- BOM行または部品リストグループアイテムのアイテムデータをIDで取得
BOMマネージャーの機能と例
部品表は、機械構造と部品からのすべてのデータを収集し、すべてのデータをテーブル形式で表現します。BOMマネージャーは、BOM行やデータエントリなど、さまざまなデータソースと連携します。
BOMマネージャーは次のように作成および呼び出すことができます。
OdRxClassPtr pService = odrxServiceDictionary()->getAt(L"AcmBOMManager");
AcmBOMManagerPtr pBOMMgr = pService->create();
部品表は特別な辞書です。AcmBOMエントリは、BOMテーブルのリストにあるAcmDictionaryセクションで見つけることができます。
図1 – BOMテーブルのリスト
BOMマネージャーは、開いている図面またはデータベース内のオブジェクトと連携し、通常はOdDbObjectIdをパラメータとして受け取ります。
すべてのBOMテーブルを取得
次の図では、サンプルファイルに3つのBOMタイプが示されています。
- 「MAIN」という名前のメインBOMテーブル
- 「COMPONENT ASSEMBLY BOM」という名前のアセンブリBOMテーブル
- 「TITLE BORDER BOM」という名前のタイトル枠BOMテーブル
図面全体のすべてのBOMテーブル、およびオプションで外部参照ファイルからのBOMテーブルを取得するには、getAllBomTables() メソッドを使用します。
OdResult getAllBomTables(OdDbObjectIdArray& bomIds, bool xrefed, OdDbDatabase * pHostDb);
最初のパラメータ bomIds は、BOMテーブルのIDを持つOdDbObjectId要素の配列です。2番目のパラメータ xrefed は、外部参照ファイルからBOMテーブルを取得するかどうかを定義します。最後のパラメータ pHostDb は、BOMテーブルを検索するデータベースを指定します。
getAllBomTables() メソッドの使用例:
OdDbObjectIdArray objIdArr; pBOMMgr->getAllBomTables(objIdArr, useXrefs, pDb);
getAllBomTables() メソッドの出力例:
List of BOM tables (objIdArr) for the above example file will contain IDs of the BOM Tables: MAIN COMPONENT ASSEMBLY BOM TITLE BORDER BOM
名前でBOMテーブルを取得
BOMテーブルを取得するには、指定された名前のBOMテーブルのOdDbObjectIdを返すgetBomTable()メソッドを使用します。
OdResult getBomTable(const OdString& name, OdDbObjectId& bomTableId, OdDbDatabase * pDb);
最初のパラメータ名にはBOMテーブル名が指定されます。2番目のパラメータbomTableIdは、対応するBOMテーブルオブジェクトIDの戻り値を受け取ります。3番目のパラメータpDbは、BOMテーブルが配置されているデータベースへのポインタです。
getBomTable()メソッドの使用例:
OdString bomName(L"MAIN");
OdDbObjectId bomTableId;
OdResult result = pBOMMgr->getBomTable(bomName, bomTableId, pDb);
if (result == eOk)
{
AcmBomPtr pBom = AcmBom::cast(bomTableId.safeOpenObject());
odPrintConsoleString(pBom->getBomName());
odPrintConsoleString(L"\n");
odPrintConsoleString(pBom->getDbHandle().ascii());
odPrintConsoleString(L"\n");
return eOk;
}
getBomTable()メソッドの出力例:
MAIN
34B
IDによる部品データの取得
IDで部品データを取得するには、部品参照を扱うgetPartData()メソッドを使用します。
OdResult getPartData(const OdDbObjectId& referenceId, OdUInt32& numOfItems, OdMapStringToString& valueMap);
最初のパラメータreferenceIdは部品参照オブジェクトIDです。2番目のパラメータnumOfItemsは、アイテム数(QTYフィールド)の戻り値を取得します。3番目のパラメータvalueMapは、プロパティ値のマップを取得します。
getPartData()メソッドは、部品参照および部品参照データエントリに含まれるデータを取得します。入力パラメータとして部品参照のOdDbObjectIdを受け取り、出力パラメータとしてアイテム数(QTYフィールド)とプロパティ値のマップを持ちます。getPartData()メソッドはBOM標準をチェックし、プロパティが空の場合、デフォルトのBOM標準値(存在する場合)を返します。
getPartData()メソッドの使用例:
OdUInt32 numOfItems; OdMapStringToString valueMap; result = pBOMMgr->getPartData(partRefObjId, numOfItems, valueMap);
getPartData()メソッドの出力例(valueMapの内容):
BOM_UNITS : ea DESCR : description is missing MATERIAL : Stainless NAME : OP9101SL STANDARD : ISO TOTAL_MASS : =IF(ISBLANK(MASS),BLANK,QTY*MASS)
IDによるBOM行または部品リストグループアイテムのデータ取得
IDでBOM行または部品リストグループアイテムのデータを取得するには、getItemData()メソッドを使用します。
OdResult getItemData(const OdDbObjectId& itemId, OdString& itemNo, OdUInt32& numOfItems, OdMapStringToString& valueMap, const OdDbObjectId& bomStdId);
最初のパラメータitemIdは、アイテムデータを取得するオブジェクトのIDです。2番目のパラメータitemNoは、アイテム番号の戻り値を取得します。3番目のパラメータnumOfItemsは、アイテム数(QTYフィールド)の戻り値を取得します。4番目のパラメータvalueMapは、プロパティ値のマップを取得します。5番目のパラメータbomStdIdは、デフォルトのBOM標準値を取得する標準のIDです。
ワークフローはgetPartData()と似ています。getItemData()メソッドは、アイテムデータを取得したいオブジェクト(BOM行または部品リストグループアイテム)のOdDbObjectIdを入力パラメータとして受け取ります。アイテム番号、アイテム数(QTY)、およびプロパティ値のマップは出力パラメータです。
getItemData()メソッドの使用例:
OdString itemNo; OdUInt32 numOfItems; OdMapStringToString valueMap; pBOMMgr->getItemData(bomRowId, itemNo, numOfItems, valueMap);
getItemData()メソッドの出力例:
itemNo: 1 numOfItems: 4 valueMap contents: BOM_UNITS : ea DESCR : description is missing MATERIAL : Stainless NAME : OP9101SL STANDARD : ISO
BOM関連のその他の例は、Examples|TmBomExプロジェクトで見つけることができます。
詳細については、弊社のドキュメントをご覧ください。