development of

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

【AutoCAD Mechanical】パーツ参照を作成する その3

パーツ参照の情報を設定する

これまでの記事では作成したパーツ参照のプロパティは空欄でした。

【AutoCAD Mechanical】パーツ参照を作成する その1 - development of

パーツ参照を作成する その2 - development of

今回はパーツ参照のコンポーネントのプロパティに値を追加していきます。 f:id:tknmt:20190522144345p:plain

サンプルコード

// パーツ参照を選択
AmiPickObj PickObj;
if (amiPick(
    _T("\nパーツ参照を選択"),
    AmiKeyType::partKey,
    NULL,
    PickObj,
    Adesk::kFalse) != Acm::eOk) return;

AcDbFullSubentPath subentPath;
AcGePoint3d pickPoint;
AcGeVector3d pickVector;
AcGeMatrix3d viewTrans;
Adesk::Boolean isGhost;

// 選択したときの情報を取得
if (amiGetPickInfo(
    &PickObj,
    subentPath,
    pickPoint,
    pickVector,
    viewTrans,
    isGhost) != Acm::eOk) return;

// パーツ参照のObjectIdを取得
AcDbObjectId partRefId = subentPath.objectIds().first();

// パーツ参照のプロパティの値を入力
ACHAR name[512];
if (acedGetString(0, _T("\n名前を入力"), name) != RTNORM) return;
ACHAR descr[512];
if (acedGetString(0, _T("\n説明を入力"), descr) != RTNORM) return;
ACHAR standard[512];
if (acedGetString(0, _T("\n規格を入力"), standard) != RTNORM) return;
ACHAR material[512];
if (acedGetString(0, _T("\n材料を入力"), material) != RTNORM) return;
ACHAR dim[512];
if (acedGetString(0, _T("\n寸法を入力"), dim) != RTNORM) return;
ACHAR units[512];
if (acedGetString(0, _T("\n単位を入力"), units) != RTNORM) return;
ACHAR qty[512];
if (acedGetString(0, _T("\n数量を入力"), qty) != RTNORM) return;

// パーツ参照のプロパティ
const LPCTSTR keyName       = _T("NAME");       // 名前
const LPCTSTR keyDescr      = _T("DESCR");      // 説明
const LPCTSTR keyStabdard   = _T("STANDARD");   // 規格
const LPCTSTR keyMaterial   = _T("MATERIAL");   // 材料
const LPCTSTR keyDim        = _T("DIM");        // 寸法
const LPCTSTR keyUnits      = _T("BOM_UNITS");  // 単位
const LPCTSTR keyQty        = _T("QTY");        // 数量

Adesk::UInt32 numOfItems;
CMapStringToString valueMap;

// 入力した値をセット
valueMap.SetAt(keyName, name);
valueMap.SetAt(keyDescr, descr);
valueMap.SetAt(keyStabdard, standard);
valueMap.SetAt(keyMaterial, material);
valueMap.SetAt(keyDim, dim);
valueMap.SetAt(keyUnits, units);
valueMap.SetAt(keyQty, qty);
numOfItems = _ttoi(qty);

// 部品表にパーツ参照のデータをセット
if(acmBomMgr->setPartData(
    partRefId,
    numOfItems,
    valueMap) != Acm::eOk) return;

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

パーツ参照には次の表のようなプロパティがあり、各プロパティに対してのキー名が割り振られています。

プロパティ名 キー名
名前 NAME
説明 DESCR
規格 STANDARD
材料 MATERIAL
寸法 DIM
単位 BOM_UNITS
数量 QTY

パーツ参照にパーツの情報を割り当てるには、CMapStringToString クラスを使用して、これらのプロパティのキー名と値のマップを作成し、AcmBOMManager::setPartData メソッドを使用してパーツ参照に値を設定します。