分享一个自己做的文字对齐
此文字对齐可指定一个点提取横坐标,然后把文字改为左对齐(t0)并向左对齐,中间对齐(t1)并向中间对齐,右对齐(t2)并向右边对齐‘很久前做的,没用vlisp,完全用autolisp写的,代码如下,比较简单:;;;========= 左对齐,修改73码控制垂直上中下对齐==========;;;
(defun c:t0()
(setq Ltxt (ssget'((0 . "text"))))
(setq LX0 (car (getpoint "\n拾取左对齐定位点:")))
(setq Lnum (sslength Ltxt)) ;;统计个数
;;对齐条件
(setq LH (cons '72 0)) ;;对其方式为左水平对齐
(setq LV (cons '73 0)) ;;对其方式为垂直对齐,改为012,表示上中下
;;循环结构
(setq L 0)
(while (< L Lnum)
(setq Llist (entget (ssname Ltxt L))) ;; 点表用于左对齐
(setq LHCODE (assoc '72 Llist)) ;;水平组码
(setq LVCODE (assoc '73 Llist)) ;;垂直组码
(setq newLlist1
(subst LH LHCODE Llist))
(entmod newLlist1)
(setq newLlist2
(subst LV LVCODE newLlist1))
(entmod newLlist2)
;; 修改坐标10码
(setq LXYZ0 (assoc '10 newLlist2))
(setq LXYZ1 (cons '10
(cons LX0
(cdr (cdr LXYZ0))
))
)
(setq newLlist3 (subst LXYZ1 LXYZ0 newLlist2))
(entmod newLlist3)
(setq L (+ L 1)))
(princ))
;;;========= 中间对齐,修改73码控制垂直上中下对齐==========;;;
(defun c:t1()
(setq Mtxt (ssget'((0 . "text"))))
(setq MX0 (car (getpoint "\n拾取中间对齐定位点:")))
(print MX0)
(setq Mnum (sslength Mtxt)) ;;统计个数
;;对齐条件
(setq MH (cons '72 1)) ;;对其方式为中间水平对齐
(setq MV (cons '73 0)) ;;对其方式为垂直对齐,改为012,表示上中下
;;循环结构
(setq M 0)
(while (< M Mnum)
(setq Mlist (entget (ssname Mtxt M))) ;; 点表用于中间对齐
(setq MHCODE (assoc '72 Mlist)) ;;水平组码
(setq MVCODE (assoc '73 Mlist)) ;;垂直组码
(setq newMlist1
(subst MH MHCODE Mlist))
(entmod newMlist1)
(setq newMlist2
(subst MV MVCODE newMlist1))
(entmod newMlist2)
;; 提取坐标YZ值
(setq YZ
(cdr (cdr
(assoc '10 newMlist2))))
;;构建新的11码
(setq MXYZ1 (cons '11 (cons MX0 YZ)))
(setq MXYZ0 (assoc '11 newMlist2))
(setq newMlist3 (subst MXYZ1 MXYZ0 newMlist2))
(entmod newMlist3)
(setq M (+ M 1)))
(princ))
;;;========= 右对齐,修改73码控制垂直上中下对齐==========;;;
(defun c:T2()
(setq Rtxt (ssget'((0 . "text"))))
(setq RX0 (car (getpoint "\n拾取左对齐定位点:")))
(setq Rnum (sslength Rtxt)) ;;统计个数
;;对齐条件
(setq RH (cons '72 2)) ;;对其方式为右水平对齐
(setq RV (cons '73 0)) ;;对其方式为左垂直对齐,改为012,表示上中下
;;循环结构
(setq R 0)
(while (< R Rnum)
(setq Rlist (entget (ssname Rtxt R))) ;; 点表用于左对齐
(setq RHCODE (assoc '72 Rlist)) ;;水平组码
(setq RVCODE (assoc '73 Rlist)) ;;垂直组码
(setq newRlist1
(subst RH RHCODE Rlist))
(entmod newRlist1)
(setq newRlist2
(subst RV RVCODE newRlist1))
(entmod newRlist2)
;; 提取坐标YZ值
(setq RYZ
(cdr (cdr
(assoc '10 newRlist2))))
;;构建新的11码
(setq RXYZ1 (cons '11 (cons RX0 RYZ)))
(setq RXYZ0 (assoc '11 newRlist2))
(setq newRlist3 (subst RXYZ1 RXYZ0 newRlist2))
(entmod newRlist3)
(setq R (+ R 1)))
(princ))
ketxu 发表于 2019-8-25 16:42
Now we have Textalign command, we can try it ^^
on deal,it is not you that i can find this command,thank you all the way,hoping for more communication. lzy233 发表于 2020-9-8 23:34
正想更新一下我自己的文字对齐LSP,大大的代码非常有参考的价值。
谢谢 互相学习 apoul 发表于 2020-4-10 14:48
谢谢老师分享,既实用,又可以观摩学习 ,感谢
老师谈不上 互相学习 我还小 谢谢分享 谢谢分享 。 Now we have Textalign command, we can try it ^^ 非常感谢分享 好用,感谢分享 谢谢分享 !!!!!!! 非常感谢分享