这是关于在Mechanical SDK中使用标准管理器系列文章的第二篇。有关标准的前一篇文章和概述详细信息,请参阅第1部分。
添加标准
有两种方法可以添加标准。
第一种方法允许您使用以下参数自动创建标准:
- 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);
第二种方法允许您将标准添加到数据库,但标准的创建完全依赖于用户。此方法通常用于特定情况的初始化或创建自定义标准。参数与前一种方法几乎相同:
- 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 作为输入参数。只有当标准未在任何地方使用时(即,模型空间中没有单个机械符号是基于此标准创建的),才能删除标准;否则,将返回 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 的文章。