|
发表于 2011-3-25 00:23:55
|
显示全部楼层
来自: 中国辽宁大连
是否可以这样:( a1 P. N7 u, z4 B1 q- ?9 B
遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换.
& N# {$ u+ t0 |/ y9 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% Y) S# U8 w7 i3 ]6 W
- With ThisDrawing
' \7 t5 v/ t: w' e, Y0 V& T - '创建选择集,用于选择所有文字对象& u, x0 J, R+ s% [' G
- Set SS = .SelectionSets.Add("SS")3 ~, `5 T7 B4 x. Q7 j4 U( B' i
- '定义过滤器为选择单行文字对象
- b& K) I, T% ]6 N- [: H5 x - Ft(0) = 0
+ o) |' J; }- p1 F( P: h - Fd(0) = "TEXT"
* Q1 K/ [/ j P8 z - '选择所有单行文字对象
6 g1 R) `9 s$ P \& E - SS.Select acSelectionSetAll, , , Ft, Fd
# y" Y/ J: U# q( I' i' E - '当存在单行文字对象时排序和替换
* T* V, E; o& y# \% T+ _, P - If SS.Count > 0 Then
6 f! Q$ u1 I/ S) e2 J# A" @ - '计算所有单行文字的几何中心% _; Z/ j% Y3 j
- For I = 0 To SS.Count - 1% h2 Q6 r7 N# l6 Z5 e, q
- V = SS(I).InsertionPoint
0 Q$ v5 F( f f' n& M - P(0) = P(0) + V(0) / SS.Count
) A% _6 [) L% y3 L% D - P(1) = P(1) + V(1) / SS.Count
" i* p& j" o [# v; C - Next
' G) ~! v8 Q0 f - '重定义动态数组下标, w2 O$ {7 B/ {# W
- ReDim A(SS.Count - 1, 1)
8 }* c k% Q- A( z+ b4 {% r/ p7 @4 q - For I = 0 To SS.Count - 1! ]0 q% z& d) r0 D/ y
- '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
% L/ T8 P1 ~8 Z1 Y; z' r$ K - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)2 h, }( i6 e1 U! b% ~: K( {
- A(I, 1) = I
1 q( d2 p' h! Z6 |1 x: M - Next0 p+ v7 H9 @$ D( F, o- s
- '按角度从大到小的顺序排序. V7 P$ G# N! E( Z9 H
- For I = 0 To SS.Count - 28 T: x. Y8 U: U
- For J = I + 1 To SS.Count - 1
4 F& r$ A- Y' |' O - If A(J, 0) > A(I, 0) Then
4 Z( o4 y" C# T2 u8 @, T9 [' q' {6 V - D = A(J, 0)
3 I/ |1 @% u/ G, g5 ^ - A(J, 0) = A(I, 0)
0 z( q; G. U1 l3 t+ l - A(I, 0) = D3 [4 v6 q" A; O4 Q
- D = A(J, 1)/ ~& \- Z8 B+ x3 |3 \/ Q9 W
- A(J, 1) = A(I, 1), M. o3 Q& i. A, o! i7 R# c
- A(I, 1) = D$ ^; d2 b* y! M9 C3 x
- End If
2 K) U+ w" G- \& Z5 ~2 v( X* Z+ e - Next b- B0 V8 p- F( L& G; e
- Next7 _9 u& Q$ O! }* F" m% F/ M" E1 f) U
- '替换, `5 J; i' `) ]3 I
- For I = 0 To SS.Count - 1
2 f7 @- A: L+ f i1 S - SS(A(I, 1)).TextString = I + 1
- i+ j4 X: G% z5 X8 | k - Next
8 H: s2 ^, t X% D% b. ~5 S$ X - End If5 h7 q4 G) m. m+ ~& x) S
- '删除用过的选择集
: a- `+ o$ k+ [3 Z Y5 Q - SS.Delete9 h2 z3 ^) J) }. N& U& }1 J
- End With
复制代码 |
|