weekendor 发表于 2005-11-23 14:33:00

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

对已插入到dwg文件的块,比如该块包含一条直线和一个圆,怎样才能在不打散块的情况下、用程序找到该块中包含的这两个图元呢? 谢谢。<BR>(我的目的是想在不打散块的情况下,改变这条直线的长度或改变圆的半径大小)

lgf727 发表于 2005-11-23 22:43:00

用For Each遍厉块中所有图元

esri 发表于 2005-11-23 22:56:00

本帖最后由 作者 于 2005-11-23 23:31:39 编辑 <br /><br /> lgf727发表于2005-11-23 22:43:00static/image/common/back.gif用For Each遍厉块中所有图元

<BR>这个方法可以把同名块统改,要是有的改有的不改就要把块名起的不一样.

weekendor 发表于 2005-11-24 11:59:00

lgf727发表于2005-11-23 22:43:00static/image/common/back.gif用For Each遍厉块中所有图元

<BR>呃,这个我也想过,但找不到方法,请问如何来遍历块中的图元呢?? 谢谢。。 

weekendor 发表于 2005-11-24 14:16:00

<P>可能是我说明得不清楚吧,主题上的“块”我指的是块实例,即是AcadBlockReference类型的(并非是AcadBlock类型)。</P>
<P>如果在.dwg图纸上有一个包含直线与圆的块实例,通过程序知道它是AcadBlockReference类型的,在不打散的情况下也可以遍历出其中的图元吗?</P>

linyiwq 发表于 2005-11-24 14:53:00

当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。用FOR EACH遍历。。。用图元的类名或者图元的名称过滤出你需要的图元。

weekendor 发表于 2005-11-24 15:24:00

linyiwq发表于2005-11-24 14:53:00static/image/common/back.gif当然可以了,如果你把块参照对象和文档对象做一下比较,就会清楚了。


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

linyiwq 发表于 2005-11-25 11:46:00

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

雪山飞狐_lzh 发表于 2005-11-25 12:15:00

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

linyiwq 发表于 2005-11-25 13:37:00

<P>不是做不到,而是想不到!感谢版主提醒</P>
<P>最后再提醒一下楼主朋友:你可以用匿名块。关于匿名块在本论坛可以找到相关文章。</P>
页: [1] 2
查看完整版本: [求助]怎样找出块中图元?