evaporated 发表于 2005-5-7 16:05:00

从未遇到的选择集怪现象!

几乎对选择集失去信心了。请大家看看如下的奇特现象:<BR>这是一个选择集的很普通的程序段:


Dim ssetObj As AcadSelectionSet<BR>                       On Error Resume Next<BR>If ThisDrawing.SelectionSets.Count &lt;&gt; 0 Then                               <BR>               If Not IsNull(ThisDrawing.SelectionSets.Item("SSS67ET")) Then<BR>                                       Set ssetObj = ThisDrawing.SelectionSets.Item("SSS67ET")<BR>                                                       ssetObj.Delete<BR>                       End If<BR>End If<BR>                       Set ssetObj = ThisDrawing.SelectionSets.Add("SSS67ET")<BR>                       <BR>                       Dim mode As Integer<BR>                       Dim corner1(0 To 2) As Double<BR>                       Dim corner2(0 To 2) As Double<BR>                       mode = acSelectionSetWindow<BR>                       ...<BR>                       (给corner1,corner2都赋了值)                       <BR>                       <BR>                       ssetObj.Select mode, corner1, corner2<BR>                       ...<BR>                       ssetObj.delete


运行时 ,在有些电脑上出现了怪现象: <BR>autocad2004下,用编辑器跟踪 mode 的值始终为0,就是说


mode = acSelectionSetWindow


这行语句无效。<BR>究其原因,发现acSelectionSetWindow=0 ! 难道autocad2004将它作为变量处理?


为了绕过该问题,<BR>                       ssetObj.Select mode, corner1, corner2<BR>这一行中 mode 直接替换为 "4"


出现了第二个怪现象, 无论corner1,corner2所取的窗口范围有多大,ssetObj中都只有一个 item.


小弟调试了一天 ,几乎对选择集失去信心。请问各位能否指教下,这到底属于什么问题呢?


<BR>

hangc 发表于 2005-5-7 17:53:00

两个建议,不是很具体,姑且听之:


1.把On Error Resume Next去掉,可能有错误被忽略了。


2.选择集合有时与范围有关


通过这些年对cad的使用,证明选择功能本身没有问题,请坚定信念。

mccad 发表于 2005-5-7 18:17:00

如果在VB中使用,会出现这种问题。可直接用数字代替。<BR>至于哪个数字代表哪些模式,可查看对象模型。

evaporated 发表于 2005-5-8 09:32:00

明总,我在帖子中提到 ,已经把 acSelectionSetWindow 改成了 4,还是不行 。


出现了第二个奇怪的问题 。


hangc兄 , 在实践中 发现选择集确实和范围有关。


我现在使用acSelectionSetWindow之前都要先 zoom一下。


很多莫名其妙的小问题都没了 。


但是这个还在 。


已经把 on error resume next去掉,还是不行啊 。
页: [1]
查看完整版本: 从未遇到的选择集怪现象!