明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1786|回复: 1

[推荐]深入研究《锁定标注文字不随对象缩放而动态变化》示例

[复制链接]
发表于 2008-4-8 10:35:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-4-8 10:36:46 编辑

原文及程序详见AutoCAD VBA二次开发教程
  
127-132页。

以下程序与原程序区别是用debug.print,测试关键点返回数据。

Function FixDimText(Dimension As AcadDimension) As String

    '在复制标注对象前先保存当前图形中的块数量

    Dim BlockCount As Long

    Debug.Print Dimension.ObjectName, Dimension.OwnerID, Dimension.TextOverride

    BlockCount = ThisDrawing.Blocks.Count

    Debug.Print BlockCount

    '复制需要锁定文字内容的标注对象

    Dim CopyDimension As AcadDimension

    Set CopyDimension = Dimension.Copy

    '检查块数量是否增加,而且新增加的块名前缀是否为"*D"

    Dim NewBlockCount As Long

    NewBlockCount = ThisDrawing.Blocks.Count

    Debug.Print NewBlockCount

    If NewBlockCount = BlockCount + 1 And Left(ThisDrawing.Blocks(BlockCount).Name, 2) = "*D" Then   

        '遍历块中的对象,取得文字内容

        Dim EntityInBlock As AcadEntity

        For Each EntityInBlock In ThisDrawing.Blocks(BlockCount)

            Debug.Print EntityInBlock.ObjectName, EntityInBlock.OwnerID

            If EntityInBlock.ObjectName = "AcDbMText" Then

                '将文字内容替换掉标注对象的文字内容

                Dimension.TextOverride = EntityInBlock.TextString

                Exit For

            End If

        Next

    End If

    '删除复制的标注对象

    CopyDimension.Delete

    FixDimText = Dimension.TextOverride

End Function

 

 

通过测试不同的施工图(不同的单位、不同的个人的dwg文件)后,发现

NewBlockCount = BlockCount + 1 And Left(ThisDrawing.Blocks(BlockCount).Name, 2) = "*D"

的运行结果为False,导致整个程序无法运行。

 

 

正确运行这个程序的结果

AcDbRotatedDimension         2130001144   200{}{}

 10

 11

能找到*DOwnerID

AcDbLine       2123471264

AcDbLine       2123471264

AcDbLine       2123471264

AcDbSolid      2123471264

AcDbSolid      2123471264

AcDbMText      2123471264

不正确运行这个程序的结果为

AcDbRotatedDimension         2130001144   120{}{}

找不到*DOwnerID

讨论的问题是

*Ddimension的父子关系

*DOwnerIDdimensionOwnerID的关系。

本帖子中包含更多资源

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

x
发表于 2008-4-8 12:38:00 | 显示全部楼层

自从AutoCAD有了关联标注后,使用这种方法来取得标注对应的图块就不灵验了。

从目前看只能使用你上次外国佬写的那个标注对象所对应图块的程序来解决。

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

本版积分规则

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

GMT+8, 2024-11-26 10:50 , Processed in 0.176406 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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