|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
& \- ^7 C5 |+ b7 B+ ^6 `0 {- Dim SS As AcadSelectionSet '声明选择集变量! k/ [5 q) L5 ]% [, ]
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
: [; `/ P) O, b4 E - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标) F4 B, |: Z" X$ ?4 d* a9 J% E
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
" S) g4 ?( c( {7 n/ z# |$ a - Dim I As Long, J As Long '循环变量" ]- z6 h9 h9 ?/ P* y8 t3 v8 P
- Dim S As String '一个字符串,用于消息框4 k' n2 |+ T8 d
- ; ~- P% E$ Q6 F4 s! e
- On Error Resume Next2 r% Q' l5 i! r" c7 c: }: M# _3 V
- Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
# i- Z3 T0 T; n - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型$ M, h I. S6 \3 v
- Fd(0) = "line" '对象类型为直线
, Y, C/ B( ^! N7 U, U: z2 _ - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
$ {0 W( ^9 N' a# [% w9 q5 f - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点% z/ _ V* E- Z3 b1 l
- For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点2 |8 M$ W6 C g" d
- For J = I + 1 To SS.Count - 1 ^8 h* A3 [: q4 R
- V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
& v& T6 Y! B4 m! i$ V- l' a1 J4 d - If UBound(V) = 2 Then '检查是否有交点+ k/ g ?7 W) Z7 G- n
- If UBound(P, 2) < 0 Then '重定义数组
+ v7 r6 ?: m. H- C! x% \5 Q2 Y - ReDim P(2, 0)
3 s, s/ q- G' G& ?4 ~ - Else6 C* F6 {7 e$ a! I4 M! i
- ReDim Preserve P(2, UBound(P, 2) + 1)8 M- k/ y8 L) G7 J, G
- End If
% x, u/ J' T% C - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组5 C$ Q2 g' [& K' q5 T/ u
- P(1, UBound(P, 2)) = V(1)( ]9 C' \4 @( A" V+ ?5 _: o
- P(2, UBound(P, 2)) = V(2)" U* S8 o: z/ r9 _0 q
- End If
# [3 w! ]2 Z, m @ - Next9 v# K% {( }$ R5 y" `
- Next
) s7 i- C2 z3 q) D3 G+ h - If UBound(P, 2) < 0 Then0 ~0 j& D0 M1 V) @
- MsgBox "没有交点", vbOKOnly, "AutoCAD"
, H) W, V9 |0 o - Else
0 ~% d/ k5 F1 C - S = "共有 " & UBound(P, 2) + 1 & " 个交点"* P7 L2 ~7 f) ^
- For I = 0 To UBound(P, 2)
! e" ]/ {- m v8 z: L" t' A - S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
3 R% o P6 S" Y - Next
1 m U9 F4 E O6 s, A - MsgBox S, vbOKOnly, "AutoCAD"8 {# F! X4 @) w: R4 d4 Y( D
- End If/ `# j( M; O0 ~/ [% p& v$ T2 Z
- Else _2 O" T0 Y3 A4 m
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"% j- a& c6 r# V2 e, r- W
- End If
* e1 s" t& W8 I8 @3 T - SS.Delete '删除用过的选择集# J. J( N9 \% o6 d
复制代码 |
评分
-
查看全部评分
|