これは、Mechanical SDKで標準マネージャーを使用する方法に関するシリーズの2番目の記事です。以前の記事と標準に関する概要については、パート1を参照してください。
標準の追加
標準を追加するには、2つの方法があります。
最初の方法では、以下のパラメータを使用して標準を自動的に作成できます。
- stdId – 新しい標準のOdDbObjectIdとして返されます。
- baseStdName – 初期化時にデフォルトとして使用される設定を持つ標準の名前。
- stdName – 新しい標準の名前(空の場合、標準の名前は辞書内の名前と同じになります)。
- bool – フラグbSetCurrentは、標準を現在のものとして設定することを無効または有効にします。
- pDb – データベースへのポインタ。
baseStdNameが無効な場合(標準が登録されていない場合)、eInvalidInputが返されます。
OdDbObjectId stdId;
OdString baseStdName(L"ISO");
OdString stdName(L"CustomStd");
bool bSetCurrent = true;
errorStatus = pStdMgr->addStandard(stdId, stdName, baseStdName, bSetCurrent, pDb);
2番目の方法では、標準をデータベースに追加できますが、標準の作成は完全にユーザーに依存します。この方法は通常、ケース固有の初期化やカスタム標準を作成する場合に使用されます。パラメータは前の方法とほとんど同じです。
- stdId – データベースオブジェクトに追加された場合、OdDbObjectIdとして返されます。
- pStd – 標準へのポインタ。
- bool – フラグbSetCurrentは、新しい標準を現在のものとして設定するためにtrueに設定されます。
- pDb – データベースへのポインタ。
OdDbObjectId stdId;
AcmStandard* pStd = //create one from registered standards or custom
bool bSetCurrent = true;
errorStatus = pStdMgr->addStandard(stdId, pStd, bSetCurrent, pDb);
次の図は、最初のaddStandardメソッドを使用して新しい標準をデータベースに追加する際の物理的な表現を示しています。これは、ISOに基づいたカスタム標準であり、一連のシンボル標準が含まれています。
標準の削除
AcmStandardManager::removeStandardメソッドを使用すると、標準を簡単に削除できます。このメソッドは、入力パラメータとしてOdDbObjectIdを受け取ります。標準は、どこでも使用されていない場合(つまり、モデル空間でこの標準に基づいて機械シンボルが1つも作成されていない場合)にのみ削除できます。それ以外の場合は、結果としてeStandardIsReferencedが返されます。
OdDbObjectId stdId;
errorStatus = pStdMgr->getStd(L"CustomStd", stdId, pDb);
errorStatus = pStdMgr->removeStandard(stdId);
追加のマネージャーメソッド
AcmStandardManager::renameStdは標準の名前を変更します。また、データベース内の依存するセクションおよび詳細ビューのスタイルも名前変更します。
OdDbObjectId stdId = // get standard id for renaming
OdString newName(L"MechStd");
errorStatus = pStdMgr->renameStd(stdId, newName);
AcmStandardManager::numStandardsは、すでにデータベースに追加されている標準の数を返します。
int stdCount = pStdMgr->numStandards(pDb);
標準を作成する別の方法として、AcmStandardManager::registerStdBasedOnを使用してコピーする方法があります。これは、標準の完全なコピーを新しい名前で作成します。名前はデータベース内で一意である必要があります。
OdDbObjectId baseStdId = // get existed standard id for copying
OdDbObjectId copiedStdId;
OdString name(L"CopyOf");
errorStatus = pStdMgr->registerStdBasedOn(baseStdId, name, copiedStdId);
AcmStandardManager::getRegisteredStdは、基本クラスから派生したOdRxClassオブジェクトへのポインタで配列を埋めます。baseClassパラメータが空の場合、デフォルトでAcmStandardが使用されます。
OdDbVoidPtrArray rxObjArray;
OdString baseClass(L"AcmStandardISO");
errorStatus = pStdMgr->getRegisteredStd(baseClass, rxObjArray);
現在の標準にのみ依存するシンボルの再生成には、AcmStandardManager::updateSymbolsを使用できます。入力配列がNULLの場合、現在の標準に依存するすべてのシンボルを再生成します。それ以外の場合は、配列内のシンボルのみを再生成します。
OdDbObjectIdArray* pSymbolsIds = NULL;
errorStatus = pStdMgr->updateSymbols(pDb, pSymbolsIds);
AcmStandardManager::attachReactorおよびAcmStandardManager::removeReactorメソッドは、AcmStdReactorを標準マネージャーにアタッチおよびデタッチします。このクラスは、標準との相互作用を追跡し、標準に何らかの変更があった場合に通知を受け取るために使用されます。
これはMechanical SDKでの標準の使用に関する一連の記事の終わりですが、Mechanicalに関するさらなる記事についてはブログをご覧ください。