|
|
发表于 2011-11-29 13:36:09
|
显示全部楼层
来自: 中国辽宁
- (defun c:bdf (/ e ent tc newt mc ang st zb
, m# T, {$ i3 J. g6 {; W/ F - zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2( r8 Y5 I- s y# \; ]
- oldosmode& K: J, E) T$ M9 }: k r, e' X' }
- )
" R9 l8 D, }% Q, u3 I2 I7 V$ W - (setq oldosmode (getvar "osmode")) ;记录用户当前的对象捕捉设置
% i9 R; j; L3 U0 M8 ~% K - (setvar "osmode" 0) ;关闭对象捕捉
. t6 W+ @1 u( a, d - (setvar "cmdecho" 0) U! S( k0 P w" L/ W
- (setq e (entsel "\n选择要对分的板筋: "))
2 V6 n3 ~% l1 I1 q* T9 \' J1 x( u - (setq ent (entget (car e)))
' ]. Z/ b6 n0 j7 o- y% _) `( ^ - (setq newt (atoi (cdr (assoc 1 ent))))/ J; H9 O# `% { D. L9 G5 c
- (if (/= 0 newt) ;过滤非数值文字
. I) R& Z* j2 i# E3 R" C6 t - (progn- Z( |7 d0 _9 U0 R6 z
- (setq tc (cdr (assoc 8 ent))) ;提取图层信息
0 H1 p, o) C* p# k& _ - (command "._Clayer" tc) ;保持图层一致
5 o, h) K9 }% \2 j+ { - (setq mc (cdr (assoc -1 ent))) ;提取名称,删除原对象使用 j) E8 B9 Q4 ^, O% D+ t) u
- (setq ang (cdr (assoc 50 ent))) ;提取文字角度1 y- G6 e' X1 \, r- W4 A! ^
- (setq st (cdr (assoc 7 ent))) ;提取文字样式
, D S, I+ T9 g# f - (setq zb (cdr (assoc 10 ent))) ;提取文字起点坐标
/ j, U# c" \3 E, |1 W9 { - (setq zbx (car zb)) ;文字x坐标
% B, s- P7 b* W6 r. m - (setq zby (cadr zb)) ;文字Y坐标1 ^9 B8 U% S5 x- I2 W8 Y+ N
- (setq zg (cdr (assoc 40 ent))) ;提取字高4 {+ B, e- `: ^+ U* }2 q E- A
- (setq zb1x (+ zbx (* 0.25 newt (cos ang))))
3 i2 t7 z$ ] @+ i - ;计算分开后两个数值的文字起点" S- ?1 B* R* n1 m3 V% p# n9 }
- (setq zb1y (+ zby (* 0.25 newt (sin ang))))
6 F! }! g+ |; Y% } - (setq zb2x (- zbx (* 0.25 newt (cos ang))))
' C3 z1 \8 S8 i - (setq zb2y (- zby (* 0.25 newt (sin ang))))( j! r3 M% S* F& H
- (setq zb1 (list zb1x zb1y)) ;确定坐标点
1 D' J, J- U5 w6 j( ] - (setq zb2 (list zb2x zb2y))0 y `+ Z5 c; O9 X, Z1 ]: [' t" b: T
- (if (= (cdr (assoc 40 (entget (tblobjname "style" st)))) 0)$ _* |+ L' K0 s- s3 ?9 \ g# w
- ;查看该文字样式中文字高度是否为0
1 p- S, b$ k6 y% T - (progn ;文字样式中文字高度为0时使用原对象的文字高度
0 e3 {! e$ z+ G7 [3 v - (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))' I' ]/ l9 N, L7 g
- ;输入两个对分的数值. L7 v) v% a! B8 c1 q
- (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
- k( I% J9 o8 x% m - )
, M( r- r& j! n' \( \ - (progn ;文字样式中文字高度不为0时不在命令行中指定文字高度
+ v; @1 j `# m! v$ c! @ - (command "text" "s" st zb1 (* 180 (/ ang pi)) (/ newt 2))
) L1 l2 F8 v; f) K$ p1 e4 H - ;输入两个对分的数值
& ?: v0 f, |# h5 g - (command "text" "s" st zb2 (* 180 (/ ang pi)) (/ newt 2))
& ]. e$ I: K8 s U5 t5 o: R( N - )0 J' d% f. a' F# i# n& i. ?
- )1 |, L/ @9 |" t$ K, {3 d' X
- (entdel mc) ;删除原对象
0 ?0 X0 |; z2 v: S j - )
4 _( ` L7 {5 S \- o( }7 y - (princ "\n所选对象不能处理")( H X, B( C, D4 i; Q
- )# d$ s! j+ T6 ]+ J" o4 m& N3 | k% j
- (setvar "osmode" oldosmode) ;恢复用户对象捕捉设置
6 G' x2 g) L- L I& E$ C - (setvar "cmdecho" 1)
0 [6 Y( y' |* `+ h0 N% A/ f - (princ)# X2 \ S' C" Q
- )
复制代码 |
|