WWYYBB1015 发表于 2019-7-26 23:33:00

分享一个自己做的文字对齐

此文字对齐可指定一个点提取横坐标,然后把文字改为左对齐(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))

WWYYBB1015 发表于 2019-8-28 22:50:40

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.

WWYYBB1015 发表于 2020-10-25 08:40:24

lzy233 发表于 2020-9-8 23:34
正想更新一下我自己的文字对齐LSP,大大的代码非常有参考的价值。

谢谢 互相学习

WWYYBB1015 发表于 2020-5-5 13:52:24

apoul 发表于 2020-4-10 14:48
谢谢老师分享,既实用,又可以观摩学习 ,感谢

老师谈不上 互相学习 我还小

烟盒迷唇 发表于 2019-7-27 08:43:28

谢谢分享   

he378980280 发表于 2019-8-19 14:50:08

谢谢分享 。

ketxu 发表于 2019-8-25 16:42:23

Now we have Textalign command, we can try it ^^

greyzxy 发表于 2019-8-26 20:35:09

非常感谢分享

sunny_8848 发表于 2019-9-19 10:52:01

好用,感谢分享

逍遥无声 发表于 2019-11-7 02:34:25

yoyoho 发表于 2019-11-10 12:32:50

谢谢分享 !!!!!!!

qssq 发表于 2019-11-14 11:26:30

非常感谢分享
页: [1] 2 3 4 5 6
查看完整版本: 分享一个自己做的文字对齐