|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
$ S, c8 p, Q7 ]7 I9 Y- Dim SS As AcadSelectionSet '声明选择集变量
( r6 x& {1 ~; } U* ?) K4 w - Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
; v4 O1 u) Q* u2 T; o9 h. Z1 X - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标4 v2 q/ K# v B: ?9 K; X( |. o9 T
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点# b, @, E6 y& K0 n
- Dim I As Long, J As Long '循环变量
, k. L& b- W5 J7 [5 } - Dim S As String '一个字符串,用于消息框% [0 ~6 F% e) s) u
- 1 j3 F9 p( H' r4 Y
- On Error Resume Next
( D/ _8 ~+ D, O5 Z - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集3 O3 v; T: [4 H+ G/ T
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
! Z: g* g6 [( }- l - Fd(0) = "line" '对象类型为直线9 W0 X8 v$ O. H
- SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
4 Y. k; A- w6 L; D) l2 |: u# S - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
5 ? }% @0 S) w) L: N: W - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点
8 Z' Q( r+ A& J1 ] - For J = I + 1 To SS.Count - 1; V* b; e( f2 U7 l# F* r
- V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
/ e# i: H7 `: v' E3 u" V: F - If UBound(V) = 2 Then '检查是否有交点
2 Y1 Q# I2 U. {1 a, Y - If UBound(P, 2) < 0 Then '重定义数组; a; \4 |1 c5 G/ S+ H# c3 @
- ReDim P(2, 0)7 ^" }0 w. a* E( q& O# s9 t* U
- Else
0 v4 c, y* C6 D# s( L. |+ D9 Z - ReDim Preserve P(2, UBound(P, 2) + 1)
2 N6 i& n* v$ F' `9 D% G9 ? - End If
# I& J* ~ O8 X/ i) R/ m - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组# P) F' X, X: U$ p8 J- f3 j: `
- P(1, UBound(P, 2)) = V(1)
& I! h" W( f6 R+ f2 f - P(2, UBound(P, 2)) = V(2)
& R u: J! C' E8 Y; u# | - End If8 @* j, b+ O9 g& e
- Next
; @5 p4 e$ N3 H4 T; V - Next
+ b; K6 J; ?; C0 y2 V" e# \ - If UBound(P, 2) < 0 Then
0 Q8 G9 K6 _- G! Q - MsgBox "没有交点", vbOKOnly, "AutoCAD"
- q% p9 p8 c/ o) E9 g0 v - Else
8 _$ k e2 H% i6 z2 Z) B% r' x - S = "共有 " & UBound(P, 2) + 1 & " 个交点"9 G; ?6 u$ K- ^8 g" ^9 O
- For I = 0 To UBound(P, 2)
/ \, ?- ?/ E, `8 q1 ?- `2 p - S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I), N& B! O0 b5 U$ b' ]) L$ M
- Next
L. c0 ~" F( X5 `5 g: \ - MsgBox S, vbOKOnly, "AutoCAD"
; w2 w/ q( q! o, |; o; [$ @ f - End If0 N! z) i' V4 t' n
- Else9 R6 m" H* N/ U6 n) C- l" k2 i6 _
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"6 X1 p- ~- H3 P( K0 M0 s0 N
- End If E1 m( P, g$ e6 Q6 E$ W# G
- SS.Delete '删除用过的选择集
- }6 ]5 Z, n l: D2 j; i
复制代码 |
评分
-
查看全部评分
|