Keith™ 发表于 2018-8-12 20:36:58

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

我需要知道特定类块的属性是否已被修改,为了解决这个问题,我实现了文档的 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 已贬值,我应该使用事务,在这种情况下,这似乎有些过分,老实说,如果我不必打开这个对象,我就不必关闭它,有没有更有效的方法可以做到这一点?在当前命令的生命周期中,可能会有数百次甚至数千次迭代,这是我过滤糠秕的唯一方法,因此我只在没有命令处于活动状态时才调用其他函数。
**** Hidden Message *****

gile 发表于 2018-8-13 00:59:45

嗨,
Objectid。GetObject()方法使用活动的top事务(如果有的话)
在事件hadler中,您应该使用OpenCloseTransaction或“折旧”的打开/关闭方法。
您可以删除“折旧”警告,如下所示:
#pargma warning disable 0618
//一些代码使用关闭/打开方法
<div>#pragma警告恢复0618

Keith™ 发表于 2018-8-13 09:47:16

有没有其他方法可以在不打开块引用进行读取的情况下获取块名称?当块引用是由e.DBObject表示的对象时,我可以在不打开的情况下获取名称。
更好的是,有没有更好的方法来做到这一点?

n.yuan 发表于 2018-8-13 10:02:42

我可能会简化一些代码,但因为我喜欢通过查看代码来理解代码,所以我会让它保持原样。
我所做的是监视图形的更改,因为它们与特定的块参照有关。如果它们改变了,那么我需要更新程序中的数据。我很快意识到我不能立即这样做,因为如果一个命令处于活动状态,autocad将会出现致命错误。同样的事情似乎发生在撤消,但仍然通过该问题的工作!
页: [1]
查看完整版本: 高效地从AttributeReference获取块引用名称