|
|
发表于 2009-4-4 07:20:13
|
显示全部楼层
来自: 中国
- 8 r; K$ h7 C: T, V* o
- Dim SS As AcadSelectionSet '声明选择集变量- ]$ Y0 e9 a8 G4 p1 L
- Dim Ft(0) As Integer, Fd(0) As Variant '声明选择集过滤器数组变量" C/ Z y: E: H- f
- Dim P() As Double '声明一个双精度型动态数组,用于保存所有交点坐标" N S# h; p; C+ L. t
- Dim V As Variant '声明一个变体型变量,用于提取两直线的交点
" }! r+ t' F% z - Dim I As Long, J As Long '循环变量
0 N! P0 G% C9 Q/ r$ Z" z5 a - Dim S As String '一个字符串,用于消息框' S/ Z& O! p* m7 E7 Y5 C
- # R; g; ]! @' z% V- o* ?* v: ~
- On Error Resume Next
7 P6 ^* u5 c. [& w& C4 w8 [ - Set SS = ThisDrawing.SelectionSets.Add("SS" ) '新建选择集
4 y# ?' \4 I3 @* K @ - Ft(0) = 0 '定义过滤器,组码为0,检查对象类型1 h- R. E: _% W8 Y
- Fd(0) = "line" '对象类型为直线
$ e1 T8 m! i5 s& a - SS.Select acSelectionSetAll, , , Ft, Fd '选择所有直线' Q5 t3 y8 @* C" t2 i
- If SS.Count >= 2 Then '检查被加入选择集的直线数量,只有数量大于或等于2时才能检查交点
% h6 F- \9 Q$ O2 e+ P5 `2 I, z8 k. L$ H - For I = 0 To SS.Count - 2 '用嵌套循环方式检查某条直线与其它所有直线的交点
: |/ b# g* ~" k% O! q - For J = I + 1 To SS.Count - 1$ {" W: j7 J( p$ D' {0 i
- V = SS.Item(I).IntersectWith(SS.Item(J), acExtendNone) '获得交点,用两条直线均不延伸的模式
9 B. F) M) N! f4 `8 x6 }! R ^ - If UBound(V) = 2 Then '检查是否有交点
$ Z9 s) f7 Q( a+ K; Z. T' v - If UBound(P, 2) < 0 Then '重定义数组6 X' J! b. f' r! T( T- o+ e6 p
- ReDim P(2, 0)2 ~6 w/ Y \4 y) z. r V
- Else- s0 K8 H; ?- o0 Q
- ReDim Preserve P(2, UBound(P, 2) + 1)+ e3 j' k; t9 _: b+ i
- End If9 L/ q, Y, Y* k1 e3 n$ \' H
- P(0, UBound(P, 2)) = V(0) '把交点坐标存入动态数组$ Q# Z4 w3 L# {8 A# u! F+ o
- P(1, UBound(P, 2)) = V(1)1 P6 S T4 c: v/ O
- P(2, UBound(P, 2)) = V(2)
1 c8 m& X5 [' c - End If
6 E7 @: D; e3 o# V0 Z( ~ - Next
; }& x; i/ g5 b/ Y - Next5 O# z$ Q# V6 `' S( e( X
- If UBound(P, 2) < 0 Then; }7 T( Q7 G: H7 @5 V
- MsgBox "没有交点", vbOKOnly, "AutoCAD"6 m3 z4 d9 T( C+ b7 \, l* w' e
- Else. ~) h/ e z2 o+ R! i0 T
- S = "共有 " & UBound(P, 2) + 1 & " 个交点"
+ a( F1 \ ^, E2 F3 O' q, ] - For I = 0 To UBound(P, 2)
9 P5 |% F# u8 e+ f u) n I) G" K - S = S & vbCrLf & P(0, I) & "," & P(1, I) & "," & P(2, I)! P+ r2 H" o- E4 B. W0 C$ F
- Next6 n& D. I, m z2 Z/ Y9 n! W9 _
- MsgBox S, vbOKOnly, "AutoCAD"- H W$ M) y7 N$ Z! S
- End If
, P( @. p2 @+ M5 y# P% k: O6 A - Else
( f% @( V" k6 \ a: b% T( B - MsgBox "直线少于两条", vbOKOnly, "AutoCAD"! k8 K8 m; O7 Y; [! t5 M
- End If i9 `$ I$ g5 {! H$ c7 N. W& G
- SS.Delete '删除用过的选择集
8 P1 q1 T& {3 T+ K% {, S
复制代码 |
评分
-
查看全部评分
|