Mechanical SDK 的一个重要部分是物料清单 (BOM) 表功能,它有助于组织图纸的元素。物料清单表是一个特殊的数据库持久对象,它与其他 Mechanical SDK 实体交互。
Mechanical SDK 的 BOM 表之前已在物料清单简介以及其他与机械结构和零件(零件参考)相关的文章中进行了描述。
BOM 表解释
机械图纸不仅仅是折线、圆形等基本图元的集合。通常,机械图纸复杂且分层。Mechanical SDK 允许用户标记图纸的几何图形,然后将其收集到 BOM 表中。几何图形可以标记为组件或零件。每个零件在 BOM 表中表示为一行。此功能很复杂,因此使用 BOM Manager 服务类来简化工作。
BOM 表和 Drawings SDK
在数据库层面,BOM 表是一个对象,它在 Drawings SDK 中看起来像一个字典对象。从逻辑上讲,物料清单表只是一组行,但它本身没有图形表示。为此,Mechanical SDK 有一个 PartList 实体,用于显示表的内容。PartList 不仅仅是 BOM 行;它可以通过过滤器和组进行重新配置,这就是为什么任何 BOM 表都可以包含多个 PartList 实体的原因。
此 PartList 显示 BOM 表的内容:
如何使用BOM管理器
要使用BOM管理器,只需包含以下文件:
#include "AcmBOMManager.h"
并调用此函数:
AcmBOMManagerPtr pBomMgr = getAcmBomMgr();
基本创建方法
目前,BOM管理器有三种创建BOM表的方法:
virtual OdResult createBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId targetId = OdDbObjectId::kNull, const OdString& name = "", bool addToBrowser = true, OdDbDatabase * pHostDb = NULL);
virtual OdResult createBomTable(OdDbObjectId& aNewBomTableId, const AmiCompDefKey* pTargetKey, OdString name = OdString::kEmpty);
virtual OdResult createBorderBomTable(OdDbObjectId& aNewBomTableId, const OdDbObjectId borderId, OdString name = "", bool populate = false);
这些方法具有相似的签名。开头是BOM表参数,然后是目标参数(块或组件定义)、BOM表名称和OdDbDatabase。前两种方法生成相同的表,但签名不同,第三种方法生成一个附加到特定标题边框的BOM表。
基本获取器
BOM表和BOM行与不同的机械实体(例如气球)之间存在复杂的交互。气球附着在BOM行上。BOM管理器有一个特殊方法,用于为特定BOM行选择气球(有时BOM行也可以称为项目或BOM项目):
virtual OdResult getItemBalloons(const OdDbObjectId& itemId, OdDbObjectIdArray& ballIdArray, const OdDbObjectId& refId) const; virtual OdResult getItemBalloons(const OdDbObjectId& itemId, OdDbObjectIdArray& ballIdArray, const OdDbObjectIdArray& refIds) const;
第一个参数是行ID,第二个参数是与该行相关的气球数组,第三个参数是单个引用ID或引用ID数组,用于获取特定气球或多个气球。
这是一个气球附着到项目编号值为“1”的行的示例:
BOM的另一个有用功能是其行可以包含属性(或附加到行的组件),例如数量、名称、标准等。在大多数情况下,一组属性受其标准(BOMStd)的约束。BOM管理器有几个方法可以获取特定行的数据:
virtual OdResult getItemAttribute(const OdDbObjectId& itemId, const OdString& key, OdString& attrib, bool evaluate = true, const OdDbObjectId& bomStdId = OdDbObjectId::kNull) const;
第一个参数是行ID,第二个是属性名称,第三个是属性值。
virtual OdResult getItemData(const OdDbObjectId& itemId, OdString& itemNo, OdUInt32& numOfItems, OdMapStringToString& valueMap, const OdDbObjectId& bomStdId = OdDbObjectId::kNull) const;
第一个参数是行ID,第二个是BOM行号,第三个是数量(或项目数),第四个是包含“属性名称”—“属性值”对的映射。
例如,让我们看看本文中的第一张图片,假设我们想获取第一行的getItemData。我们将得到一个包含以下值的映射:
- 名称:螺塞
- 标准:DIN 910 - M18 x 1.5
- 材料:*空*
此外,'itemNo' 将为 '1',表示BOM行号,'numOfItems' 将为 '1',表示项目数量。
BOM管理器迭代器
BOM 管理器提供两种迭代器:
- 项迭代器,用于遍历 BOM 行。
- 零件数据迭代器,用于遍历零件数据。
virtual AcmIteratorPtr newItemIterator(const OdDbObjectId& bomId, Acm::PartListDirection sort = Acm::kTopDown, bool expanded = false) const;
'newPartDataIterator' 方法返回一个零件数据迭代器。第一个参数是 OdDbDatabase 对象,第二个参数定义是否仅收集主 BOM 表数据,第三个参数定义是否使用外部参照。
机械 BOM 是一个相当复杂但功能强大的工具,可帮助工程师使图纸更清晰、更易于理解。Mechanical SDK 目前支持 BOM 管理器应支持的所有基本方法。本文仅包含服务类的基本描述,并将在未来进行扩展。