求做这种对齐效果
效果如图 本帖最后由 kozmosovia 于 2016-3-31 20:44 编辑直接将边界图形与文字全选,自动判断边界图形的左右边
(Defun C:AdjText ( / _GetLeftRight ALI D40 EPT I LR NN SN SS SPT ST TXT)
(Defun _GetLeftRight (obj / LL UR)
(vla-getboundingbox (vlax-ename->vla-object obj) 'll 'ur)
(setq ll (trans (vlax-safearray->list ll) 0 1)
ur (trans (vlax-safearray->list ur) 0 1)
)
(list (car ll) (car ur))
)
(if (setq i -1
d40 0.0
lr (list 1e99 -1e99)
ss (ssget '((0 . "text,arc,circle,*line")))
)
(progn
(repeat (sslength ss)
(setq sn (ssname ss (setq i (1+ i)))
st (cdr (assoc 0 (entget sn)))
)
(if (= st "TEXT")
(setq d40 (max d40 (cdr (assoc 40 (entget sn))))
txt (cons sn txt)
)
(setq nn (_GetLeftRight sn)
lr (list (min (car lr) (car nn))
(max (cadr lr) (cadr nn))
)
)
)
)
(initget "Left Middle Right")
(setq
ali (getkword "\n Enter Alignment <M>:")
)
(if (null ali)
(setq ali "Middle")
)
(setq d40 (* 0.5 d40))
(foreach sn txt
(setq nn (_GetLeftRight sn))
(cond ((= ali "Left")
(setq spt (car nn)
ept (+ d40 (car lr))
)
)
((= ali "Middle")
(setq spt (* 0.5 (+ (car nn) (cadr nn)))
ept (* 0.5 (+ (car lr) (cadr lr)))
)
)
((= ali "Right")
(setq spt (cadr nn)
ept (- (cadr lr) d40)
)
)
)
(command "_.Move" sn "" (list spt 0. 0.) (list ept 0. 0.))
)
)
)
)
本帖最后由 被承包的东子 于 2016-3-31 16:55 编辑
提供其中一种的实现,其余的参照修改就OK了!(defun c:b1()
(setq line1 (car (entsel "选取左边的线")))
(setq line1_data (entget line1))
(setq x1 (cadr (assoc 10 line1_data)))
(setq line2 (car (entsel "选取右边的线")))
(setq line2_data (entget line2))
(setq x2 (cadr (assoc 10 line2_data)))
(setq ax (/ (+ x1 x2 ) 2))
(prompt "\n《框选文字》")
(setq ss (ssget))
(setq nq 0 k 0)
(setq mq (sslength ss) )
(repeat mq
(Setq en0 (ssname ss nq))
(setq txt_data (entget en0))
(setq old_zb_data (assoc 11 txt_data))
(setq old_zb_data1 (assoc 72 txt_data))
(setq new_zb_data1 (cons 72 1))
(setq txt_data (subst new_zb_data1 old_zb_data1 txt_data ))
(entmod txt_data)
(setq ty1 (cadr (cdr (assoc 10 txt_data))))
(setq new_zb (list ax ty1))
(setq new_zb_data (cons 11 new_zb))
(setq txt_data (subst new_zb_data old_zb_data txt_data ))
(entmod txt_data)
(setq nq (+ 1 nq))
)
)
谢谢啊,以后居中就不要这么累了 kozmosovia 发表于 2016-3-31 11:14 static/image/common/back.gif
直接将边界图形与文字全选,自动判断边界图形的左右边
好多函数 都不认识 kozmosovia 发表于 2016-3-31 11:14 static/image/common/back.gif
直接将边界图形与文字全选,自动判断边界图形的左右边
貌似看懂了一些 感谢分享学习!!!! 学习了! 感谢分享程序! 谢谢分享好程序,,, 感谢楼主分享
页:
[1]
2