この記事では、ビューで定義された要素、カテゴリ、およびフィルターのグラフィックオーバーライドを取得、変更、および削除する方法について説明します。
オーバーライドの取得
グラフィックオーバーライドを取得するには、OdBmDBViewクラスの対応するメソッドを使用します。
- 要素のオーバーライドを取得: getElementOverrides()。
- カテゴリのオーバーライドを取得: getCategoryOverrides()。
- フィルターのオーバーライドを取得: getFilterOverrides()。
オーバーライドの変更
グラフィックオーバーライドを変更するには、OdBmDBViewクラスの次のメソッドを使用します。
要素のオーバーライドを変更するには、setElementOverrides()メソッドを使用します。例:
OdBmObjectId elemId = pDb->getObjectId(iHandle);
//Create an empty override and set it as a graphic override for an element
OdBmOverrideGraphicSettingsPtr pEmptyOverrider = OdBmOverrideGraphicSettings::createObject();
pActiveView->setElementOverrides(elemId, pEmptyOverrider);
カテゴリのオーバーライドを変更するには、setCategoryOverrides()メソッドを使用します。例:
OdBmElementHeaderPtr pHeader = elemId.getHeader();
OdInt64 iCategory = static_cast<OdInt64>(pHeader->getCategoryId().getHandle());
OdBm::BuiltInCategory::Enum category = static_cast<OdBm::BuiltInCategory::Enum>(iCategory);
pActiveView->setCategoryOverrides(category, pEmptyOverrider);
フィルターのオーバーライドを変更するには、setFilterOverrides()メソッドを使用します。以下の例は、要素IDを使用して目的のフィルターのオーバーライドを変更する方法を示しています。
OdBmFilterOverridesPtr pFilterOverrides = pActiveView->getFilterOverrides();
OdBmFilterGraphicSettingsPtrArray aGraphicsSettings;
pFilterOverrides->getFilterGraphicsSettings(aGraphicsSettings);
for (auto pSetting : aGraphicsSettings)
{
OdBmFilterElementPtr pFilterElem = pSetting->getFilterElemId().safeOpenObject();
if (pFilterElem->isMatched(elemId))
{
pActiveView->setFilterOverrides(pSetting->getFilterElementId(), pEmptyOverrider);
}
}
取得メソッドは OdBmOverrideGraphicSettings クラスのオブジェクトを返し、変更メソッドには同じクラスのオブジェクトが必要です。このクラスのメソッドを使用して、グラフィック設定を制御できます。
オーバーライドを削除
ビューからすべてのグラフィックオーバーライドを削除するには、removeAllOverrides() メソッドを呼び出します。また、新しく作成された OdBmOverrideGraphicSettings オブジェクトを設定すると、古いオーバーライドが削除されます。
完全なコード例は、BimRv/Examples/TB_Commands ディレクトリにある BmRemoveOverridesCmd コマンドを参照してください。