|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
T- }" A4 M1 Y* P. q# V) N- Dim SS As AcadSelectionSet '声明选择集变量0 D$ ]% P/ p( @# Q
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量- N( {7 D9 I* Z
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标. y; c; c7 @- z, [8 t
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点2 O5 \3 B# T* a t- Q2 d7 p- F* k
- Dim I As Long, J As Long '循环变量0 s# t" g% s- N; l# J2 f9 f
- Dim S As String '一个字符串,用于消息框2 i0 b0 z) Q; }7 w5 \6 ]% {
-
# K1 X9 O6 C" B1 L# O - On Error Resume Next
2 M3 U1 y# a7 M. C - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集3 ?. p9 q2 m# Q
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
( D7 L s0 `* M/ i - Fd(0) = "line" '对象类型为直线+ E; i' m% |" Y, u' @
- SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
n7 a. e9 n( }( u0 z! X/ B - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
5 R5 Y# h+ {7 }4 y - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点( C/ @2 }3 R0 L3 ~& Q# i( z4 o9 d
- For J = I + 1 To SS.Count - 1
3 T, h, Y) \# f - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
O) U" p. m; i5 g: l8 ^2 S+ A% C - If UBound(V) = 2 Then '检查是否有交点
$ f0 e; ]7 Y# @8 N1 ^ - If UBound(P, 2) < 0 Then '重定义数组
: w. T G2 h; b - ReDim P(2, 0)& j# }0 J. G7 Y- z" [( r8 D+ U0 I
- Else
5 A7 q k; n6 w* ]/ u3 G - ReDim Preserve P(2, UBound(P, 2) + 1)
; ^4 I8 J# m) V E7 u; X - End If, P: I: C" f1 Y% q0 L0 g9 B( [
- P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组
# z: u$ U& `) l1 {5 |' }# E - P(1, UBound(P, 2)) = V(1)5 n2 z. K% g4 s. s% B
- P(2, UBound(P, 2)) = V(2)
- S) H* M' _* m' [8 y4 c" g - End If
; b" U; Y. |' V* S% ]" W3 G, G$ g; A& O - Next" Y# N. l- }- Y
- Next. Y9 }; d6 b* l2 Y3 B
- If UBound(P, 2) < 0 Then+ V4 `1 @2 e. Q3 {2 p: g+ o
- MsgBox "没有交点", vbOKOnly, "AutoCAD"
5 @, s* N4 g3 I, }1 c" N7 r - Else1 d3 H2 g7 m; l8 k5 e( J/ j
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"8 ~/ F8 O Y- j; I9 P3 ~
- For I = 0 To UBound(P, 2)7 S% h) j* [" D
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
x2 S5 v' H/ l/ I4 X% r - Next& m1 g9 }& U4 S% U5 ?- |3 g
- MsgBox S, vbOKOnly, "AutoCAD"! {2 F4 }4 W" ^ B x- b. z
- End If
* M9 n. p* \" |8 S% c' b - Else) b0 d# P1 K7 K" T8 Q$ ]
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
! L+ E& ]0 a u+ {# e - End If
6 g- D' j$ G/ E! B - SS.Delete '删除用过的选择集
3 r# p& z4 F9 i& h/ k
复制代码 |
评分
-
查看全部评分
|