|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
- u' P- k) `2 b
- Dim SS As AcadSelectionSet '声明选择集变量8 _9 L6 t3 e" d; f
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量; w+ L: R, I& v1 N; d3 F
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标! M8 s- n- V7 `
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点$ I3 o% r0 O4 F. A- L, g
- Dim I As Long, J As Long '循环变量
# h% U' J _0 L+ ?& ? n - Dim S As String '一个字符串,用于消息框1 R5 F) h3 |1 r9 X3 N' J! K1 |
-
( j" r5 s+ g: w3 x' d' ~ - On Error Resume Next. M0 ?& j3 |; a9 D3 W7 R5 P+ K
- Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集% G: k- a7 G% h0 ]
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型4 D/ O) K1 Q3 `" S) ?
- Fd(0) = "line" '对象类型为直线 N( d5 U9 m5 ~0 j( i8 I
- SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
" B; u U3 j, p! o - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点7 X7 x& @. B8 y& z
- For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点) Z( W, O1 L& U5 ~5 f, E
- For J = I + 1 To SS.Count - 1+ w) B5 p/ m8 |; ?) U# j* \# U5 G
- V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
9 `+ K6 t+ {# g* b0 L0 q* v - If UBound(V) = 2 Then '检查是否有交点
; O$ s' C+ o- z# v! c$ @& K8 G - If UBound(P, 2) < 0 Then '重定义数组+ [7 U# |1 P5 b+ _: x# u, F- U
- ReDim P(2, 0)9 _1 I- x- _1 z
- Else
( E; m7 k# X8 z# y' M- m3 b - ReDim Preserve P(2, UBound(P, 2) + 1)/ [# I% k8 I1 g
- End If8 x1 i$ j' U+ V' [! z" A( g
- P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组% W0 f# \0 t* L# S+ S
- P(1, UBound(P, 2)) = V(1)4 Q1 T# ^$ ?" \4 V9 @8 c
- P(2, UBound(P, 2)) = V(2)( q3 R& ]( }/ u1 \/ R/ s# N, r G* x
- End If+ T$ O! C; U& a0 f3 C& V* V
- Next
1 C6 \) Y9 F+ Y - Next7 x# W! I9 k* r2 v! b
- If UBound(P, 2) < 0 Then
! C: j1 J0 W+ a% s - MsgBox "没有交点", vbOKOnly, "AutoCAD"* g+ A6 \ A% t9 t
- Else
h; o- a, g: l0 `/ j( R* C0 | - S = "共有 " & UBound(P, 2) + 1 & " 个交点"3 }: S: ~: x% H; D# \3 D! T
- For I = 0 To UBound(P, 2)& D8 R: A. n5 q+ w
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
6 w' A/ q# S7 v1 |0 G; E, @ - Next
# s6 v9 X1 z! d# e - MsgBox S, vbOKOnly, "AutoCAD"1 \$ o* g" `) z& l$ w- `$ l* V
- End If
2 Y) v, x5 Z! L N) b' F# W4 J - Else% E1 l# U" z, n- E+ h* K% z
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
- E; V: X) F$ C - End If
5 ~# L* h' L" x5 H5 } - SS.Delete '删除用过的选择集
# W: ?2 L) c8 k' D( Q
复制代码 |
评分
-
查看全部评分
|