删除块中的AttributeReference 属性
有一些属性块,我想通过下面的代码把其中的属性删除掉。using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockReference CurBlock = (BlockReference)trans.GetObject(AllObjIDs, OpenMode.ForWrite);
AttributeCollection CurAttributeCollection = CurBlock.AttributeCollection;
for (int j = (CurAttributeCollection.Count - 1); j >= 0; j--)
{
AttributeReference CurAttributeReference = (AttributeReference)trans.GetObject(CurAttributeCollection, OpenMode.ForWrite);
CurAttributeReference.Erase();
}
trans.Commit();
}
代码运行完后,发现CurBlock.AttributeCollection数目还是大于零,这是怎么回事?求各位谈谈正确从块中删除AttributeReference 的方法。
块属性来自于块记录,按理说应该不能在块参考里面删除吧?否则不是两个块参考可以不一样了?
你说“CurBlock.AttributeCollection数目还是大于零”,但块属性还能不能见到,或者双击块参考后还有没有块属性列出? sieben 发表于 2012-11-9 23:26 static/image/common/back.gif
块属性来自于块记录,按理说应该不能在块参考里面删除吧?否则不是两个块参考可以不一样了?
你说“CurBloc ...
谢谢。用代码创建带属性的块参照的流程是这样的:(1)创建一个BlockReference(2)将其添加模型空间,获得其ObjectID(3)判断其对应的BlockTableRecord的HasAttributionDefinitoins属性(4)如果有属性定义,就可以获取块记录中需要的AttributeDefinitoin,创建AttributeReference,与块参考关联,确定AttributeReference的值,然后再通知事物处理添加新创建的AttributeReference。所以两个块参照,即便块名相同,也可能拥有不同的属性名称。
我这样删除后,块属性已经开不到了,双击块会提示“无法从选定的块参照读取块属性”。 所以你当前的情况应该是正常的,尽管AttributeCollection数目还是大于零,但找不到块属性;
可以说你是删除了块属性,也可以说没有; 本帖最后由 糕笔仔 于 2015-4-19 16:39 编辑
同问…添加块参照的时候顺便添加了属性…想后面继续添加属性…或者删除属性…这个不应该不难…要找选中对象的点…用来显示属性的位置
页:
[1]