明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3733|回复: 11

[求助]怎样找出块中图元?

  [复制链接]
发表于 2005-11-23 14:33:00 | 显示全部楼层 |阅读模式
对已插入到dwg文件的块,比如该块包含一条直线和一个圆,怎样才能在不打散块的情况下、用程序找到该块中包含的这两个图元呢? 谢谢。
(我的目的是想在不打散块的情况下,改变这条直线的长度或改变圆的半径大小)
发表于 2005-11-23 22:43:00 | 显示全部楼层
用For Each遍厉块中所有图元
发表于 2005-11-23 22:56:00 | 显示全部楼层
本帖最后由 作者 于 2005-11-23 23:31:39 编辑

lgf727发表于2005-11-23 22:43:00用For Each遍厉块中所有图元

这个方法可以把同名块统改,要是有的改有的不改就要把块名起的不一样.
 楼主| 发表于 2005-11-24 11:59:00 | 显示全部楼层
lgf727发表于2005-11-23 22:43:00用For Each遍厉块中所有图元

呃,这个我也想过,但找不到方法,请问如何来遍历块中的图元呢?? 谢谢。。 
 楼主| 发表于 2005-11-24 14:16:00 | 显示全部楼层

可能是我说明得不清楚吧,主题上的“块”我指的是块实例,即是AcadBlockReference类型的(并非是AcadBlock类型)。

如果在.dwg图纸上有一个包含直线与圆的块实例,通过程序知道它是AcadBlockReference类型的,在不打散的情况下也可以遍历出其中的图元吗?

发表于 2005-11-24 14:53:00 | 显示全部楼层
当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。用FOR EACH遍历。。。用图元的类名或者图元的名称过滤出你需要的图元。
 楼主| 发表于 2005-11-24 15:24:00 | 显示全部楼层
linyiwq发表于2005-11-24 14:53:00当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。

用FOR EACH遍历及用图元的类名或者图元的名称过滤出你需要的图元,这个我应该还懂; 但是“把块参照对象和文档对象做一下比较”我还是看得不太明白,可以具体举出实例如何运用吗? 谢谢。

发表于 2005-11-25 11:46:00 | 显示全部楼层

抱歉!我上面的回复是有问题的!

单独的改变块参照中的实体的属性而不涉及改变其块定义,我实现不了。不和哪位高人可以?

Sub dd()
    Dim nCount As Integer                   '计数器
    Dim pObject As AcadObject               '对象定义
    Dim pBlock As AcadBlock                 '块定义
    Dim pBlockRef As AcadBlockReference     '块参照
    Dim pntPickPoint As Variant             '返回的PICKPOINT
    Dim strBlockName As String              '块名
    Dim pCircle As AcadCircle               '圆实体
   
    On Error GoTo errHandle
   
    ThisDrawing.Utility.GetEntity pBlockRef, pntPickPoint, "选择一个块参照:" '用户选择,具体参数的含义参照AUTOCAD帮助
    '下面判断用户选择的是否是一个块参照对象
    If pBlockRef.ObjectName <> "AcDbBlockReference" Then
        MsgBox "你选择的不是块参照!"
        Exit Sub                            '选择的不是块参照,退出
    End If
    '选择了一个块参照
    '修改这个块参照对象所依附的!!!!!块定义!!!!!!!中的圆的半径
    '看看autocad自带的_REFEDIT命令的运行结果,大致可以知道块定义和块参照以及MODELSPACE之间的关系
    strBlockName = pBlockRef.Name                '得到块名
    nCount = 0
    Set pBlock = ThisDrawing.Blocks.Item(strBlockName)
    For Each pObject In pBlock
        If pObject.ObjectName = "AcDbCircle" Then
            Set pCircle = pObject
            pCircle.Radius = pCircle.Radius + 10        '圆的半径+10
            nCount = nCount + 1                         '统计圆实体的个数
        End If
    Next
    '执行完循环体后,块定义被改变了!!!!!!!!!
    ThisDrawing.Regen acActiveViewport
    Exit Sub
errHandle:
    '错误处理
    MsgBox Err.Description
End Sub

发表于 2005-11-25 12:15:00 | 显示全部楼层

重定义一个块定义,用CopyObjects方法将原块定义的图元复制到块定义中,修改此块定义,并原地插入新的块参照,删除原块参照

发表于 2005-11-25 13:37:00 | 显示全部楼层

[I]不是做不到,而是想不到!感谢版主提醒[/I]

最后再提醒一下楼主朋友:你可以用匿名块。关于匿名块在本论坛可以找到相关文章。

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

本版积分规则

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

GMT+8, 2024-11-27 06:41 , Processed in 0.177938 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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