乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 61|回复: 3

高效地从AttributeReference获取块引用名称

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-12 20:36:58 | 显示全部楼层 |阅读模式
我需要知道特定类块的属性是否已被修改,为了解决这个问题,我实现了文档的 ObjectModified 事件。这只处理名为“ZDB*”的块引用(我需要知道块引用是否也被修改了)private void OnObjectModified(object sender, ObjectEventArgs e)。
{。
BlockReference br;。
if (e.DBObject.GetType() == typeof(BlockReference))。
{。
br = (BlockReference)e.DBObject.ObjectId.GetObject(OpenMode.ForRead);。
}。
else if (e.DBObject.GetType() == typeof(AttributeReference))。
{。
br = (BlockReference)e.DBObject.OwnerId.GetObject(OpenMode.ForRead);。
}。
尝试。
{。
如果 (br.Name.StartsWith(“ZDB”, True, CultureInfo.CurrentCulture))。
{。
\\命令结束后稍后处理此命令。
QueueEvent = true;。
br.关闭();。
br.处置();。
}。
}。
捕获 {}。
}编译器抱怨 Close 已贬值,我应该使用事务,在这种情况下,这似乎有些过分,老实说,如果我不必打开这个对象,我就不必关闭它,有没有更有效的方法可以做到这一点?在当前命令的生命周期中,可能会有数百次甚至数千次迭代,这是我过滤糠秕的唯一方法,因此我只在没有命令处于活动状态时才调用其他函数。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-8-13 00:59:45 | 显示全部楼层
嗨,
Objectid。GetObject()方法使用活动的top事务(如果有的话)
在事件hadler中,您应该使用OpenCloseTransaction或“折旧”的打开/关闭方法。
您可以删除“折旧”警告,如下所示:
#pargma warning disable 0618
//一些代码使用关闭/打开方法
<div>#pragma警告恢复0618
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-13 09:47:16 | 显示全部楼层
有没有其他方法可以在不打开块引用进行读取的情况下获取块名称?当块引用是由e.DBObject表示的对象时,我可以在不打开的情况下获取名称。
更好的是,有没有更好的方法来做到这一点?
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2018-8-13 10:02:42 | 显示全部楼层
我可能会简化一些代码,但因为我喜欢通过查看代码来理解代码,所以我会让它保持原样。
我所做的是监视图形的更改,因为它们与特定的块参照有关。如果它们改变了,那么我需要更新程序中的数据。我很快意识到我不能立即这样做,因为如果一个命令处于活动状态,autocad将会出现致命错误。同样的事情似乎发生在撤消,但仍然通过该问题的工作!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 08:47 , Processed in 0.152897 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表