|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
, ]6 {% @( s ?" _ a- C) X- Dim SS As AcadSelectionSet '声明选择集变量$ T3 I, w" I7 l) t
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量9 [6 y, D5 Q: K# D* {
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标: b0 C- i$ j7 h- o. }) y: @
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
# Z) p) n" D3 ]5 x - Dim I As Long, J As Long '循环变量
1 S. f$ O8 @7 G$ i7 d2 `, X - Dim S As String '一个字符串,用于消息框
]. j1 d1 |9 F# R1 T# c5 q -
8 T6 m6 g( e O4 D - On Error Resume Next
. y" |( R6 {1 f - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
! t8 p/ Q: w" y* Y5 F" W! L* ^ - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型
, g0 S/ [) e6 j" G/ j1 A+ ? - Fd(0) = "line" '对象类型为直线# m6 u) C( p% F% y7 y
- SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
- q {3 O* [7 z4 F% E+ t - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点6 m* I9 C; K0 l1 k: ]4 I1 e
- For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点# o Y6 @8 ]3 h3 m! `
- For J = I + 1 To SS.Count - 1
+ b8 O( h9 T3 ~6 Q5 C8 C+ D - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式1 @' Q2 k6 K$ H- Z; C
- If UBound(V) = 2 Then '检查是否有交点$ D& V7 `$ i# C$ e
- If UBound(P, 2) < 0 Then '重定义数组
. s' S- D2 C) h, W3 c; j$ D - ReDim P(2, 0)
' Q3 a- }' T6 X9 C0 w1 ]5 W# J - Else
6 D8 p' D4 K4 Q, _ - ReDim Preserve P(2, UBound(P, 2) + 1)
! U7 g1 k) } X+ t3 z0 Y0 A% U - End If
5 U8 P0 N0 s2 O1 H8 r5 P - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组% {' w2 k6 K" ]8 R7 E% v
- P(1, UBound(P, 2)) = V(1)
$ b% } R4 F* I. m" b8 }$ z( ?" C - P(2, UBound(P, 2)) = V(2)
. X. a* {% ~; Y' k0 c' ? - End If; k' W* W" o; x
- Next
$ C z }/ e4 Q - Next. K D4 m2 O) ` e+ S
- If UBound(P, 2) < 0 Then! \( j7 E+ H2 u
- MsgBox "没有交点", vbOKOnly, "AutoCAD"
6 j" W3 L# Z( A4 j7 `8 ~ - Else& t9 M! I- Z* ^1 j3 }1 _
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"
7 U+ P; K4 y! r& x) Z' v - For I = 0 To UBound(P, 2)
3 F4 G7 ?! ^0 J* h3 L% U, D4 l - S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)* M' N# f7 n% `* n* l
- Next
- ^! e S! g3 Z" l; F/ I - MsgBox S, vbOKOnly, "AutoCAD"
: m) ~3 z) T% u z. y - End If
9 c, S6 p6 S( d& Q; h2 {( k* h6 u - Else3 i- ~ n& V; B! V1 Q& q0 l' x
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"3 s& s9 Y3 r6 M
- End If
; O) q A1 c5 ~+ z1 P# b - SS.Delete '删除用过的选择集' D0 v. X# k1 h
复制代码 |
评分
-
查看全部评分
|