bland 发表于 2006-1-15 09:17:00

百思不解AcDbBlockReference

<P>拟从图形中提取一个AcDbBlockReference,如:</P>
<P>&nbsp;BLOCK REFERENCE&nbsp; 图层:&nbsp;ttt</P>
<P>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 颜色: BYLAYER&nbsp;&nbsp;&nbsp; 线型: CONTINUOUS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 句柄 = 1c665<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 块名: "tkaaa"</P>
<P>&nbsp;使用以下代码:</P>
<P>FilterType(0) = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterData(0) = "Block Reference" '此处不知用什么会有效果。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterType(1) = 8<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterData(1) = "ttt"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode1 = acSelectionSetAll<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ssBlockRef = acadDoc.SelectionSets.Add("NewSelectionSet")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssBlockRef.Select mode1, , , FilterType, FilterData</P>
<P>结果是ssBlockRef.count=0 也就是一个也没有选上。</P>
<P>希大家不吝赐教。</P>

bland 发表于 2006-1-15 09:26:00

<P>目的主要是快速获取块参照的插入点而已。</P>
<P>有点挠头。</P>

chef 发表于 2006-1-15 12:18:00

<P>用这个笨方法吧,保证 适用</P>
<P>Dim BLKpnt As Variant<BR>Dim blkRef As AcadBlockReference<BR>Dim objEnt As AcadEntity<BR>&nbsp;&nbsp;&nbsp; For Each objEnt In ThisDrawing.ModelSpace<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TypeOf objEnt Is AcadBlockReference Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '*********可以加入过滤条件<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set blkRef = objEnt<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BTLname = blkRef.Name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BLKpnt = blkRef.InsertionPoint<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next<BR></P>

bland 发表于 2006-1-15 12:33:00

<P>谢了,这个方法我用过,感觉遍历整个文件速度太慢所以才想好办法的。</P>
<P>已经成功了,呵呵,就是把过滤条件减少,只过滤一个图层的图元,快了一点。</P>

小美菜 发表于 2006-1-15 20:26:00

<P>FilterData(0) = "Block Reference" '此处不知用什么会有效果。</P>
<P>改成FilterData(0) ="INSERT"</P>
页: [1]
查看完整版本: 百思不解AcDbBlockReference