明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1840|回复: 4

intersecWith()方法的一个重要bug

[复制链接]
发表于 2006-6-12 14:24:00 | 显示全部楼层 |阅读模式

intersecWith 方法是一个非常有用的方法,VBA手册中的给出的示例代码如下

在使用过程中我发现下面的代码不能够正确运行。具体说 If VarType(intPoints) <> vbEmpty Then  这种判断方式有问题。按照手册的说法,如果有交点返回交点坐标,如果没有交点则不返回任何值,根据我的实际测试,即使是没有交点,返回的也是一个double()变量!!此时vartype() typename()的值分别是 8197 和 double()(vba语言参考中没有关于此值的说明,与此值相近的是 常数vbArry  值8192  代表数组  ) 而此时的 ubound(变量) 的值返回的是-1  !!

也就是说如果你想使用示例代码中的方法测试对象是否有交点不能的到正确的方法 应为无论是否有交点  vartype(交点) 的值 都不等于 vbEmpty  0   !!

我的测试环境是   AutoCAD 2005 简体中文版 office2003  OS  windows XP sp2  

不知道我遇到的问题是否带有普遍性 或者说我上述的现象是否正确,请各位朋友验证一下。

   ' Find the intersection points between the line and the circle
    Dim intPoints As Variant
    intPoints = lineObj.IntersectWith(circleObj, acExtendNone)
   
    ' Print all the intersection points
    Dim I As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For I = LBound(intPoints) To UBound(intPoints)
            str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
            MsgBox str, , "IntersectWith 示例"
            str = ""
            I = I + 2
            j = j + 3
            k = k + 1
        Next
    End If

 楼主| 发表于 2006-6-12 14:28:00 | 显示全部楼层

我上面贴的代码是 手册中的代码示例,我使用的时候 是比较两个线段是否相交,结果无论是 平行线还是 非平行线 vartype(交点 as variant)返回的都不是  vbEmpty     

发表于 2006-6-14 10:54:00 | 显示全部楼层

我也遇到这个BUG。

闷了很久 MSGBOX了半天

最后只好把If VarType(intPoints) <> vbEmpty then

改成 If ubound(intPoints) <> -1 then

才行 。 巨闷ing。

 楼主| 发表于 2006-6-19 13:49:00 | 显示全部楼层
haha  终于遇到知音了 我也是 msgbox 半天 后来的用的方法和你的一样啊
发表于 2006-6-19 18:57:00 | 显示全部楼层

还有多余点问题呢,明明4个交点,它确返回5个或更多个交点.所以使用IntersectWith()一定要谨慎噢!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-3-11 13:11 , Processed in 0.182784 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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