明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1601|回复: 3

属性块名称修改?

[复制链接]
发表于 2013-4-22 13:02:26 | 显示全部楼层 |阅读模式
本帖最后由 幸运草 于 2013-4-22 13:13 编辑

请问用vb.net如何修改属性块的名称?
发表于 2013-4-22 16:25:02 | 显示全部楼层
如果要更改块名称,则可以这样更改
  1. ''' <summary>
  2.     ''' 更改块定义的名称
  3.     ''' </summary>
  4.     ''' <param name="OldName">旧名称</param>
  5.     ''' <param name="NewName">新名称</param>
  6.     ''' <returns></returns>
  7.     ''' <remarks></remarks>
  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
发表于 2013-4-22 17:50:06 | 显示全部楼层
如果要修改块参照里的属性,则可以
  1. ''' <summary>
  2.     ''' 更改块中属性名称
  3.     ''' </summary>
  4.     ''' <param name="IDs">块参照ID</param>
  5.     ''' <param name="OldAttName">旧名称</param>
  6.     ''' <param name="NewAttName">新名称</param>
  7.     ''' <param name="RenameAll">遇到多个同名AttName,如果RenameAll = True ,则全部重新命名,否则 改第一个</param>
  8.     ''' <returns>修改成功返回 True ,不成功则返回 False</returns>
  9.     ''' <remarks></remarks>
  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
发表于 2013-4-22 21:33:52 | 显示全部楼层
看见代码就头晕了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 14:40 , Processed in 0.175755 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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