david.xw 发表于 2004-3-1 09:39:00

問一個选择集的問題!

<P class=thetitle><A href="http://www.mjtd.com/develop/vba/vba04-12.htm" target="_blank" >http://www.mjtd.com/develop/vba/vba04-12.htm</A>


<P class=thetitle><A name=3>过滤选择集</A>


<P class=pagenom>你可用过滤器列表通过属性限制选择集,如通过颜色或对象类型。例如,你可以只复制电路板图形中的红色对象或确定图层中的对象。


<P class=pagenom><B>注意:</B>过滤器只识别直接分配给对象颜色或线型,而非继承于图层的颜色或线型。


<P class=pagenom>使用过滤器机制,必须提供用于分类过滤器类型和过滤器数据。过滤器类型是指定使用哪种过滤的代码。AutoCAD ActiveX自动操作使用DXF组码来指定过滤器类型。最常用的几个过滤器类型在以下列出。完整的列表,可参见AutoCAD DXF参考。


<P class=pagenom>       


常用过滤器的DXF代码

DXF代码过滤器类型 0 对象类型(字符串)如"Line"、"Circle"、"Arc"等。 2 对象名称(字符串)命名对象的表(给定)名称。 8 图层名称(字符串)如"Layer 0"。 60 对象的可见性(整数)使用 0 = 可见、1 = 不可见。 62 颜色号(整数)由0到256的数字索引值。0代表随块。256代表随层。负值代表图层关闭。 67 模型/图纸空间指示(整数)使用0或忽略=模型空间、1 = 图纸空间。
<P class=pagenom>以下例子示范了不同的过滤器。


<P class=pagenom>       


<FONT color=#800000>只添加文本对象到选择集:</FONT>


<P class=program><FONT color=#000080>FilterType = 0<BR>FilterData = "TEXT"<BR>sset.SelectOnScreen FilterType, FilterData</FONT>


<FONT color=#800000>只添加直线对象到选择集:</FONT>


<P class=program><FONT color=#000080>FilterType = 0<BR>FilterData = "LINE"<BR>sset.SelectOnScreen FilterType, FilterData</FONT>


<FONT color=#800000>只添加在图层FLOOR9上的对象到选择集:</FONT>


<P class=program><FONT color=#000080>FilterType = 8<BR>FilterData = "FLOOR9"<BR>sset.SelectOnScreen FilterType, FilterData</FONT>


<FONT color=#800000>只添加颜色为红色的对象到选择集:</FONT>


<P class=program><FONT color=#000080>Filter Type = 62<BR>Filter Data = 5<BR>sset.SelectOnScreen FilterType, FilterData</FONT>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">按以上方法我试了一下</FONT>:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">用屏选时只选名为</FONT>"AA3"<FONT face="Arial Unicode MS">的图块<o:p></o:p></FONT>


<P class=program style="MARGIN: auto 0cm">Sub AA()<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">Dim sset As AcadSelectionSet<BR>Dim i As Long<BR>Dim entry As AcadEntity<BR>Dim FilterType<BR>Dim FilterData<BR>i = ThisDrawing.SelectionSets.Count<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">Set sset = ThisDrawing.SelectionSets.Add("SS" &amp; i + 1)<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">FilterType = "2"<BR>FilterData = "AA3"<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">sset.SelectOnScreen FilterType, FilterData<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">For Each entry In sset<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">MsgBox entry.Name<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">Next<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">End Sub<o:p></o:p>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">但每次运行到<o:p></o:p></FONT>


<P class=program style="MARGIN: auto 0cm">sset.SelectOnScreen FilterType, FilterData<o:p></o:p>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">时会出现</FONT> <o:p></o:p>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">执行阶段错误</FONT>'-2147467259(80004005)':<o:p></o:p>


<P class=program style="MARGIN: auto 0cm">'sset.SelectOnScreen'<FONT face="Arial Unicode MS">方法</FONT>('IAcadSelectionSet'<FONT face="Arial Unicode MS">对象</FONT>)<FONT face="Arial Unicode MS">失败<o:p></o:p></FONT>


<P class=program style="MARGIN: auto 0cm"><FONT face="Arial Unicode MS">请高手帮帮我</FONT>!<FONT face="Arial Unicode MS">先谢了</FONT>!

subtlation 发表于 2004-3-1 09:48:00

FilterType应该是integer数组


FilterData是Variant数组


建议用 BuildFilter函数,这样不容易错,下面是一个实例。


Public Sub BuildFilter(typeArray, dataArray, ParamArray gCodes())<BR>                       '用数组方式填充一对变量以用作为选择集过滤器使用 <BR>                       Dim fType() As Integer, fData()<BR>                       Dim index As Long, i As Long<BR>                       <BR>                       index = LBound(gCodes) - 1<BR>                                                       <BR>                       For i = LBound(gCodes) To UBound(gCodes) Step 2<BR>                                                       index = index + 1<BR>                                                       ReDim Preserve fType(0 To index)<BR>                                                       ReDim Preserve fData(0 To index)<BR>                                                       fType(index) = CInt(gCodes(i))<BR>                                                       fData(index) = gCodes(i + 1)<BR>                       Next<BR>                       typeArray = fType: dataArray = fData<BR>End Sub


       


       Dim ssetObj As AcadSelectionSet<BR>       Set ssetObj = CreateSelectionSet("uniteSS")<BR>       Dim fType, fData<BR>       BuildFilter fType, fData, 2, "AA3"<BR>       '屏选直线或多段线<BR>       ssetObj.SelectOnScreen fType, fData

david.xw 发表于 2004-3-1 09:57:00

<FONT face="Arial Unicode MS">行了</FONT>,<FONT face="Arial Unicode MS">谢谢</FONT>!!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>


受教了!

mountains 发表于 2004-3-27 22:27:00

mccad 发表于 2004-3-28 08:24:00

可以,用逗号,如"Line,Circle"

ntchjie 发表于 2004-4-2 21:48:00

可以,用逗号,如"Line,Circle"


我正想问这个,谢谢了。
页: [1]
查看完整版本: 問一個选择集的問題!