明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11555|回复: 53

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

    [复制链接]
发表于 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))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

老师这个只能是单行文字,不知能不能改为多行文字的?谢谢您  发表于 2022-10-9 15:50
 楼主| 发表于 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.
 楼主| 发表于 2020-10-25 08:40:24 | 显示全部楼层
lzy233 发表于 2020-9-8 23:34
正想更新一下我自己的文字对齐LSP,大大的代码非常有参考的价值。

谢谢 互相学习
 楼主| 发表于 2020-5-5 13:52:24 | 显示全部楼层
apoul 发表于 2020-4-10 14:48
谢谢老师分享,既实用,又可以观摩学习 ,感谢

老师谈不上 互相学习 我还小
发表于 2019-7-27 08:43:28 | 显示全部楼层
谢谢分享   
发表于 2019-8-25 16:42:23 | 显示全部楼层
Now we have Textalign command, we can try it ^^
发表于 2019-8-26 20:35:09 | 显示全部楼层
非常感谢分享
发表于 2019-9-19 10:52:01 | 显示全部楼层
好用,感谢分享
发表于 2019-11-14 11:26:30 | 显示全部楼层
非常感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 02:47 , Processed in 0.186388 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表