- UID
- 129563
- 积分
- 52
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-4-24
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我正在做一个批量修改autocad图形内所有文字对象的工具,现在已经能够遍历模型空间中的所有文字对象,现在的问题是如何遍历各个布局空间,再遍历每个布局空间中的各个文字对象,
Set CadSplace = Cad.Documents.Open(ListFile.List(i)).ModelSpace
For Each elem In CadSplace
With elem
If (.EntityName = "AcDbText") Or (.EntityName = "AcDbMText") Then
'修改文字对象的TextString属性
.TextString = Replace(.TextString, Text1, Text2)
End If
End With
Set elem = Nothing
Next elem
这个问题我已经解决!
Dim cadlayout As Object '用于遍历所有的布局对象(模型空间也是一个布局)
Dim elem As Object '用于遍历所有的图形对象
Dim i As Integer
Dim t1 As String, t2 As String
t1 = Text1: t2 = Text2
For i = 0 To ListFile.ListCount - 1
Cad.Documents.Open (ListFile.List(i)) '打开文件
For Each cadlayout In Cad.Documents(0).Layouts '遍历所有的布局
Set CadSplace = cadlayout.Block '每个布局都有一个Block对象,该对象便是所有的图形集合
For Each elem In CadSplace '遍历布局空间中的所有对象
With elem
If (.EntityName = "AcDbText") Or (.EntityName = "AcDbMText") Then
.TextString = Replace(.TextString, t1, t2)
End If
End With
Set elem = Nothing
Next elem
Set CadSplace = Nothing
Next cadlayout
'该文件已处理完毕
Cad.Documents(0).Save '保存
Cad.Documents.Close '关闭
P1.Value = i + 1
DoEvents
If Quit Then GoTo 20
Next i
现在又有新问题了,我怎么改不了属性啊!
Private Sub BlockEdit() '更改图形中的所有块对象
Dim elem As Object
For Each elem In Cad.Documents(0).Blocks '遍历所有的块
If elem.Name <> "*Model_Space" And elem.Name <> "*Paper_Space" Then
Dim BlockSubObj As Object
For Each BlockSubObj In elem '遍历块中的所有对象(会自动遍历嵌套的块中的对象)
With BlockSubObj
Debug.Print .EntityName
' If (.EntityName = "AcDbText") Or (.EntityName = "AcDbMText") Then .TextString = Replace(.TextString, t1, t2)
' If .EntityName = "AcDbAttributeDefinition" Then
' .TagString = Replace(.TagString, t1, t2)
' .Update
' End If
End With
Next BlockSubObj
End If
Next elem
End Sub |
|