明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1466|回复: 1

AutoCAD 2004 VBA 又一个 BUG

[复制链接]
发表于 2003-10-8 20:35:00 | 显示全部楼层 |阅读模式
下列例程来自AutoCAD 2004帮助文件,其中,最后一个语句为显示选择集对象个数而添加:
Sub Example_Select()
    ' This example adds members to a selection set, first by crossing and
    ' then by filtering for circles.
   
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
   
   
    ' Add all object to the selection set that lie within a crossing of (28,17,0) and
    ' (-3.3, -3.6,0)
    Dim mode As Integer
    Dim corner1(0 To 2) As Double
    Dim corner2(0 To 2) As Double
   
    mode = acSelectionSetCrossing
    corner1(0) = 28: corner1(1) = 17: corner1(2) = 0
    corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0
    ssetObj.Select mode, corner1, corner2
   
    ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and
    ' (-3.3, -3.6,0) by filtering from the current drawing
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = "Circle"
   
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
   
    ssetObj.Select mode, corner1, corner2, groupCode, dataCode
   Thisdrawing.Utility.Prompt ssetObj.Count

End Sub

在(28,17,0) 到 (-3.3, -3.6,0) 范围内,本来应该只有Circle会被选中,但实际上无论添加何种图元,均会被选中并计数,可见Select存有BUG!
不知道是我的AutoCAD 2004有问题,还是真的存在这个BUG!
AutoCAD 2004 VBA到底怎么了?
我准备改学LISP,DX们有何高见?请指教!谢谢!
发表于 2003-10-8 20:57:00 | 显示全部楼层
是自己的程序有问题:
第一次ssetObj.Select mode, corner1, corner2。是将位于区域之内或者相交的所有对象都选中。
第二次ssetObj.Select mode, corner1, corner2, groupCode, dataCode。虽然这次只选择圆对象,但是第一选择时,选择集中的对象并没有清除掉。故它的选中实体的数目就是第一次选择时的数目。
应该在执行第二次时使用ssetObj.Clear先清除选择集。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 12:44 , Processed in 0.167481 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表