乐筑天下

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

属性块名称修改?

[复制链接]

3

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2013-4-22 13:02:00 | 显示全部楼层 |阅读模式
请问用vb.net如何修改属性块的名称?
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2013-4-22 16:25:00 | 显示全部楼层
如果要更改块名称,则可以这样更改
  1. '''
  2.     ''' 更改块定义的名称
  3.     '''
  4.     ''' 旧名称
  5.     ''' 新名称
  6.     '''
  7.     '''
  8.     Public Function RenameBlockDef(ByVal OldName As String, ByVal NewName As String) As Boolean
  9.         Using Trans As Transaction = DB.TransactionManager.StartTransaction
  10.             Dim BlkTable As BlockTable = Trans.GetObject(MyBase.DB.BlockTableId, OpenMode.ForRead)
  11.             If BlkTable.Has(OldName) = True AndAlso BlkTable.Has(NewName) = False Then
  12.                 Dim BlkR As BlockTableRecord = Trans.GetObject(BlkTable.Item(OldName), OpenMode.ForWrite)
  13.                 BlkR.Name = NewName
  14.                 RenameBlockDef = True
  15.             Else
  16.                 RenameBlockDef = False
  17.             End If
  18.             Trans.Commit()
  19.         End Using
  20.     End Function
回复

举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2013-4-22 17:50:00 | 显示全部楼层
如果要修改块参照里的属性,则可以
  1. '''
  2.     ''' 更改块中属性名称
  3.     '''
  4.     ''' 块参照ID
  5.     ''' 旧名称
  6.     ''' 新名称
  7.     ''' 遇到多个同名AttName,如果RenameAll = True ,则全部重新命名,否则 改第一个
  8.     ''' 修改成功返回 True ,不成功则返回 False
  9.     '''
  10.     Public Function ReNameAtt(ByVal IDs() As ObjectId, ByVal OldAttName As String, ByVal NewAttName As String, Optional ByVal RenameAll As Boolean = True) As Boolean()
  11.        Dim rtn(IDs.Length - 1) As Boolean
  12.         OldAttName = OldAttName.Trim.ToUpper : NewAttName = NewAttName.Trim.ToUpper
  13.         Using Trans As Transaction = DB.TransactionManager.StartTransaction
  14.             Dim obj As DBObject = Nothing, blk As BlockReference = Nothing, Atts As AttributeCollection = Nothing,Att As AttributeReference = Nothing
  15.             For I As Integer = 0 To IDs.Length - 1
  16.                 obj = Trans.GetObject(IDs(I), OpenMode.ForWrite)
  17.                 If TypeOf obj Is BlockReference Then
  18.                     blk = obj
  19.                     Atts = blk.AttributeCollection
  20.                     For J As Integer = 0 To Atts.Count - 1
  21.                         Att = Trans.GetObject(Atts(J), OpenMode.ForWrite)
  22.                         If Att.Tag.ToUpper = OldAttName Then
  23.                             Att.Tag = NewAttName
  24.                             If RenameAll = False Then
  25.                                 Continue For
  26.                             End If
  27.                         End If
  28.                     Next
  29.                     rtn(I) = True
  30.                 End If
  31.             Next
  32.             Trans.Commit()
  33.         End Using
  34.         ReNameAtt = rtn
  35.     End Function
回复

举报

72

主题

617

帖子

30

银币

中流砥柱

Rank: 25

铜币
923
发表于 2013-4-22 21:33:00 | 显示全部楼层
看见代码就头晕了。
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 03:35 , Processed in 1.498291 second(s), 71 queries .

© 2020-2025 乐筑天下

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