just_joke 发表于 2012-11-9 21:07:51

删除块中的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 的方法。

sieben 发表于 2012-11-9 23:26:55

块属性来自于块记录,按理说应该不能在块参考里面删除吧?否则不是两个块参考可以不一样了?
你说“CurBlock.AttributeCollection数目还是大于零”,但块属性还能不能见到,或者双击块参考后还有没有块属性列出?

just_joke 发表于 2012-11-10 15:28:16

sieben 发表于 2012-11-9 23:26 static/image/common/back.gif
块属性来自于块记录,按理说应该不能在块参考里面删除吧?否则不是两个块参考可以不一样了?
你说“CurBloc ...

谢谢。用代码创建带属性的块参照的流程是这样的:(1)创建一个BlockReference(2)将其添加模型空间,获得其ObjectID(3)判断其对应的BlockTableRecord的HasAttributionDefinitoins属性(4)如果有属性定义,就可以获取块记录中需要的AttributeDefinitoin,创建AttributeReference,与块参考关联,确定AttributeReference的值,然后再通知事物处理添加新创建的AttributeReference。所以两个块参照,即便块名相同,也可能拥有不同的属性名称。
我这样删除后,块属性已经开不到了,双击块会提示“无法从选定的块参照读取块属性”。

sieben 发表于 2012-11-10 15:58:02

所以你当前的情况应该是正常的,尽管AttributeCollection数目还是大于零,但找不到块属性;
可以说你是删除了块属性,也可以说没有;

糕笔仔 发表于 2015-4-19 16:14:35

本帖最后由 糕笔仔 于 2015-4-19 16:39 编辑

同问…添加块参照的时候顺便添加了属性…想后面继续添加属性…或者删除属性…这个不应该不难…要找选中对象的点…用来显示属性的位置
页: [1]
查看完整版本: 删除块中的AttributeReference 属性