CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

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

2022-12-31 17:55| 发布者: admin| 查看: 307| 评论: 0|来自: AutoCAD

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

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

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

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


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 14:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部