履歴付き要素をDatum要素に置き換える

CATIGSMFactory::ConvertToDatum()を使用することで、要素をDatum要素に変換できるが、
変換元の要素が複数ドメインの要素であった場合、
作成されるDatumの要素は複数作成されてしまう。

以下の手法を使用することで、変換元の要素が複数ドメインの要素でも、
一つのDatum要素を作成することができる。

// 変換元の要素からCATBodyを取得
CATIGeometricalElement_var spGeomElem = spObj; // spObjはCATISpecObject_var
CATBody_var spBody = spGeomElem->GetBodyResult();

// DatumFactoryを取得(以下はCATIPrtContainerから取得)
CATIDatumFactory * pDatumFact = NULL;
HRESULT rc = pPrtCont->QueryInterface(IID_CATIDatumFactory, (void**)&pDatumFact);
if (SUCCEEDED(rc) && pDatumFact != NULL)
{
  // BodyをDatum化する
  CATISpecObject * pDatumObj = NULL;
  rc = pDatumFact->InstanciateDatum(spBody, oDatumObj);
  if (SUCCEEDED(rc) && pDatumObj != NULL)
  {
    // 作成したDatum要素をツリーへ挿入
    CATISpecObject_var spDatumObj = pDatumObj;
    CATIGSMProcedualView_var curobj = spDatumObj;
    rc = curobj->InsertInProceduralView();
    if (SUCCEEDED(rc))
    {
      spDatumObj->Update();
    }
  }
}

作成後、ツリーに変換前の要素と変換後の要素の両方が存在してしまう為、
変換前の要素を削除する必要があるが、他の要素とリンクがある場合、
削除してしまうとエラーとなる場合があるため、注意が必要。

履歴付き要素をDatum要素に置き換える」への1件のフィードバック

  1. ピンバック: 履歴付き要素をDatum要素に置き換える その2 | PLM Tips Magazine

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)