|
|
发表于 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 Double
3 ~6 i3 N; [' q9 v# d1 e - On Error Resume Next
. g* g: I' P. l/ s - With ThisDrawing4 y" C4 ^& H0 X4 k$ ^
- '创建选择集,用于选择所有文字对象
; U+ A& {5 S; l2 x% G- x - Set SS = .SelectionSets.Add("SS")7 o" J9 }' a+ L. k7 x/ Y
- '定义过滤器为选择单行文字对象
$ C( A' C- C; R0 D1 n! T - Ft(0) = 0& B0 B1 ~; d3 q& @2 d A0 H
- Fd(0) = "TEXT"
" _- E1 J9 g; S8 G# _# K - '选择所有单行文字对象
+ t3 \$ \4 t2 Y* K5 M+ n - SS.Select acSelectionSetAll, , , Ft, Fd
+ s, K9 T1 m9 x - '当存在单行文字对象时排序和替换- Z. H2 v+ |/ y7 b
- If SS.Count > 0 Then
* ?* J: S! { G. E/ G4 {) E - '由用户在屏幕上指定中心点; A/ D! i0 ]) W
- V = .Utility.GetPoint(, "指定中心点<默认>:")
7 R2 [ D( u' L* J, _ - '如果用户没有取消则排序和替换
3 m2 I/ [) n3 w2 G) \: W7 N+ |4 A4 E - If Err <> -2147352567 Then {0 `( F# ]9 t$ H3 y7 {/ k
- '用户指定了点
, \& Z: f# S* V! R) b" d e - If Err = 0 Then
* i* U& E4 M. ^& G" z# S( g0 l - P(0) = V(0)/ k. Q* L5 g, P( S1 l. S( W
- P(1) = V(1)) o; H! I- q' C# |7 ^ n4 g. l" @
- '用户选择了默认# x# O% l( L0 m& W
- Else$ S! F& k' n; p A+ d$ ]+ i8 `
- '计算所有单行文字的几何中心
0 w" b7 o1 d$ C$ l8 ~ - For I = 0 To SS.Count - 13 o3 I+ T6 Q0 S- ]/ [
- V = SS(I).InsertionPoint8 O& Y% A& | l9 u$ H" K
- P(0) = P(0) + V(0) / SS.Count$ n' H l( ~4 Y# k; U
- P(1) = P(1) + V(1) / SS.Count
6 ]8 m; \7 s8 i- K4 [ - Next' |2 g9 v# w3 p! f( H5 a, ` b
- End If
& @% h) \2 G9 X5 F - '重定义动态数组下标 Z8 @1 Q0 D! @, Q
- ReDim A(SS.Count - 1, 1) w" `; X( ]: }
- For I = 0 To SS.Count - 1
]; ?6 z) ], t6 a - '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号8 l; g5 V" Q9 \! v
- A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)( B7 N6 R, V5 A" C' f) v, B
- A(I, 1) = I6 s: X0 |. j9 k
- Next- W# L( B6 N" ]! g& d
- '按角度从大到小的顺序排序
V5 U9 _3 A% [0 d" w% k+ w1 S - For I = 0 To SS.Count - 2, h8 c8 j% x( L
- For J = I + 1 To SS.Count - 1
9 }& J3 c1 B$ Z2 r3 Z3 |+ c - If A(J, 0) > A(I, 0) Then
8 d' h6 f$ s# {/ ?* w7 M) ] - D = A(J, 0)2 |8 t% r$ n! c' W8 {" w6 F1 _
- A(J, 0) = A(I, 0); r) Y$ w* ^8 S3 ^% N- w# U
- A(I, 0) = D' Y0 f/ V. {# r$ \
- D = A(J, 1)- c8 Z# I# |9 C0 `9 B8 }4 ~
- A(J, 1) = A(I, 1) I) @# ^. L3 X
- A(I, 1) = D9 y2 n* C) T" b; c( e
- End If
% }% ]: D$ _) m7 b4 Y6 ? - Next0 B/ W2 h5 a% H8 H2 C0 _
- Next
: G( d% z; b9 e' |: h9 D/ A - '替换3 @; }1 i* u- @3 J% _
- For I = 0 To SS.Count - 19 d4 \ {( s0 F2 H, T, g
- SS(A(I, 1)).TextString = I + 1$ I. J; W6 T3 W- v! L$ j/ ?
- Next
) O) `* G1 N) Q' ^( {- J2 g% U - End If
6 x! Y( C) y4 s - End If8 h' T' G8 H4 c, r3 l( O6 a/ ~6 d
- '删除用过的选择集2 q( O2 X. A+ U. Y: h& Z
- SS.Delete
6 j( a K1 {% {" z* j8 ]& U - End With
复制代码 |
|