找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2746|回复: 4

[求助]:遍历autocad的文字对象的问题

[复制链接]
发表于 2005-10-25 08:37:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我正在做一个批量修改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
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-27 23:44:05 | 显示全部楼层
块定义(“ACADBLOCK")中的属性和块实例("ACADBLOCKREFRENCE")中的属性是孤立的。块实例的属性不会随块定义的属性改变而改变。要改变实例中的属性必须遍历所有的块实例。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-28 15:11:06 | 显示全部楼层
我觉得应该先遍历实体,判断是否块引用,再取得属性进行修改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-9-2 09:51:18 | 显示全部楼层
风雪大侠,你成功没有?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-4-17 13:12:10 | 显示全部楼层
你这个程序是修改好的吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-22 23:59 , Processed in 0.405706 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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