|
发表于 2011-3-25 00:23:55
|
显示全部楼层
来自: 中国辽宁大连
是否可以这样:
3 E6 D1 L& T, `, b遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换./ b3 A1 D/ w' `$ a9 m
下面的代码仅供参考- 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! T/ h$ j# E4 B7 y
- With ThisDrawing
+ T2 a6 h0 g# [, }: D, ~. S - '创建选择集,用于选择所有文字对象; M z( K+ B0 j) L
- Set SS = .SelectionSets.Add("SS")
: J' B) O" `) i/ g' V. _2 u - '定义过滤器为选择单行文字对象/ R, `# q6 E4 V' d
- Ft(0) = 0) L2 \; a1 \2 }
- Fd(0) = "TEXT"
1 q% }& y8 g# y - '选择所有单行文字对象! |. L9 Z% Y+ |* N6 h
- SS.Select acSelectionSetAll, , , Ft, Fd
! i( K' J9 ?% v4 X - '当存在单行文字对象时排序和替换
; W3 i5 ?7 f3 e L* Q# C2 v) L$ G; X' C - If SS.Count > 0 Then0 p9 i# o0 R0 T$ G
- '计算所有单行文字的几何中心
- _1 N0 _8 e) O+ i6 _5 \# E - For I = 0 To SS.Count - 1
: p$ Q4 o8 P$ N. ~/ s1 [. w t. V - V = SS(I).InsertionPoint
^: g9 V, s' Q ]) B4 L - P(0) = P(0) + V(0) / SS.Count
; y9 w2 X3 f% ] - P(1) = P(1) + V(1) / SS.Count3 W& ^; Z/ a# ?* c+ Q4 }, d
- Next
( R5 ^% [4 r4 @8 G - '重定义动态数组下标( c& V5 h9 U/ K
- ReDim A(SS.Count - 1, 1)
8 R' _- A/ Y" ? - For I = 0 To SS.Count - 1' |) I. M' T) T% E7 g6 T
- '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
9 `% h. B/ A. V( U/ o' ]. @ - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)4 D7 a3 _ G0 T m9 R7 w* _! M/ F, |
- A(I, 1) = I
# y& c/ T8 f3 q q% u! E' I* f/ [ - Next
6 C0 r! J; C6 I9 b1 \. ? - '按角度从大到小的顺序排序8 ]& p R/ @6 W" f2 m+ T
- For I = 0 To SS.Count - 2* I8 w( u( ?# C, V; P. _
- For J = I + 1 To SS.Count - 1" j/ F# n1 f* G. }7 z. S
- If A(J, 0) > A(I, 0) Then! Y( ~: S- _* d" P9 g- E
- D = A(J, 0)7 N8 L# P7 {1 ?$ t
- A(J, 0) = A(I, 0)
, r( r) n) f% {) P* x* I$ G - A(I, 0) = D0 }2 m- ]: ]+ {
- D = A(J, 1)1 P8 G( Q, o6 [& l' U
- A(J, 1) = A(I, 1)
/ F: `+ \& ?- N( Z3 G* W8 R; ` - A(I, 1) = D# {& q0 J/ ^0 j
- End If6 F4 ]) B9 |/ }; l% H
- Next# X) {, L4 p4 \9 e' S2 ^; M; g' M3 G
- Next0 F( R$ N5 |; p C. ~
- '替换; `' Y' a1 F3 O6 S" ?( Q$ ^" h6 I
- For I = 0 To SS.Count - 1& E3 l% t% w' @6 q# V. B
- SS(A(I, 1)).TextString = I + 19 ~7 M: e+ O- c v5 U- ?
- Next1 q/ S1 P, b9 ~4 m/ o: D
- End If
9 k9 T+ p5 Q5 | - '删除用过的选择集
7 N$ z" x1 p1 F# E: j2 S0 x - SS.Delete
$ f+ F2 J, d r0 n - End With
复制代码 |
|