|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
* z' j' p: w+ a6 x5 w- Dim SS As AcadSelectionSet '声明选择集变量! t* V7 u+ o: q+ b6 R, ?
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量
6 u0 `# u: ? \$ ?7 `, O3 Y$ n5 l U - Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标; e' W3 R5 M m: e& l# l& ?
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点0 i" H( }( J' R( M A& w; ^; _4 t9 s
- Dim I As Long, J As Long '循环变量8 V5 J6 Y, T6 J$ F5 q5 m4 ^8 J
- Dim S As String '一个字符串,用于消息框
, {" W+ t6 B& ^ -
- s, t- S+ S4 X2 O - On Error Resume Next
/ x9 ?# A. U# t% V. p - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
" O5 ?+ H! }( P6 K+ F - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型3 Z; t* T- k* s& J7 L% \
- Fd(0) = "line" '对象类型为直线
4 H" X7 k2 z0 @- V! J7 e, ?$ i - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线
2 q# r/ ?" z4 l; D4 K/ V - If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
, F* J3 L* f7 G: w/ {: [ - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点; |9 m4 _6 [: }
- For J = I + 1 To SS.Count - 1
! z. S8 a5 _1 c - V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
: |' h+ f( [* L- P8 M - If UBound(V) = 2 Then '检查是否有交点9 h. Y3 g$ n# K0 l+ V0 P# ]
- If UBound(P, 2) < 0 Then '重定义数组
3 o1 h5 R, h$ @ - ReDim P(2, 0)
6 r% h7 q2 B0 E, H% @0 t - Else
: F: z9 G; j; u5 I: K - ReDim Preserve P(2, UBound(P, 2) + 1)
! m2 a0 d1 y/ v3 J/ O+ v - End If
6 q2 L5 q% H0 x# G z5 ^( L - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组9 X/ H2 i$ r' I$ ^% i
- P(1, UBound(P, 2)) = V(1)" b5 _8 h- j+ `* v5 q
- P(2, UBound(P, 2)) = V(2)
/ ~" `7 s4 ]: f# J5 c - End If' i! Y' e1 z: z4 l6 R
- Next
2 O1 @7 [; U$ f3 U( g& H - Next, `; t4 B6 h* A. C. c ^
- If UBound(P, 2) < 0 Then8 I" _" {9 t6 [1 {
- MsgBox "没有交点", vbOKOnly, "AutoCAD"/ Z9 O3 g' N/ l/ H U) A
- Else
0 P% s, S7 F* F- n, J# c - S = "共有 " & UBound(P, 2) + 1 & " 个交点". `5 ~' Q* J! u4 F
- For I = 0 To UBound(P, 2)1 r, T L: r$ l( `
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
, b5 O, F H( u - Next2 y; o/ ]* C# d: z+ b3 v) `
- MsgBox S, vbOKOnly, "AutoCAD"
( K# S+ P r. J - End If' V8 h/ {% z* R* s# Q7 G( O
- Else0 p3 {. z7 v; d! \& r0 G# ]
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
; z6 n* T+ o9 {& n3 \! C1 \ - End If, q" `3 U( G& W: D% {; F8 L9 ^
- SS.Delete '删除用过的选择集
5 `+ @& F# e" S
复制代码 |
评分
-
查看全部评分
|