|
发表于 2011-3-25 00:23:55
|
显示全部楼层
来自: 中国辽宁大连
是否可以这样:6 ]% l% k7 `4 Z$ B& |7 K* Q" s, v
遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换., m3 J" ]( E4 v$ P9 b
下面的代码仅供参考- 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
9 J6 I' J3 P% ]6 e: L - With ThisDrawing. O! y) L: B8 B
- '创建选择集,用于选择所有文字对象, `3 W+ L6 Q& w8 |1 P
- Set SS = .SelectionSets.Add("SS")
; t e2 L+ @" Q6 a. p0 ^! e - '定义过滤器为选择单行文字对象
6 a, s9 a v) O - Ft(0) = 08 f5 I7 y* g( c0 r
- Fd(0) = "TEXT"6 P) Z# G1 _# t6 O; c8 Q- v
- '选择所有单行文字对象
5 l, ~' c5 o/ S" S. H - SS.Select acSelectionSetAll, , , Ft, Fd
- N; P" P9 v. P+ M# j - '当存在单行文字对象时排序和替换
* B( s6 ?" E9 b- v - If SS.Count > 0 Then
. O6 q( j U; ~ Q5 z5 W - '计算所有单行文字的几何中心
2 O) w+ h0 T# O: s) Q" `) f - For I = 0 To SS.Count - 14 T1 Z) U! u# B- T
- V = SS(I).InsertionPoint& X! l1 N; `1 Q5 s0 k j
- P(0) = P(0) + V(0) / SS.Count
- H# N6 N2 R3 J" M( u+ o7 J - P(1) = P(1) + V(1) / SS.Count
& ^8 w& b8 {4 J - Next
6 e! K- T6 y g5 G - '重定义动态数组下标0 ^# J! w, N" I; Q
- ReDim A(SS.Count - 1, 1)
- O1 ~* J: M0 C: k" ? - For I = 0 To SS.Count - 1
{8 [) O1 X7 O0 d% B - '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
/ @7 _3 m8 Q! t' A/ W - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)
4 Q8 F+ L8 I- W0 d0 S# o. Q3 i - A(I, 1) = I; ?, }3 l) W* \3 v: Q
- Next0 K" M s1 X+ j; a+ U+ i6 ` y
- '按角度从大到小的顺序排序
9 ^* V4 R1 E+ H" w/ r6 C - For I = 0 To SS.Count - 2
& b. [, \' ?( v! h: v" s; H! x - For J = I + 1 To SS.Count - 1
% U: Q, T' V0 |$ k- B - If A(J, 0) > A(I, 0) Then
) R7 F4 ]9 _; [; N: P0 ^' r - D = A(J, 0)/ ?' a" t5 P, i1 N- [
- A(J, 0) = A(I, 0)& Y W$ }5 A) d' b! ]. ?7 q$ N
- A(I, 0) = D' Z& @0 k1 a" x7 q
- D = A(J, 1)
( X: x' F$ r! A4 D8 i9 `: D - A(J, 1) = A(I, 1)
/ Z0 ^8 B. f7 G. z5 p- J/ K ? - A(I, 1) = D
% L- l* J% P+ z( y8 W4 y1 h$ V - End If
- m7 ~9 G, g4 x) o7 U8 ] - Next0 ^9 S8 w) O6 ^5 V- a4 A; n
- Next" C5 g' s* O( x/ p) u$ H @
- '替换& V3 g' t) N' X! R9 A. s q
- For I = 0 To SS.Count - 1+ g* u+ B0 Z" R, W
- SS(A(I, 1)).TextString = I + 11 a D0 S) i! E9 N7 ~
- Next
, K* Z3 z1 l$ n6 v - End If
" g* K5 u( ~& b. x - '删除用过的选择集) R: G' i$ B5 |& z9 A- v9 _
- SS.Delete
0 o( s* a0 v4 M$ m - End With
复制代码 |
|