BimRv SDK:创建元素组

您可以使用 newGroup() 方法创建元素组。

创建 OdBmElementGroup 实例后,在将 ElementGroup 添加到数据库之前启动一个事务。只有在 ElementGroup 位于数据库中之后,才应调用 newGroup() 方法。下面是一个示例实现:

OdBmElementGroupPtr pElementGroup = OdBmElementGroup::createObject();
ODBM_TRANSACTION_START(t, pDb)
  pDb->addElement(pElementGroup);
  pElementGroup->newGroup(arrElementIds, L"Group 1");
ODBM_TRANSACTION_COMMIT();

传入的成员不应属于任何其他元素组或装配体。此外,未来的组名不应在现有的 OdBmElementGroup 实例中使用。

创建的 ElementGroup 取决于传入的元素列表:

  • 对于常规的与视图无关的元素,将创建模型组(属于 OST_IOSModelGroups 类别)。
  • 如果没有常规元素,但至少有一个视图特定但非注释元素(例如 FilledRegion),则会创建一个详细信息组(属于 OST_IOSDetailGroups 类别);其他注释元素也会添加到此组中。
  • 如果还存在可以与之关联的注释元素,则除了模型组之外,还会创建一个附加组(属于 OST_IOSAttachedDetailGroups 类别)。
  • 如果传入的元素列表仅包含注释,则组创建将因 eEmptySet 错误而失败。

模型组和详细信息组成员可以根据初始元素列表进行扩展,添加其他元素。例如,详细信息组可以根据视图扩展 Sketch 和 SketchPlane 元素,FilledRegion 可以拥有默认不可见的依赖尺寸和曲线元素,等等。

此外,在创建元素组时,还会向数据库添加几个新元素:

  • 如果存在注释,则为注释附加 ElementGroup 实例。
  • 为每个 ElementGroup 创建 ElementGroupType 实例。
  • 每个成员元素和 ElementGroup 实例的隐藏克隆,用于组织所谓的“定义”组。

上述“定义”组表示初始 ElementGroup 状态的快照,以防将来通过新增或排除成员对其进行更改。这些“定义”组可通过 getDefiningGroupInstId() 方法访问。“定义”组及其成员元素标有非空的 UnplacedOwnerId 标头字段。isUnplaced() 方法对其元素标头返回 true。所有此类元素都应从任何元素处理例程中排除,因为它们仅供内部使用。

今天就开始行动

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

免费试用