乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 47|回复: 2

添加块属性程序

[复制链接]

3

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
20
发表于 2012-12-11 22:01:00 | 显示全部楼层 |阅读模式
首先,我有个疑问,为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

回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2012-12-12 08:43:00 | 显示全部楼层
1,为Blockreference 添加新的属性,是否需要先给 BlockTableRecored 添加属性
答:需要
2,另外在生成块参考Blockreference 时还需要把BlockTableRecored 的属性重新往Blockreference添加一次,否则不会显示
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2012-12-12 08:48:00 | 显示全部楼层
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);
            }
          }
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:15 , Processed in 0.509978 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表