|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
; k; x" G, |$ ?" V6 j F$ x9 o- Dim SS As AcadSelectionSet '声明选择集变量. q0 X2 d/ |; m. X
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量) P( T. N3 ?6 R! V: u0 z
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标4 x8 \ n& x* J+ T, ^
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
: [+ i6 e# K+ Z9 E- w - Dim I As Long, J As Long '循环变量
2 L9 x9 t* `7 L$ J% k# S - Dim S As String '一个字符串,用于消息框% H2 ?$ @, @- O' k
-
3 {! y7 q, X, L. O% K; w. u6 R - On Error Resume Next
- K- C2 d5 l, q2 f - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
$ Q5 b6 ^* f) x* o( o - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
5 X2 c( b' t! O/ e1 C2 u - Fd(0) = "line" '对象类型为直线
. Y! \3 \3 Z+ q% n - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
, s$ P- \/ @* Y9 k6 _7 ]1 b - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点: L, {# q- n2 [% G/ D% G. b
- For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点8 D" j2 \4 ~, v6 J+ W; V( `& F: B
- For J = I + 1 To SS.Count - 1
: |6 v$ o8 C' l3 r& R+ q5 ]8 u - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式) a/ ^7 _: b5 }8 Y& g* V4 ]
- If UBound(V) = 2 Then '检查是否有交点
/ P1 V6 H B" R7 Z - If UBound(P, 2) < 0 Then '重定义数组/ _& K- F8 B4 \+ }0 O9 W, V
- ReDim P(2, 0)
3 R% l& R# l: L/ Z! @; y% R - Else
% J2 ~/ F4 @' j( ?% ]- x - ReDim Preserve P(2, UBound(P, 2) + 1)9 F9 j# t' J; G* W, K; C
- End If
6 V* q" T* U, [1 |6 B& a f" G( g - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组" o' Y- r- v- ~& m( N+ N, h
- P(1, UBound(P, 2)) = V(1)
0 f3 [, T* u6 R& d9 E0 j - P(2, UBound(P, 2)) = V(2)
- W. w& f, h" F7 `4 |$ X% s - End If
5 e3 B6 r+ o: Q* K - Next
5 i# \: h5 W! W: ]! L g" M. P1 b2 M( ` - Next9 S2 V% \7 V8 w x
- If UBound(P, 2) < 0 Then
* S. f, M! C9 E* v: \ - MsgBox "没有交点", vbOKOnly, "AutoCAD"
4 a) @8 z" r. j* o, E' N - Else
% \* S, q$ ]; Z! r& \, B& v - S = "共有 " & UBound(P, 2) + 1 & " 个交点" c7 |# C6 x; m8 T8 u' V
- For I = 0 To UBound(P, 2)8 p" c/ w" [$ c% h2 T9 Z- |
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
6 @% @* K; ~7 T+ j - Next
/ a* n/ l# z+ \' W% O - MsgBox S, vbOKOnly, "AutoCAD". F% }; |" r* h, i0 n5 W
- End If
, h$ w3 w7 t# S$ U4 E - Else, X( e2 m% F4 e: a2 K' ^
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
* v% z/ M! j* m/ X% x$ l0 | - End If
+ Z5 n( a; e1 n. t+ v - SS.Delete '删除用过的选择集
$ C# o; L4 Z/ u8 H* }
复制代码 |
评分
-
查看全部评分
|