我正在努力学习否决权,这些年来我一直在回避的事情
当否决blockreference的DrawableOverrule时,当用户更改属性中的属性引用时,将执行overrule(我没有料到)
对象将显示为打开状态(在本例中为blockreference)以读取其属性,但要从.net访问其AttributeReference,需要一个事务,并且没有一个事务处于活动状态。如何阅读它们
解决方法是为属性引用创建另一个否决权。最佳实践是什么
公共类test2overrule
继承了DrawableOverrule
Const regappname As String=“testap1”
公共共享test2overrulevas作为新的test2overrule
Public Sub New()
”告诉AutoCAD在我们的应用程序名称上进行筛选。
”(这意味着我们的否决权只会被称为
拥有此名称扩展数据的对象上的“
”)
SetXDataFilter(regAppName)
末端接头
将函数WorldDraw(ByVal可绘制为Autodesk.AutoCAD.GraphicsInterface.drawable,ByVal wd可绘制为Autodesk.AutoCAD.GraphicsInterface.WorldDraw)替换为布尔值。
Dim m As BlockReference=TryCast(可绘制,实体)
返回MyBase。WorldDraw(可绘制,wd)
结束函数
将函数SetAttributes(ByVal可绘制为Autodesk.AutoCAD.GraphicsInterface.drawable,ByVal traits可绘制为Autodesk.AutoCAD.GraphicsInterface.DrawableTraits)替换为整数。
Dim m As BlockReference=TryCast(可绘制,实体)
返回MyBase。设置属性(可绘制、特征)
结束函数
结束类
Public Overrides Function WorldDraw(drawable As Autodesk.AutoCAD.GraphicsInterface.Drawable, wd As Autodesk.AutoCAD.GraphicsInterface.WorldDraw) As Boolean
Dim oAttrib As AttributeReference = Nothing
Dim blk As BlockReference = DirectCast(drawable, BlockReference)
If Not blk Is Nothing Then
Dim attCol As AttributeCollection = blk.AttributeCollection