|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
. H. L- v$ _7 g0 {9 P- Dim SS As AcadSelectionSet '声明选择集变量
- M- x/ ]8 ^% T3 F$ F - Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
. J3 x, ?) H4 O) q' T6 d - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标
0 @' ~3 p. l( r3 I0 \( ?/ c. S - Dim V As Variant '声明一个变体型变量,用于提取两直线的交点+ t7 Q- G% x3 S1 j F. V4 j
- Dim I As Long, J As Long '循环变量
4 z$ B) I* _2 S* P, w: K - Dim S As String '一个字符串,用于消息框
$ J- r& b! U' |9 M5 c -
. S; S* V6 T3 F+ m$ x7 ` - On Error Resume Next# J( |" [# L+ N" B# O1 W* x0 d2 R
- Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集. c( b# ^2 c& K! w* u8 N; A/ s
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
" e) W3 T/ V: s2 b1 Y- O* Q - Fd(0) = "line" '对象类型为直线
( [& t: E) S# j. \5 d3 M; I$ w0 I - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线, T4 z- r0 ?9 Y; }. X7 l" r
- If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
9 s V8 d5 \6 d3 t) ` - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点
7 r" S1 o3 T$ e7 j1 {; h5 O/ E4 T - For J = I + 1 To SS.Count - 1
d$ h: F3 h4 m1 O, i" W. L - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
3 z2 e* W4 h9 P( S* S } - If UBound(V) = 2 Then '检查是否有交点1 q6 \# k/ r0 `' G$ g: t5 {& ]
- If UBound(P, 2) < 0 Then '重定义数组% B) \3 b& q/ {# b
- ReDim P(2, 0)5 S( x* T) r! C* S
- Else' a/ X, {- m5 ~* m. n
- ReDim Preserve P(2, UBound(P, 2) + 1)
) Z B. u& ?( ] T - End If
+ X% X" B3 V& a2 m1 ]/ D. f b - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组
/ ^" Q5 f- _. n - P(1, UBound(P, 2)) = V(1)- a1 G& C; Y: l; J
- P(2, UBound(P, 2)) = V(2)' j; p* ?1 v h) @' m
- End If
1 b- G; y8 A& k; L5 ` - Next
* ^7 g; g! K+ Z! c" F - Next2 J6 x1 O4 C0 ^7 b: j" c
- If UBound(P, 2) < 0 Then
+ u! |+ o8 F s8 H! a - MsgBox "没有交点", vbOKOnly, "AutoCAD"- j" j$ p, [& o8 A4 P
- Else6 x% p0 ~" c8 _0 P: j, J) y
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"# `4 \4 f. ]8 l d3 U: C( F
- For I = 0 To UBound(P, 2)& `; B$ ^ b) f4 r0 q4 @, M
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
$ S7 n1 V2 [5 O; B5 x1 V H) b3 I - Next3 \4 P; r# j9 T) ]! w
- MsgBox S, vbOKOnly, "AutoCAD"
8 k; ^* y/ v9 y/ F# n1 a - End If+ a1 f5 ~9 \/ ?/ c+ \5 U6 `/ p
- Else
/ d t6 G/ W& Z, u1 d- } - MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
& X) F' |$ k, i5 D4 p' j0 f. H - End If
) W7 z1 d# P8 H - SS.Delete '删除用过的选择集
' J- W' r6 C6 l! G0 K# R
复制代码 |
评分
-
查看全部评分
|