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
|