leizi_y 发表于 2005-12-24 18:50:00

又一个关于选择集的问题

上次发了关于选择集中删除元素的问题,得到了各位高手的指点,收益颇多。但是我在实际编制过程中发现一个问题,就是从选择集中删除的元素数组,似乎元素的个数不能太大我试验的结果似乎只能达到20000左右,再大了不是死机就是计算错误。看看下面的例子
Public Sub test()
ThisDrawing.Application.ZoomExtents
    On Error Resume Next
Dim SSet As AcadSelectionSet
    If Not IsNull(ThisDrawing.SelectionSets.Item("ttt")) Then
      Set SSet = ThisDrawing.SelectionSets.Item("ttt")
      SSet.Delete   
    End If
    Set SSet = ThisDrawing.SelectionSets.Add("Example")
Dim FilterType(0 To 3) As Integer
Dim FilterData(0 To 3) As Variant
    FilterType(0) = -4
    FilterData(0) = ""   
    SSet.Select acSelectionSetAll, , , FilterType, FilterData
    msgbox "筛选前的元素数量:"& SSet.Count
Dim element As AcadEntity
Dim i As Integer
Dim pn1() As AcadEntity
i = 0
   For Each element In SSet
    If (element.Length > 200) Or (element.Length200) Or (element.Length
这个程序试从图形中选择出所有直线和多线,然后从中删除长度大于200和小于100的元素。这样当 需要删除的对象删除的元素个数多到一定程度就会出问题。我初步设想可能是数组元素的限制问题。
请各位帮我看看能不能够在建立选择集的时候就直接只选择长度100~200之间的线???在此先行感谢了。。。

BigJue 发表于 2005-12-26 14:59:00

弱弱地问一下,不能一个个的删除么?

雪山飞狐_lzh 发表于 2005-12-27 08:00:00

建立选择集后你直接把长度100~200之间的线放在数组里

leizi_y 发表于 2005-12-27 15:15:00

2楼的方法显然不适合。
我将 变量i改成了long类型就可以满足要求。。。
3楼的方法也不错。具体我要实现的功能(不光是上面程序)来说3楼的方法最后,因为符合我的条件的元素数量比不符合我田间的元素数量少了好几个数量级。。所以我使用3楼的方法。
再次感谢2位兄弟

evaporated 发表于 2005-12-27 16:32:00

楼主遇到的情况我也遇到过。
有一次遇到个很大的选择集,又无法用filter。结果removeitems的时候就发现选择集过大的时候会有错误。
最后我只好新建一个选择集,把自己想保存的item都拷贝过去,然后把原来的选择集删掉了事。

感觉这个错误最多地发生在:选择集很大,且removeitems的数组里元素也很多地情况。

leizi_y 发表于 2005-12-29 21:35:00

感谢楼上给我的回复。我还以为只有我才会这么背呢。。。同时谢谢你的方法

文涛武略 发表于 2011-2-16 13:21:00

楼主的 有些句子给了我很大启发谢谢
页: [1]
查看完整版本: 又一个关于选择集的问题