|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
5 q3 ~- j: ^( G8 P4 [: w- Dim SS As AcadSelectionSet '声明选择集变量
, V d9 {" ?, v& v6 m2 m" F9 \ - Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
% @# u& c: P; h% m( L3 Y% k - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标8 \$ [9 h/ O8 s) h
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
* z ^2 Y9 F% { - Dim I As Long, J As Long '循环变量
* d9 |( Q# n- X3 ], ?2 ? - Dim S As String '一个字符串,用于消息框
( {# j5 F" l# _* Q; j% k, M/ X - 7 z9 F4 U; L% o7 n. ] ~
- On Error Resume Next
, @) ]: O' b1 e, e- V7 i# R7 D/ o - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集0 X& y0 b- [ R. H: u
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
& z. i! ^9 e9 U } - Fd(0) = "line" '对象类型为直线
" e1 c- W# z5 x" O( q ~ - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
$ O5 t0 C2 m3 L' r5 t! ^+ f - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
2 H# X2 U( R$ t0 l! [ - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点/ i7 Q/ `3 C. K! O/ R1 E
- For J = I + 1 To SS.Count - 1
3 B: T1 z. G! {: V/ i& b* `! I - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式! B' \: n9 X2 a
- If UBound(V) = 2 Then '检查是否有交点
8 W# V) r( ~, d/ h - If UBound(P, 2) < 0 Then '重定义数组
& @: ]6 P7 l6 [9 } - ReDim P(2, 0)1 ?/ i/ T: c4 h5 n3 y; z, d* U
- Else, U6 _: e: O- O: R1 n( t
- ReDim Preserve P(2, UBound(P, 2) + 1)
- u C% S* Z: C9 k - End If+ [+ h; p9 D% q! W0 h' ?
- P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组
4 B- ~8 c* o* K1 j9 G$ _ - P(1, UBound(P, 2)) = V(1)
& ^( Z2 k# i6 W* ~; ~ - P(2, UBound(P, 2)) = V(2)
3 p# B3 \! {8 i: t - End If
2 \4 j7 N4 H+ Q! s9 T6 s. _ - Next5 d* [, d2 m* g/ ]) m
- Next: x' O' z% G2 o! X) A8 n
- If UBound(P, 2) < 0 Then) l" H1 |2 i0 o' N3 P: E
- MsgBox "没有交点", vbOKOnly, "AutoCAD"
7 \& f! d4 P3 x4 k* P* Q - Else$ w% j; W6 g9 D2 q' j3 _" Q
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"4 [ ^ r% u) n) |7 k
- For I = 0 To UBound(P, 2)
2 @9 e9 d* f! ]7 ?% U- t - S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
7 y0 I0 v2 o' y& o6 _ - Next7 L0 N! ], x5 W% _# H; J* c4 |( ]+ D
- MsgBox S, vbOKOnly, "AutoCAD"6 k: P+ q/ |& e7 b% F8 a4 a+ ^
- End If, \+ I$ p, K$ B, F; [9 Z" D- W
- Else
8 R5 I) n2 n* W; [5 ?8 O - MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
$ r# }( N. k. [6 n3 M p - End If- F' l5 D' o, \4 P1 W
- SS.Delete '删除用过的选择集
4 R5 b. F$ y( J
复制代码 |
评分
-
查看全部评分
|