|
3#
发表于 2011-3-25 00:23:55
|
只看该作者
来自: 中国辽宁大连
是否可以这样:1 \, H- _$ S0 [/ H3 O9 o
遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换.; U( \' w9 }% g5 A* @
下面的代码仅供参考- 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
4 z2 Y3 g7 B0 Q8 s1 s2 g - With ThisDrawing7 _# G, j& n& Y& l. i6 W3 E5 @ H5 X
- '创建选择集,用于选择所有文字对象
) n: t v6 o6 h- V - Set SS = .SelectionSets.Add("SS")
' z" ] a, s6 `, i, r - '定义过滤器为选择单行文字对象
9 I6 p9 [3 n: c. S/ x - Ft(0) = 0% a0 A2 K6 ?& C9 G/ O# t
- Fd(0) = "TEXT"8 l( Y) X; Q6 w* {, c- Q
- '选择所有单行文字对象
5 j3 T4 }. j* }/ P1 f - SS.Select acSelectionSetAll, , , Ft, Fd
3 U: r! U. r$ `3 {, I+ x/ [ - '当存在单行文字对象时排序和替换( E; ]+ E1 [2 v/ A& F' a' ~( s
- If SS.Count > 0 Then
% A6 f5 c# m7 T: r+ T% k3 O$ r - '计算所有单行文字的几何中心
4 G: P$ h2 D3 @. n+ X - For I = 0 To SS.Count - 12 ]3 ~# h1 B G- f1 F- ]: i |
- V = SS(I).InsertionPoint
. {) ], B9 I% f; @7 S4 u* C - P(0) = P(0) + V(0) / SS.Count3 K, P$ `! P2 |5 p; q
- P(1) = P(1) + V(1) / SS.Count
1 k: M' a7 V4 s6 i8 O* D R" y - Next
8 v$ ~5 T+ g3 Y% n4 r - '重定义动态数组下标
, h8 i+ O z9 @0 p! G - ReDim A(SS.Count - 1, 1)2 f. j2 x, Y7 a1 l w9 U
- For I = 0 To SS.Count - 1
7 h, N* f( v) V+ i& } - '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
% R+ @& l4 @# L7 w$ e - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)9 B6 m" N6 u2 A
- A(I, 1) = I
4 p" k$ l2 ?0 L( E* w- e( D' K - Next2 }0 v9 e# m/ y: `! w+ G6 W/ h
- '按角度从大到小的顺序排序* \% N$ u. c# W0 c" x2 j5 D% C
- For I = 0 To SS.Count - 2
! Q; J4 S- h% T- \$ ^ - For J = I + 1 To SS.Count - 10 D9 H3 s" r: V& \& s; U* _
- If A(J, 0) > A(I, 0) Then
' R; p2 M" C. K. D2 [( ~9 D9 q7 W - D = A(J, 0)- @. F9 d6 x' J% i1 s4 d+ k
- A(J, 0) = A(I, 0)
3 z* m* f6 p% k - A(I, 0) = D: m4 D. n' h) g7 G, K
- D = A(J, 1)( e, H+ q2 R+ M6 o1 c( V
- A(J, 1) = A(I, 1)
7 z: [5 B( f* A8 I - A(I, 1) = D
$ d* d) k0 ]+ P0 } N( T1 {9 s - End If
; `3 \+ H, v5 ]" M! B - Next
& w J5 h; e: u# h: L( y5 P - Next+ y6 ?9 J9 K( N r5 A
- '替换
7 T+ Y% o5 c' W E; T+ A - For I = 0 To SS.Count - 1- W( }% _2 s B# [9 C$ X8 }
- SS(A(I, 1)).TextString = I + 1. l6 u) ]* U! `4 Z/ j$ v
- Next
) C a; E+ d- k" `5 H - End If
9 e! ]& M- d0 K+ V1 i& |+ N - '删除用过的选择集) l! m- I3 ^ r" O! Y
- SS.Delete6 s( k* \! u. U7 ~, f0 N4 v# [, Y
- End With
复制代码 |
|