|
|
发表于 2011-3-25 12:23:08
|
显示全部楼层
来自: 中国辽宁
我又想了一下,只用加总平均的办法计算中心点未免有点太单一了.如果增加一个选项,由用户在屏幕上指定中心点会更好些- 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# U! R# H" d$ G# B* i) P4 j
- On Error Resume Next- s8 Q( ]2 W1 H: m. w/ v9 M- Q
- With ThisDrawing
; Q7 @$ y, z# a% N - '创建选择集,用于选择所有文字对象- _4 {7 |: G: Q$ e
- Set SS = .SelectionSets.Add("SS")
: s+ T: O% d0 ?, D0 S" @& D - '定义过滤器为选择单行文字对象9 i, l$ ~% u2 ?/ w
- Ft(0) = 00 k7 f" ^* _2 ?# H- e
- Fd(0) = "TEXT"
- V q# F$ }; x/ B4 u- q - '选择所有单行文字对象. s5 Y1 U& g9 S# `& g
- SS.Select acSelectionSetAll, , , Ft, Fd
: {; z1 |' h" j7 W* p - '当存在单行文字对象时排序和替换' N# E9 X: t# @% R- G
- If SS.Count > 0 Then
7 U6 O/ a7 h& D: g - '由用户在屏幕上指定中心点
& M5 K( E; `# h. Z - V = .Utility.GetPoint(, "指定中心点<默认>:")
: c9 D7 T4 ^7 c. w" A+ l" N c, m - '如果用户没有取消则排序和替换
& v8 H1 [# Q0 A1 _8 |2 k - If Err <> -2147352567 Then
4 ?1 N. L+ S; G% k( @, k - '用户指定了点' U$ N( \+ c! ^9 \$ f; i {
- If Err = 0 Then& t( o, }, N5 q0 S. M
- P(0) = V(0)
4 f$ ?& ?- E# Z, P* q - P(1) = V(1)
! ~; k5 s7 g: \: H, u6 B - '用户选择了默认
% {2 I6 P$ S* H9 e - Else
2 I# H) D) w6 N5 O - '计算所有单行文字的几何中心6 M# }+ X3 q- |& v
- For I = 0 To SS.Count - 1" h* D. Z7 E$ a% v6 S! c
- V = SS(I).InsertionPoint
" X) _0 U: I) V; s$ g3 P - P(0) = P(0) + V(0) / SS.Count" o2 F6 P. `! v: [! g/ |
- P(1) = P(1) + V(1) / SS.Count4 f0 Z- f( x* z% A. n3 @
- Next
+ d# b* U1 D9 g4 u - End If
6 r$ p' w( g, l& a) _. M/ ^ - '重定义动态数组下标5 l) l) @! L5 I4 f( [, D! m7 K9 w* J
- ReDim A(SS.Count - 1, 1)
9 H ]/ k( S0 b6 m/ [5 t" L$ F - For I = 0 To SS.Count - 16 |: e/ F& D' }/ X- T
- '计算所有单行文字对象相对于中心点的角度,并记录其在选择集中的索引号7 Q( b- H: j! m+ k x
- A(I, 0) = .Utility.AngleFromXAxis(SS(I).InsertionPoint, P)
* L: a; M0 a7 e9 V - A(I, 1) = I: B* _2 I1 m# m+ `7 g
- Next/ m8 W8 s4 |9 ]+ [" |2 H
- '按角度从大到小的顺序排序) I( X ^; f& H, T, [. c' M
- For I = 0 To SS.Count - 2: ~6 c9 Q: @7 V
- For J = I + 1 To SS.Count - 1
( B6 J, P! C' w4 V. ] S8 g - If A(J, 0) > A(I, 0) Then
5 u* t' T4 F3 n/ X! ~0 C& \ - D = A(J, 0)
0 t9 ]+ a7 M) z; X' U; S3 M - A(J, 0) = A(I, 0)
5 R. E# T& {# g - A(I, 0) = D
* n( w0 l$ b$ x - D = A(J, 1)
6 H/ M' o% {1 F6 U" [ - A(J, 1) = A(I, 1)& Q# G% g* l: b% d1 c
- A(I, 1) = D" W+ h% b# L x/ A- e: C/ v7 V
- End If
1 T' Z+ T S2 R0 B( { - Next" p* l6 x Z# P M/ y5 \4 Z0 j
- Next2 g8 s7 v, @$ H: o
- '替换
4 H7 i3 Q" W) n# D0 X+ ?, P$ o& S - For I = 0 To SS.Count - 1$ C h6 Y' ?5 I: n/ N/ j' a
- SS(A(I, 1)).TextString = I + 1
# ^! k$ j& M! e# s - Next* m9 Y1 i4 Q, L
- End If
, T; j- I* k. w/ U! {$ J! n - End If
0 ]" o+ ] H4 P b+ d - '删除用过的选择集
( m' s( g. j! G" [( W* e( x9 L - SS.Delete
- Y, n" `& h/ L( K' c+ R - End With
复制代码 |
|