本文介绍如何检索、修改和删除视图中定义的元素、类别和过滤器的图形替代。
检索覆盖
要检索图形覆盖,请使用 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 命令的完整代码示例。