【AutoCAD Mechanical】部品表を作成する
部品表を作成する
部品表を API で作成するには、AcmBOMManager::createBomTable
メソッドまたは、AcmBOMManager::createBorderBomTable
メソッドを使用します。
AcmBOMManager::createBomTable
メソッドでは図面全体の部品表や、ストラクチャ内のアセンブリの部品表を作成できます。
AcmBOMManager::createBorderBomTable
メソッドでは、図面枠の部品表を作成できます。
サンプルコード
ads_name entname; ads_point pickPoint; // 部品表を作成する図面枠を選択 int result = acedEntSel( _T("\n部品表を作成する図面枠を選択 <Enter を押した場合は MAIN を作成>"), entname, pickPoint); AcDbObjectId bomId; Acad::ErrorStatus es = Acad::eOk; if (result == RTNORM) { // 図面枠のObjectIdを取得 AcDbObjectId targetId; acdbGetObjectId(targetId, entname); // 作成する部品表の名前を入力 ACHAR name[133]; if (acedGetString(1, _T("\n部品表の名前を入力"), name) != RTNORM) return; // 入力した名前の部品表が既に存在するか確認 es = acmBomMgr->existBomTable((LPCTSTR)name); if (es != Acad::eOk) { // 部品表を作成 es = acmBomMgr->createBorderBomTable(bomId, targetId, (LPCTSTR)name); } else { acutPrintf(_T("\n部品表[%s]は作成済です。"), (LPCTSTR)name); return; } } else if (result == RTERROR) { // MAINが既に存在するか確認 es = acmBomMgr->existBomTable(_T("MAIN")); if (es != Acad::eOk) { // 部品表を作成 es = acmBomMgr->createBomTable(bomId); } else { acutPrintf(_T("\n部品表[MAIN]は作成済です。")); return; } } if (es != Acad::eOk) { acutPrintf(_T("\n部品表の作成に失敗しました。 エラーコード : %d"), es); } CMapStringToString valueMap; CString bomName; es = acmBomMgr->getBomData(bomId, bomName, valueMap); acutPrintf(_T("\n部品表 [%s] を作成しました。"), (LPCTSTR)bomName);
※サンプルコードについての補足
図面枠のブロック参照を選択した場合は、createBorderBomTable
メソッドを使用してボーダー部品表を作成し、オブジェクトを選択せず Enter を入力した場合は、createBomTable
メソッドを使用して図面全体の部品表を作成しています。
アセンブリ部品表を作成する場合は、createBomTable
メソッドに、アセンブリのブロックテーブルレコードの ObjectId
と、部品表の名前を渡します。