development of

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

【AutoCAD Mechanical】パーツ参照のデータを取得する

パーツ参照のデータを取得するには

パーツ参照のコンポーネントのプロパティの各値を取得するには、 AcmBOMManager::getPartData メソッドを使用します。 

サンプルコード

// オブジェクトを選択
ads_name entname;
ads_point pickPoint;
if (acedEntSel(_T("\nパーツ参照を選択"), entname, pickPoint) != RTNORM) return;

AcDbObjectId partrefId;
if (acdbGetObjectId(partrefId, entname) != Acad::eOk) return;

AcDbObject *pObj;
if (acdbOpenObject(pObj, partrefId, AcDb::kForRead) != Acad::eOk) return;
CString className = pObj->isA()->name();
pObj->close();

// パーツ参照を選択したかどうかを確認
if (className != _T("AcmPartRef"))
{
    acutPrintf(_T("\nパーツ参照が選択されませんでした。"));
    return;
}

// パーツ参照のプロパティを取得
CMapStringToString valueMap;
if (getAcmBomMgr()->getPartData(partrefId, valueMap) != Acad::eOk) return;

POSITION pos = valueMap.GetStartPosition();
while (pos != NULL)
{
    CString key, value;
    valueMap.GetNextAssoc(pos, key, value);
    acutPrintf(_T("\n  %s : %s"), key, value);
}

※サンプルコードについての補足

getPartData メソッドにパーツ参照の ID と、値を格納する CMapStringToString のみを渡していますが、あわせて Adesk::UInt32 型の numOfItems を渡すことで、設定されているパーツ参照の数量も取得できます。