Teigha Mechanical:OdDbDatabase 中的物料清单物理数据模型

物料清单是一个表格,其中包含所有零件和组件以及相应的数据和属性。其逻辑表示很容易理解,但 BOM 表的物理数据模型是一个复杂的概念,包括组件、零件和数据容器。

机械字典

所有与 Teigha Mechanical 相关的通用数据都位于几个字典中,特别是 AcmDictionary。

image1

数据库中的 AcmDictionary

AcmDictionary 包含与物料清单相关的数据:AcmBOM 字典和 AcmDataDictionary。此外,该字典还包含一些通用数据,例如标准字典。

image2

BOM 字典

机械数据字典

另一个重要的字典是 AcmBOMDATA 字典。此字典与 AcmDataDictionary 相关。基本上,AcmBOMDATA 包含 BOM 行和 BOM 表的数据容器。

数据容器可以是以下任何类型:DataEntry、DataEntryPart 或 DataEntryBlock。AcmDataDictionary 类处理和操作 BOM 数据:

OdResult  append(AcmDataEntryPtr pDataEntry, OdDbObjectId& newObjId);
OdResult createDataEntryFor(AcmBomPtr& pBom, const OdDbObjectId& targetId, OdDbObjectId& objId);
OdResult  createDataEntryFor2DCompDef(const OdDbObjectId& targetId, OdDbObjectId& objId);
OdResult  createDataEntryFor(const OdDbBlockTableRecordPtr& pBlockTableRecord, OdDbObjectId& objId);
OdResult getDataEntryByCompDefId(const OdDbObjectId& compDefId, OdDbObjectId& dataEntryId) const;
  • append(AcmDataEntryPtr pDataEntry, OdDbObjectId& newObjId) — 将新的数据条目容器添加到现有字典中。
  • createDataEntryFor() — 这组方法创建新的数据条目容器。
  • getDataEntryByCompDefId(const OdDbObjectId& compDefId, OdDbObjectId& dataEntryId) — 返回组件定义对象的数据条目容器。
image3

BOMData 字典和 DataEntries

DbInfo 服务类

AcadmDbInfo 是一个与 AcmDataDictionary 协同工作的服务类。此服务类旨在简化 Teigha Mechanical 字典的使用。

OdDbObjectId acmDictionaryId();
OdDbObjectId bomDictionaryId();
OdDbObjectId dataDictionaryId();
OdDbObjectId createBomDictionary();
  • acmDictionaryId() — 返回当前数据库的 AcmDictionary OdDbObjectId。
  • bomDictionaryId() — 返回当前数据库的 AcmBOM OdDbObjectId。
  • dataDictionaryId() — 返回当前数据库的 AcmBOMDATA OdDbObjectId。
  • createBomDictionary() — 如果当前数据库缺少 AcmBOM 字典,则创建一个新的。

BOM 对象

AcmBom 类表示物料清单表对象。AcmBom 对象包含一个数据条目容器,其中包含 BOM 表的适当数据以及表示 BOM 项的 BOM 行。

OdString                          name() const;
OdDbHardPointerId                 dataEntryId() const;
void                              setDataEntryId(OdDbHardPointerId objId);
void                              setName(OdString name);
bool                              isExpandedBOM() const;
OdInt16                           itemNumberStep() const;
OdString                          itemNumberStart() const;
void                              setItemNumberStart(const OdString& itemNumberStart);
void                              setItemNumberStep(OdInt16 itemNumberStep);
  • dataEntryId() — 返回 BOM 表数据容器。
  • setDataEntryId(OdDbHardPointerId objId) — 为 BOM 表设置数据容器。
  • name() — 返回 BOM 表的名称。
  • setName(OdString name) — 为 BOM 表设置名称。
  • isExpandedBOM() — 如果 BOM 已展开,则返回 true;如果已结构化,则返回 false。
  • itemNumberStep() — 返回 BOM 表的项目属性的编号步长。
  • itemNumberStart() — 返回 BOM 表的属性的第一个编号。
  • setItemNumberStart(const OdString& itemNumberStart) — 为 BOM 表设置项目编号步长。
  • setItemNumberStep(OdInt16 itemNumberStep) — 为 BOM 表设置第一个编号。

BOM 行

AcmBomRow 类表示 BOM 表项。BomRow 也包含一个数据容器。

OdString                 getItemName() const;
OdDbHardPointerId        getDataEntryId() const;
virtual bool             isVisible() const;
bool                     isToExpand() const;
OdInt32                  getSortPriority();
void                     setSortPriority(OdInt32 priority);
  • getItemName() — 返回项目名称。
  • getDataEntryId() — 返回数据容器。
  • isVisible() — 如果项目可见,则返回 true。
  • isToExpand() — 如果项目在展开的 BOM 中,则返回 true。
  • getSortPriority() — 返回排序优先级。
  • setSortPriority(OdInt32 priority) — 设置项目的排序优先级。
image4

BomRow 和 Bom

结论

物料清单是一组字典,其中包含 BOM 项(行)和数据容器(数据条目)的子集。行和条目相互连接,行与组件连接。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用