|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
3 U( ~/ B: f D! @8 z5 R5 |- Dim SS As AcadSelectionSet '声明选择集变量* c5 c% M2 T3 w( i7 Y
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量) c7 @. s' z; g0 L8 S0 T* U2 w9 i( P
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标
' L' u9 m3 a9 B$ e4 @: {( | - Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
- s+ G! \$ W, z( p - Dim I As Long, J As Long '循环变量( t" r/ s" {" d$ P) F, u9 a
- Dim S As String '一个字符串,用于消息框
$ {8 V: x. p+ A8 |4 U4 l0 c+ ~ - / e9 k# D. d1 h6 z% _ a( x% o7 b
- On Error Resume Next
^; _4 b3 A2 `" B5 ~0 ^& K% v - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集! H* @+ J$ b" a& P$ Z) P. A- H
- Ft(0) = 0 '定义过滤器,组码为0,检查对象类型# @5 d$ l1 o' [$ n4 y* T, e: r
- Fd(0) = "line" '对象类型为直线7 N b1 q# L4 g4 C' @
- SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线$ J d" ~2 i. a; A
- If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
$ r. G9 r1 {8 t& |' ]7 Z - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点
/ S- q3 a$ f1 L- y" D, g" x% b - For J = I + 1 To SS.Count - 19 j- g6 {% r6 `' v2 e; O! E
- V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式$ Q* U5 M/ Q r
- If UBound(V) = 2 Then '检查是否有交点
: k# ^* x4 B; [) e - If UBound(P, 2) < 0 Then '重定义数组4 s6 |7 f4 `. A
- ReDim P(2, 0)# J3 l9 y; s5 I+ }4 Z* F8 s: y' G
- Else7 b0 x, p4 o% o7 }+ j0 `: ?* @4 Z
- ReDim Preserve P(2, UBound(P, 2) + 1)" I" j- D# s, S
- End If
7 x( o" R1 Y7 H& B - P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组6 r5 y% y( l m3 W6 L7 @
- P(1, UBound(P, 2)) = V(1)
1 i5 a" z0 k) L6 f& I - P(2, UBound(P, 2)) = V(2)
6 f0 F. Y. _! s8 E; B" d- X, y% y1 T2 e - End If$ U/ J" E" _4 O# b! ]
- Next- U$ S6 P8 ^. s- _6 S* t% ^
- Next& L1 A T& n- Z- }
- If UBound(P, 2) < 0 Then
6 Q9 `0 Z6 v3 v+ U3 o6 r/ ~9 f$ C - MsgBox "没有交点", vbOKOnly, "AutoCAD"' x4 J3 W6 z' W! e. L
- Else8 c* r9 r' A8 h: z( a3 C7 g
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"
; Y4 l4 h! y5 [! v+ c1 n9 E - For I = 0 To UBound(P, 2): I. n' r7 v- K* P
- S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)
! _5 V4 k8 x; r+ q: W3 @# k - Next$ ~4 n( t+ f# i/ b+ E
- MsgBox S, vbOKOnly, "AutoCAD"9 ^* q9 S# n' Q5 }1 a( I
- End If
- y+ \: i4 k) t- x - Else5 m9 u# m( P. E5 x8 y$ V# o* p
- MsgBox "直线少于两条", vbOKOnly, "AutoCAD"
, W! S0 t. H* _. i; K& S' G - End If
2 q! \( W) n) u" T - SS.Delete '删除用过的选择集
! n0 W( i: p" d; o0 m: q- ?; }; q
复制代码 |
评分
-
查看全部评分
|