又一个关于选择集的问题
<P>上次发了关于选择集中删除元素的问题,得到了各位高手的指点,收益颇多。但是我在实际编制过程中发现一个问题,就是从选择集中删除的元素数组,似乎元素的个数不能太大我试验的结果似乎只能达到20000左右,再大了不是死机就是计算错误。看看下面的例子</P><P>Public Sub test()<BR>ThisDrawing.Application.ZoomExtents<BR> On Error Resume Next<BR>Dim SSet As AcadSelectionSet<BR> If Not IsNull(ThisDrawing.SelectionSets.Item("ttt")) Then<BR> Set SSet = ThisDrawing.SelectionSets.Item("ttt")<BR> SSet.Delete <BR> End If<BR> Set SSet = ThisDrawing.SelectionSets.Add("Example")<BR>Dim FilterType(0 To 3) As Integer<BR>Dim FilterData(0 To 3) As Variant<BR> FilterType(0) = -4<BR> FilterData(0) = "<or" <BR> FilterType(1) = 0<BR> FilterData(1) = "LINE"<BR> FilterType(2) = 0<BR> FilterData(2) = "LWPOLYLINE"<BR> FilterType(3) = -4<BR> FilterData(3) = "or>" <BR> SSet.Select acSelectionSetAll, , , FilterType, FilterData<BR> msgbox "筛选前的元素数量:"& SSet.Count<BR>Dim element As AcadEntity<BR>Dim i As Integer<BR>Dim pn1() As AcadEntity<BR>i = 0<BR> For Each element In SSet<BR> If (element.Length > 200) Or (element.Length <100) Then<BR> i = i + 1<BR> End If<BR> Next<BR>ReDim pn1(i - 1) As AcadEntity<BR> i = 0<BR> For Each element In SSet<BR> If (element.Length > 200) Or (element.Length <100) Then<BR> Set pn1(i) = element<BR> i = i + 1<BR> else<BR> element.color=acred<BR> End If<BR> Next<BR>SSet.RemoveItems pn1<BR> SSet.Update<BR> msgbox "筛选剩余的元素数量:"& SSet.Count<BR>SSet.Delete<BR>end sub</P>
<P>这个程序试从图形中选择出所有直线和多线,然后从中删除长度大于200和小于100的元素。这样当 需要删除的对象删除的元素个数多到一定程度就会出问题。我初步设想可能是数组元素的限制问题。</P>
<P>请各位帮我看看能不能够在建立选择集的时候就直接只选择长度100~200之间的线???在此先行感谢了。。。</P> <P>弱弱地问一下,不能一个个的删除么?</P> <P>建立选择集后你直接把长度100~200之间的线放在数组里</P> <P>2楼的方法显然不适合。</P>
<P>我将 变量i改成了 long类型就可以满足要求。。。</P>
<P>3楼的方法也不错。具体我要实现的功能(不光是上面程序)来说3楼的方法最后,因为符合我的条件的元素数量比不符合我田间的元素数量少了好几个数量级。。所以我使用3楼的方法。</P>
<P>再次感谢2位兄弟</P> <P>楼主遇到的情况我也遇到过。</P>
<P>有一次遇到个很大的选择集,又无法用filter。结果removeitems的时候就发现选择集过大的时候会有错误。</P>
<P>最后我只好新建一个选择集,把自己想保存的item都拷贝过去,然后把原来的选择集删掉了事。</P>
<P> </P>
<P>感觉这个错误最多地发生在:选择集很大,且removeitems的数组里元素也很多地情况。</P>
<P> </P> <P>感谢楼上给我的回复。我还以为只有我才会这么背呢。。。 同时谢谢你的方法</P> 楼主的 有些句子给了我很大启发谢谢
页:
[1]