|
|
发表于 2011-3-25 00:23:55
|
显示全部楼层
来自: 中国辽宁大连
是否可以这样:
0 E" Y2 ~+ N9 g$ I( X, _8 p4 z) W遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换.
0 {( H6 J5 S" H5 ?. ~下面的代码仅供参考- 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
! r J, c; y8 f: u& t - With ThisDrawing2 n- y$ H8 v$ d
- '创建选择集,用于选择所有文字对象
9 a V& r% t* E - Set SS = .SelectionSets.Add("SS")- Q9 T' U" `# J6 s
- '定义过滤器为选择单行文字对象
3 r% m: O! k0 F/ {/ J( ^$ W9 a - Ft(0) = 0
3 v9 Y% \1 i8 }5 B& d# v8 C* |8 i - Fd(0) = "TEXT"0 X5 m7 h* L9 S; A. H0 s# m1 P4 w
- '选择所有单行文字对象
7 c. A/ H& D3 y. x0 e4 _7 j. F - SS.Select acSelectionSetAll, , , Ft, Fd
/ n6 N4 D. x- X2 B# v$ ?% [ - '当存在单行文字对象时排序和替换1 z$ x5 }5 o3 m3 [" i$ Q
- If SS.Count > 0 Then
# ]7 ]% B. _# w& ^2 p* t5 N - '计算所有单行文字的几何中心
4 K1 ?$ I* h$ T+ q* H2 K3 H - For I = 0 To SS.Count - 1$ b* H" T& X: u$ A: X
- V = SS(I).InsertionPoint D/ A. R& L; W N3 Y
- P(0) = P(0) + V(0) / SS.Count! U5 I/ ^+ E% N, m
- P(1) = P(1) + V(1) / SS.Count
# O% O; h0 k! C2 A. b6 { - Next4 h4 F5 Z/ x, v, A/ o
- '重定义动态数组下标0 ^5 b& _# f: t
- ReDim A(SS.Count - 1, 1). i `$ T- s. J- i$ y) H
- For I = 0 To SS.Count - 1
) z/ e6 U' K+ i; S* }! ]4 E - '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号; q6 v, L: `0 K) H0 w$ J L# j
- A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)
4 |+ P1 s+ }) y7 Y# A3 Z, l Q - A(I, 1) = I/ X; Q& W! f0 Y& P
- Next
: g4 G, Y2 z( p3 K. | - '按角度从大到小的顺序排序
# |1 M0 v) s/ v - For I = 0 To SS.Count - 2
# X+ u5 w8 I1 z6 l - For J = I + 1 To SS.Count - 1
, \3 I2 U) D7 b& J9 d% F6 O - If A(J, 0) > A(I, 0) Then
5 A- M5 w9 R, ]+ L - D = A(J, 0)
, Z4 @- m- ?3 m9 I* X - A(J, 0) = A(I, 0)/ {4 \5 l% K2 L( V0 V; n
- A(I, 0) = D
( E- l9 x: J. y3 g - D = A(J, 1)
) n* g Q6 R) K. f - A(J, 1) = A(I, 1)
7 L3 Z- u, g. v# x! z- S - A(I, 1) = D
! x9 P% k* T9 y: n5 K9 B$ O" N - End If
8 D. g3 z5 r6 t b2 V: \; L, t3 t) J6 [ - Next+ Y% A4 s' Q1 d; p
- Next
% p T+ ~" [2 f' X( `& E - '替换
v0 d: x% Y6 u6 H( P - For I = 0 To SS.Count - 1# Q. M% C5 q, S
- SS(A(I, 1)).TextString = I + 14 K" A S2 y4 u6 {3 D
- Next/ h9 y. A* T. X6 d2 W
- End If3 E6 Q# t4 q# _, x
- '删除用过的选择集
) w; o' j M3 P( t. A - SS.Delete
, T/ y# D/ k8 H w& P6 m+ w: w - End With
复制代码 |
|