概述
ODA Mechanical SDK 使用符号库,您可以在库中保存常用符号,并以预配置的值将其插入到绘图中。除了从库中添加和移除符号外,您还可以编辑和重命名符号。您还可以将符号库设置为默认库。
以下符号支持符号库:
- 边符号
- 形位公差框符号
- 表面纹理符号
- 焊接符号
要访问符号库,请使用以下全局函数(按上述符号的顺序列出):
-
include "AmdtEdgeLibrary.h" bool getAcmEdgeLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true); -
include "AmdtFCFLibrary.h" bool getAcmFCFLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true); -
include "AmdtSurfTextLibrary.h" bool getAcmSurfaceTextureLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true); -
include "AmdtWeldingLibrary.h" bool getAcmWeldingLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true);
其中:
- libId — 如果成功,将返回的符号库的对象 ID。
- pDb — 数据库指针。
- bCreateIfNotExist — 如果此标志为 true,则在符号库不存在时创建它。
示例
基于形位公差框创建新库对象的示例:
OdDbDatabasePtr pDb = ... // get the database
OdDbObjectId libId;
// find and get the ID of the library
if (!getAcmFCFLibrary(libId, pDb, true))
return;
AmdtFCFLibraryPtr pFCFLib = AmdtFCFLibrary::cast(libId.openObject(OdDb::kForWrite));
if (pFCFLib.isNull())
return;
// create and initialize an AcmFCF symbol for saving it to the library as a template
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);
pFCF->setAllAround(true);
pFCF->setSymbol(Acm::kProfileLine);
pFCF->setSymbol2(Acm::kStraightness);
// add a new item to the library
OdDbObjectId itemId;
pFCFLib->appendItem(L"FCFSymbTemplate", pFCF, itemId, true);
以另一种方式创建新库对象的示例:
AmdtFCFLibraryPtr pFCFLib = ... // get the library as in previous code example
// create and initialize an AcmFCF symbol for saving it to the library as a template
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);
pFCF->setAllAround(true);
pFCF->setSymbol(Acm::kCylindricity);
pFCF->setValue(Acm::FCFProjectedZone, L"projectedZone");
// create and initialize AmdtFCFLibObject using settings from AcmFCF
AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::createObject();
pFCFLibObj->set(pFCF->subSymbol(), L"FCFSymbTemplate2", L"ISO", L"AcmFCFStdISO");
// add a new item to the library
OdDbObjectId itemId;
pFCFLib->appendItem(pFCFLibObj, itemId, false);
pFCFLib->appendItem(L"FCFSymbTemplate", pFCF, itemId, true);
更新符号库对象的示例:
AmdtFCFLibraryPtr pFCFLib = ... // get the library as in previous code example
// find symbol
OdDbObjectId libObjId;
if (!pFCFLib->find(L"FCFSymbTemplate", L"ISO", L"AcmFCFStdISO", libObjId, false))
return;
AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::cast(libObjId.openObject(OdDb::kForWrite));
if (pFCFLibObj.isNull())
return;
// create a new AcmFCF for updating the symbol library object
AcmFCFPtr pFCF2 = AcmFCF::createObject();
pFCF2->setSymbolDefaults(pDb);
pFCF2->setAllAround(false);
pFCF2->setSymbol(Acm::kCircularity);
// update the symbol library object
pFCFLibObj->setObject(pFCF2->subSymbol());
基于库对象创建 AcmFCF 符号的示例:
OdDbObjectId libObjId = ... // get the library object ID as in previous code example
AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::cast(libObjId.openObject(OdDb::kForWrite));
if (pFCFLibObj.isNull())
return;
// create a new AcmFCF symbol
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);
// load template settings
pFCFLib->loadItem(L"FCFSymbTemplate", pFCF);
将符号库设置为默认值的示例:
AmdtFCFLibraryPtr pFCFLib = .. // get the library as in the first code example
pFCFLib->setIsDefaultItem(L"FCFSymbTemplate", L"ISO", L"AcmFCFStdISO", true);