|
|
发表于 2011-3-25 12:23:08
|
显示全部楼层
来自: 中国辽宁
我又想了一下,只用加总平均的办法计算中心点未免有点太单一了.如果增加一个选项,由用户在屏幕上指定中心点会更好些- Dim SS As AcadSelectionSet, Ft(0) As Integer, Fd(0) As Variant, V As Variant, P(2) As Double, A() As Double, I As Integer, J As Integer, D As Double3 O- X/ s( T0 x8 G; ~( ] S
- On Error Resume Next, n! _# J8 g! l3 O- P5 J# t
- With ThisDrawing
! `# ^& Q, K8 g7 _' Q6 u7 P - '创建选择集,用于选择所有文字对象
7 i# C' a9 ], N7 l! E* a - Set SS = .SelectionSets.Add("SS")( v- D: v+ r2 G5 U0 H6 T% I
- '定义过滤器为选择单行文字对象' D% g# R/ Q- [% P* k! D: f
- Ft(0) = 09 [+ p. t6 V; e4 L) t. q' h
- Fd(0) = "TEXT": E" ^; S% Z7 u) c+ v
- '选择所有单行文字对象
5 G; {3 K' G4 _+ |% E* z - SS.Select acSelectionSetAll, , , Ft, Fd
4 E6 L* u4 |6 [) T" m - '当存在单行文字对象时排序和替换
$ D8 B* N' `0 W1 ~2 d, g ^. H - If SS.Count > 0 Then6 Q( Y% e( k* `) C! c4 F3 k
- '由用户在屏幕上指定中心点
* \8 ]! e i- U. h o' E% F2 h' e0 { - V = .Utility.GetPoint(, "指定中心点<默认>:")
$ n5 r& F! V! Y+ X# S; I - '如果用户没有取消则排序和替换; z5 {+ X( f* O- b
- If Err <> -2147352567 Then. n4 Q% \0 `9 P( M
- '用户指定了点
4 u2 v! ]' j ] X% s+ w" I0 o+ U - If Err = 0 Then; `( k9 c0 T9 R3 o
- P(0) = V(0)
1 Q2 H3 U: w: C2 q9 \+ a2 C0 P - P(1) = V(1)
& I4 ~0 h: v2 s9 S - '用户选择了默认
( \& F: V" X' z% w- h0 s - Else& t/ _" ~2 L( f, v1 f! B
- '计算所有单行文字的几何中心
' v( f( `6 {/ x* L - For I = 0 To SS.Count - 13 E; i7 C+ D, u" h: A( s: X
- V = SS(I).InsertionPoint
; M; x2 |) O: P) H! _* c! U - P(0) = P(0) + V(0) / SS.Count
) v W/ p1 O; d+ }( v - P(1) = P(1) + V(1) / SS.Count
: ~3 x9 Y& r/ h! k% ? - Next$ j0 s0 ]7 r k% ]* }& V5 v6 H
- End If
, ?6 t9 I) c, a/ Y$ R. l, D - '重定义动态数组下标
6 ]. ?- k0 U) Z - ReDim A(SS.Count - 1, 1)0 |. G. M2 e) C) |2 U
- For I = 0 To SS.Count - 1& y D0 {* [1 x
- '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
* |. w$ y$ j: D6 A3 a - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)
& Q) h) \' U) \/ r# U - A(I, 1) = I! K+ s2 @) Z0 V4 ~. A
- Next
- E8 A. C2 C$ T( Y - '按角度从大到小的顺序排序, P6 B0 X7 q2 D$ M
- For I = 0 To SS.Count - 2
1 k: |/ I$ x5 g* O - For J = I + 1 To SS.Count - 1
/ t# }8 m0 L: ]8 Z% h1 F - If A(J, 0) > A(I, 0) Then
; ~+ H8 N! \! b1 @' r9 K - D = A(J, 0)3 |8 w3 K* J: ]; g# }% V3 n
- A(J, 0) = A(I, 0)2 o0 d3 k; l; Z
- A(I, 0) = D
9 [/ V7 t0 p% c" ~6 y4 m. a: H P - D = A(J, 1)
0 R1 V1 i4 o) W# Y2 S - A(J, 1) = A(I, 1)$ F) b+ X! ]2 R, K2 }2 y$ E
- A(I, 1) = D( e$ r2 S& [2 m1 Y% ~' r$ |, V
- End If9 U2 U# T- W4 q- X: s% ]
- Next
, D |( s3 y$ E ~& T - Next9 n5 ~+ D( O# V: |, N$ F6 \
- '替换
* c7 V/ ]3 X+ X; f/ r Y: [- m - For I = 0 To SS.Count - 16 L5 T4 L, ^2 h& C
- SS(A(I, 1)).TextString = I + 1
" T) C; [. S6 K' l( z/ S& q( L - Next& v7 o' r* X, J" B
- End If
+ C+ b4 i- i U - End If; Q3 A% d( Q& D7 |
- '删除用过的选择集
+ n- X* y* {, s5 v& u. \6 Q2 y - SS.Delete# }. y1 y/ i# ^) L
- End With
复制代码 |
|