明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 992|回复: 10

[源码] 单行文字对齐

[复制链接]
发表于 2024-7-17 13:00:13 | 显示全部楼层 |阅读模式

之前学AutoLisp的时候搞的小插件,转C#,分享一下。


功能:选择单行文字,输入间距/回车,横/竖向对齐文字。
  1. ;---------------------------------------------------------------------;
  2. ;已完成,勿动(-_-!)
  3. ;根据参数返回点列表按某一坐标轴排序,ordor=1为降序,=0为升序
  4. (defun pzj:sort(ptlst axis ordor / tmp)
  5.   (setq tmp
  6.     (cond
  7.       ((= axis "x") (vl-sort ptlst '(lambda(a b) (< (car a) (car b)))))
  8.       ((= axis "y") (vl-sort ptlst '(lambda(a b) (< (cadr a) (cadr b)))))
  9.       ((= axis "z") (vl-sort ptlst '(lambda(a b) (< (caddr a) (caddr b)))))
  10.     )
  11.   )
  12.   (if (= ordor 1)
  13.     (reverse tmp)
  14.     tmp
  15.   )
  16. )
  17. ;---------------------------------------------------------------------;
  18. ;更改文字为左对齐
  19. (defun pzj:chalignCur(ent)
  20.   (if (not (= (assoc 72 ent) 0))
  21.     (setq ent (entmod (subst (cons 72 0) (assoc 72 ent) ent)))
  22.   )
  23.   (princ)
  24. )
  25. ;---------------------------------------------------------------------;
  26. ;文字横向对齐
  27. (defun pzj:dqth(ss dqpt space / i boxpt lst sph)
  28.   (setq i 0)
  29.   (repeat (sslength ss)
  30.     (pzj:chalignCur (entget (ssname ss i)));文字改为左对齐
  31.     (setq
  32.       boxpt (textbox (entget (ssname ss i)))
  33.       lst (cons (list
  34.       (ssname ss i)
  35.       (cdr (assoc 10 (entget (ssname ss i))))
  36.       (1+ (fix (- (nth 0 (nth 1 boxpt)) (nth 0 (nth 0 boxpt)))))
  37.     )
  38.       lst
  39.     );构建((图元名1 对齐点1 字长1) (图元名2 对齐点2 字长2)...)列表
  40.       lst (vl-sort lst '(lambda(a b) (< (nth 0 (nth 1 a)) (nth 0 (nth 1 b)))));((图元名1 对齐点1 字长1) (图元名2 对齐点2 字长2)...)列表按x轴排序,升序
  41.     )
  42.     (setq i (1+ i))
  43.   )
  44.   (setq sph 0)
  45.   (foreach each lst
  46.     (if (= space nil)
  47.       (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car (nth 1 each)) (cadr dqpt) (caddr (nth 1 each)))))
  48.       (progn
  49.         (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (+ (car dqpt) sph) (cadr dqpt) (caddr dqpt))))
  50.   (setq sph (+ (+ (nth 2 each) space) sph))
  51.       )
  52.     )
  53.   )
  54.   (princ)
  55. )
  56. ;---------------------------------------------------------------------;
  57. ;文字纵向对齐
  58. (defun pzj:dqts(ss dqpt space / i boxpt lst spz)
  59.   (setq i 0)
  60.   (repeat (sslength ss)
  61.     (pzj:chalignCur (entget (ssname ss i)));文字改为左对齐
  62.     (setq
  63.       boxpt (textbox (entget (ssname ss i)))
  64.       lst (cons (list
  65.       (ssname ss i)
  66.       (cdr (assoc 10 (entget (ssname ss i))))
  67.       (cdr (assoc 40 (entget (ssname ss i))))
  68.     )
  69.       lst
  70.     );构建((图元名1 对齐点1 字高1) (图元名2 对齐点2 字高2)...)列表
  71.       lst (vl-sort lst '(lambda(a b) (> (nth 1 (nth 1 a)) (nth 1 (nth 1 b)))));((图元名1 对齐点1 字高1) (图元名2 对齐点2 字高2)...)列表按轴排序,升序(x轴m=0、y轴m=1、z轴m=2)
  72.     )
  73.     (setq i (1+ i))
  74.   )
  75.   
  76.   (setq spz 0)
  77.   (foreach each lst
  78.     (if (= space nil)
  79.       (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car dqpt) (cadr (nth 1 each)) (caddr (nth 1 each)))))
  80.       (progn
  81.         (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car dqpt) (- (cadr dqpt) spz) (caddr dqpt))))
  82.         (setq spz (+ (+ (nth 2 each) space) spz))
  83.       )
  84.     )
  85.   )
  86. )
  87. ;---------------------------------------------------------------------;
  88. ;执行函数
  89. (vl-load-com)
  90. (defun c:dq (/ m)
  91.   (initget "s")
  92.   (setq m (getkword "(s)竖向对齐/横向对齐:"))
  93.   (if (= m "s")
  94.     (pzj:dqts (ssget ":L" '((0 . "TEXT"))) (getpoint "\n指定对齐点:") (getreal"\n指定间距:"))
  95.     (pzj:dqth (ssget ":L" '((0 . "TEXT"))) (getpoint "\n指定对齐点:") (getreal"\n指定间距:"))
  96.   )
  97.   (princ)
  98. )
  99. ;---------------------------------------------------------------------;


发表于 2024-7-17 13:56:28 | 显示全部楼层
谢谢分享,666
发表于 2024-7-17 14:01:37 | 显示全部楼层
多谢分享,支持源码
发表于 2024-7-17 14:23:25 | 显示全部楼层
谢谢分享源码~
下载来试试看
发表于 2024-7-17 15:29:52 | 显示全部楼层
谢谢分享,学习
发表于 2024-7-17 16:02:30 来自手机 | 显示全部楼层
非常厉害,感谢分享
发表于 2024-7-18 20:54:40 | 显示全部楼层
好东西,谢谢分享
发表于 2024-7-19 14:14:59 | 显示全部楼层
非常厉害,感谢分享
发表于 2024-7-24 14:54:34 | 显示全部楼层
好東西,謝謝分享,感謝!!!
发表于 2024-8-30 23:16:25 | 显示全部楼层
好东西,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 22:49 , Processed in 0.190680 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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