CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2019 开发者帮助

在 wblockClone() 期间处理对 AcDbEntities 的硬引用:案例 2

2024-5-18 17:57| 发布者: admin| 查看: 106| 评论: 0|原作者: admin|来自: AutoCAD

在 wblockClone() 期间处理对 AcDbEntities 的硬引用:案例 2

仅当引用位于实体中,并且该实体始终与引用的实体位于同一块表记录中时,上述示例才有效。由于它们位于同一块表记录中,因此 for 引用实体的设置也对引用实体有效。但是,如果引用的实体可以存在于不同的块表记录中,或者引用的实体是 ,则必须使用其他方法来确定是否应进行追加。isPrimaryAcDbObject

首先,您需要检查 WBLOCK 通知以确定正在发生的 WBLOCK 类型,可能通过设置一个全局标志,然后您的函数可以查询该标志:wblockClone()

  • 如果它是 WBLOCK*,则不要在自定义类的重写 、回调期间或任何其他位置使用。AcDbBlockTableRecord::appendAcDbEntity() wblockClone()
  • 如果它是用户定义块的 WBLOCK,则它可能取决于引用的实体当前存在的位置。首先,请记住,所选块将分解到目标图形的模型空间中。您可能希望以其他方式定义此行为,但有几种情况可能如下:1) 始终将引用的实体克隆到模型空间中。在这种情况下,您将始终设置为 ,或者 2) 检查引用实体的当前位置。如果位于模型空间或图纸空间中,则将其克隆到相应的空间并设置为 。如果它位于所选模块中,则将其克隆到模型空间。如果它位于其他用户定义的块中,则调用该块记录。只要确保你不要尝试克隆选定的块。在这种情况下,块表记录将负责克隆引用的实体。isPrimaryAdesk::kTrueisPrimaryAdesk::kTruewblockClone()
  • 如果它是选择集的 WBLOCK,则仅重置为引用的图元进入模型空间或图纸空间时。如果它位于用户定义的块中,请调用该块,而不是调用引用的实体。isPrimaryAdesk::kTruewblockClone()AcDbBlockTableRecord

最后,应该注意的是,系统当前不支持设置对 an 的硬引用,即使您使用 an 作为引用也是如此。 使用默认实现,因此在任一形式的 WBLOCK 期间都不会追加任何引用的实体。如果在实体是代理时发生 WBLOCK,则引用将被克隆,但如果没有追加,它们将是无所有者的,并且不是持久的。结果是,当加载 wblocked 图形时,您的参照 ID 将为 ,并且参照的图元将丢失。您必须对自定义对象进行编码才能正常处理这种情况。AcDbEntityAcDbProxyObjectAcDbHardPointerIdAcDbProxyObjectwblockClone()NULL


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2025-1-19 07:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部