development of

Tieghaに関する備忘録とおまけ

【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 と、部品表の名前を渡します。