[求助]怎样找出块中图元?
对已插入到dwg文件的块,比如该块包含一条直线和一个圆,怎样才能在不打散块的情况下、用程序找到该块中包含的这两个图元呢? 谢谢。<BR>(我的目的是想在不打散块的情况下,改变这条直线的长度或改变圆的半径大小) 用For Each遍厉块中所有图元 本帖最后由 作者 于 2005-11-23 23:31:39 编辑 <br /><br /> lgf727发表于2005-11-23 22:43:00static/image/common/back.gif用For Each遍厉块中所有图元<BR>这个方法可以把同名块统改,要是有的改有的不改就要把块名起的不一样. lgf727发表于2005-11-23 22:43:00static/image/common/back.gif用For Each遍厉块中所有图元
<BR>呃,这个我也想过,但找不到方法,请问如何来遍历块中的图元呢?? 谢谢。。 <P>可能是我说明得不清楚吧,主题上的“块”我指的是块实例,即是AcadBlockReference类型的(并非是AcadBlock类型)。</P>
<P>如果在.dwg图纸上有一个包含直线与圆的块实例,通过程序知道它是AcadBlockReference类型的,在不打散的情况下也可以遍历出其中的图元吗?</P> 当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。用FOR EACH遍历。。。用图元的类名或者图元的名称过滤出你需要的图元。 linyiwq发表于2005-11-24 14:53:00static/image/common/back.gif当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。
<P>用FOR EACH遍历及用图元的类名或者图元的名称过滤出你需要的图元,这个我应该还懂; 但是“把块参照对象和文档对象做一下比较”我还是看得不太明白,可以具体举出实例如何运用吗? 谢谢。</P> <P>抱歉!我上面的回复是有问题的!</P>
<P>单独的改变块参照中的实体的属性而不涉及改变其块定义,我实现不了。不和哪位高人可以?</P>
<P>Sub dd()<BR> Dim nCount As Integer '计数器<BR> Dim pObject As AcadObject '对象定义<BR> Dim pBlock As AcadBlock '块定义<BR> Dim pBlockRef As AcadBlockReference '块参照<BR> Dim pntPickPoint As Variant '返回的PICKPOINT<BR> Dim strBlockName As String '块名<BR> Dim pCircle As AcadCircle '圆实体<BR> <BR> On Error GoTo errHandle<BR> <BR> ThisDrawing.Utility.GetEntity pBlockRef, pntPickPoint, "选择一个块参照:" '用户选择,具体参数的含义参照AUTOCAD帮助<BR> '下面判断用户选择的是否是一个块参照对象<BR> If pBlockRef.ObjectName <> "AcDbBlockReference" Then<BR> MsgBox "你选择的不是块参照!"<BR> Exit Sub '选择的不是块参照,退出<BR> End If<BR> '选择了一个块参照<BR> '修改这个块参照对象所依附的!!!!!块定义!!!!!!!中的圆的半径<BR> '看看autocad自带的_REFEDIT命令的运行结果,大致可以知道块定义和块参照以及MODELSPACE之间的关系<BR> strBlockName = pBlockRef.Name '得到块名<BR> nCount = 0<BR> Set pBlock = ThisDrawing.Blocks.Item(strBlockName)<BR> For Each pObject In pBlock<BR> If pObject.ObjectName = "AcDbCircle" Then<BR> Set pCircle = pObject<BR> pCircle.Radius = pCircle.Radius + 10 '圆的半径+10<BR> nCount = nCount + 1 '统计圆实体的个数<BR> End If<BR> Next<BR> '执行完循环体后,块定义被改变了!!!!!!!!!<BR> ThisDrawing.Regen acActiveViewport<BR> Exit Sub<BR>errHandle:<BR> '错误处理<BR> MsgBox Err.Description<BR>End Sub</P> <P>重定义一个块定义,用CopyObjects方法将原块定义的图元复制到块定义中,修改此块定义,并原地插入新的块参照,删除原块参照</P> <P>不是做不到,而是想不到!感谢版主提醒</P>
<P>最后再提醒一下楼主朋友:你可以用匿名块。关于匿名块在本论坛可以找到相关文章。</P>
页:
[1]
2