|
|
发表于 2011-3-25 00:23:55
|
显示全部楼层
来自: 中国辽宁大连
是否可以这样:
( V( r7 O5 z; e遍历所有文字对象并分别对其X和Y坐标加总平均,找出所有文字对象的几何中心点,再计算出所有文字对象相对于此点的角度,排序,按排序结果替换.3 s' }3 T4 {" _' c8 k# a/ Z1 K5 q
下面的代码仅供参考- 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
" Q) Q8 e) ?2 i" U- V, Z& k& u& ^- f - With ThisDrawing6 U6 g, }: F( J: k& }4 x0 S& g: k, {
- '创建选择集,用于选择所有文字对象
0 Q. t! q! ^0 }% R6 Q$ X# o1 P0 E. ` - Set SS = .SelectionSets.Add("SS")2 v% C2 k3 y; t/ E
- '定义过滤器为选择单行文字对象- s, e, p U1 h5 V% k1 b- X
- Ft(0) = 0# d9 a1 S9 n* p$ X9 M' t$ b1 Y
- Fd(0) = "TEXT"
. u7 B1 ]" X9 q: Z9 X1 b8 d0 ] - '选择所有单行文字对象
. c, y# [' ~4 T+ x. o! z - SS.Select acSelectionSetAll, , , Ft, Fd5 F: H9 H+ i2 |6 h
- '当存在单行文字对象时排序和替换
. b, y0 v7 |! F - If SS.Count > 0 Then
$ v3 ^! @2 {. T* A6 O+ u) o - '计算所有单行文字的几何中心
# n& ?2 V6 v5 ^7 ~& t7 e( }9 `- x - For I = 0 To SS.Count - 1
, x* K) S j$ t$ v( y; ?! { - V = SS(I).InsertionPoint+ O3 Z/ B, E, p( I: x' Q. Z/ M, |
- P(0) = P(0) + V(0) / SS.Count: g- k6 k; w8 p4 h' o* m$ `
- P(1) = P(1) + V(1) / SS.Count
% N# ~4 T0 }$ h0 c; e - Next
7 e/ m/ V3 A6 z4 ^/ L" d - '重定义动态数组下标
* z e8 P0 L3 R; S - ReDim A(SS.Count - 1, 1); _( E) V2 Q& J: L( o7 F: u5 ~1 C
- For I = 0 To SS.Count - 1
; U3 _, I' G8 H( A: E - '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号
" [# C' Z7 R" }* U2 h) C- F' {+ Q - A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)
9 N) H$ \+ b p6 v$ j7 v* r - A(I, 1) = I
: R; f# E! [0 O) A* } - Next1 b& p' b% m0 p3 V
- '按角度从大到小的顺序排序1 q& n) S7 Q2 b1 K
- For I = 0 To SS.Count - 2( N G" r9 S# O [% B/ ~3 x" _
- For J = I + 1 To SS.Count - 1
( v: z. ~( j7 \ - If A(J, 0) > A(I, 0) Then
9 b: o5 l' I# i0 @) K( l- P - D = A(J, 0)) v! U' }$ w9 }9 X
- A(J, 0) = A(I, 0)) ~, M0 |8 M- x5 G4 e" x) ~
- A(I, 0) = D$ j! x5 b/ R4 r( c7 F) K' n
- D = A(J, 1)
2 C2 } ^* M9 `2 ~8 f5 P - A(J, 1) = A(I, 1)) I3 b% D; j) W$ s2 w, i- X
- A(I, 1) = D
4 A' _3 s4 o) }/ o - End If; K8 r: w7 M5 I( L2 J3 C; e
- Next
0 c! C* j9 z4 p Y1 o: |. G3 w9 D - Next8 Z/ Z' C7 z y; O0 [9 B( x
- '替换4 @# N# ]% i6 l
- For I = 0 To SS.Count - 1; Y4 g2 m/ ~8 n- \8 q
- SS(A(I, 1)).TextString = I + 17 W6 Q2 S: o, G0 T7 D
- Next
, V7 P3 f& Z8 k. l - End If
" U* T- G7 g6 g9 f) w/ k1 @5 ^ - '删除用过的选择集
' a7 C* B1 P: T! O2 D8 k6 y - SS.Delete
- @1 L- x% a7 E% w9 @1 C - End With
复制代码 |
|