明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1718|回复: 2

添加块属性程序

[复制链接]
发表于 2012-12-11 22:01:22 | 显示全部楼层 |阅读模式
本帖最后由 kvstone 于 2012-12-11 22:01 编辑

首先,我有个疑问,为Blockreference 添加新的属性,是否需要先给 BlockTableRecored 添加属性,在对每个BlockReference添加属性

然后,下面的程序是为了给BlockTableRecord添加新属性,程序可以运行,没有任何错误,但是属性并没有添加成功,请大家帮忙看看,挑挑毛病在哪

  1. Public Sub AddAttribute(ByVal attTag As String, ByVal attText As String)
  2.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  3.         Dim attRef As AttributeReference

  4.         Dim blkTr As BlockTableRecord

  5.         Using docLock As DocumentLock = doc.LockDocument
  6.             Using trs As Transaction = doc.Database.TransactionManager.StartTransaction()

  7.                 bkRef = trs.GetObject(MyClass.BlockId, OpenMode.ForRead)

  8.                 If bkRef.IsDynamicBlock Then
  9.                     _blkTbRecId = bkRef.DynamicBlockTableRecord
  10.                 Else
  11.                     _blkTbRecId = bkRef.BlockTableRecord
  12.                 End If
  13.                 blkTr = TryCast(trs.GetObject(_blkTbRecId, OpenMode.ForWrite), BlockTableRecord)

  14.                 Dim attDef As AttributeDefinition = New AttributeDefinition(blkTr.Origin, attText, attTag, "", doc.Database.Textstyle)

  15.                 blkTr.AppendEntity(attDef)
  16.                 trs.AddNewlyCreatedDBObject(attDef, True)

  17.                 trs.Commit()
  18.             End Using
  19.         End Using
  20.     End Sub

发表于 2012-12-12 08:43:27 | 显示全部楼层
1,为Blockreference 添加新的属性,是否需要先给 BlockTableRecored 添加属性
答:需要
2,另外在生成块参考Blockreference 时还需要把BlockTableRecored 的属性重新往Blockreference添加一次,否则不会显示
发表于 2012-12-12 08:48:57 | 显示全部楼层
Transaction ctrans, BlockReference bref, BlockTableRecord btr

          foreach (ObjectId idAtt in btr)
          {
            Entity ent = (Entity)ctrans.GetObject(idAtt, OpenMode.ForRead);
            if (ent is AttributeDefinition)
            {
              AttributeDefinition attDef = (AttributeDefinition)ent;
              AttributeReference attRef = new AttributeReference();
              attRef.SetAttributeFromBlock(attDef, bref.BlockTransform);        
                attRef.TextString = attDef.TextString; //或设置别的值
              bref.AttributeCollection.AppendAttribute(attRef);
              ctrans.AddNewlyCreatedDBObject(attRef, true);
            }
          }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:51 , Processed in 0.261554 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表