|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
/ c1 M! o% l, u- Dim SS As AcadSelectionSet '声明选择集变量3 P' e% z9 \# ?" K% u7 Z" x/ O' I9 V
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
6 P2 ~) @6 T$ `/ M - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标* l! W" C" e& L0 ^0 {6 b- }
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点- W" {9 v! @& J- E+ n; \* i
- Dim I As Long, J As Long '循环变量
. M* G" F% E4 J, p9 f0 { - Dim S As String '一个字符串,用于消息框+ n" r( P7 [1 }' I. R
-
3 W; d# Q0 s, r0 k5 [- T - On Error Resume Next; E" Y1 {+ D5 H) H5 @
- Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
) ^! y& Z8 S' H0 b; k; @" P - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型3 y$ ^& G3 m- E+ ~
- Fd(0) = "line" '对象类型为直线
! w3 m8 e" O! l1 \& K$ g2 y - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
4 Y) L4 ]. w" `5 p! r+ ~ - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点2 f! c5 z# o k+ q' ^
- For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点9 K/ o9 z" u4 g" N3 K. d
- For J = I + 1 To SS.Count - 1
1 j6 _6 s; a8 } - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
. s/ u7 l: ?) i z' i$ | - If UBound(V) = 2 Then '检查是否有交点
- _3 G% h0 p6 o! { - If UBound(P, 2) < 0 Then '重定义数组4 {$ ?2 a3 o3 n D$ g" {
- ReDim P(2, 0)6 |; l5 C' t: |
- Else- e: e9 `% q4 Y- }
- ReDim Preserve P(2, UBound(P, 2) + 1)9 U# z0 H3 _8 C+ ^1 e! y$ f: q
- End If* i3 ^% i( w8 u; |' I
- P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组3 U4 L( q S7 m6 ]$ Y$ F
- P(1, UBound(P, 2)) = V(1)5 k/ x' W3 L# a. H. s
- P(2, UBound(P, 2)) = V(2). g1 X" g# |+ x8 ]5 i! m* s( D
- End If9 _4 V& `! ]. P: N% i
- Next
( i( k& D; I! o- O1 s - Next
* z+ C/ M/ u+ ]% ^. p - If UBound(P, 2) < 0 Then8 q2 ]& G& j% F* S) }+ a
- MsgBox "没有交点", vbOKOnly, "AutoCAD"( N1 P: {. q- b& ]0 h2 p- x, V( C3 e
- Else9 E( l+ ]1 v) R4 G) Q+ R
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"; Y. c' e. N5 l9 S
- For I = 0 To UBound(P, 2) y P2 O- F" ~) c' E! v& ^2 Z
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I), J$ D- I+ W5 D) G( V6 ^
- Next6 N+ M4 o% q2 k9 W. y" i$ M
- MsgBox S, vbOKOnly, "AutoCAD"/ `2 Q; ?, c, X+ z: h" j |
- End If
* f5 o- S, C( C- a, P. E - Else: G% D, s Z' ]6 D- V# T3 ]4 l8 z+ F
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
# r* O3 X9 L% \ - End If
9 {! z) I3 ]; Z5 Y: N- V- H - SS.Delete '删除用过的选择集
" r, h. ]2 W0 ^ b5 o
复制代码 |
评分
-
查看全部评分
|