明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3706|回复: 13

求多个单行文本的对齐程序

  [复制链接]
发表于 2006-10-10 10:40:00 | 显示全部楼层 |阅读模式

感觉我要找的程序应该有,但是没有找到。

要对图纸中的多个单行文本进行左对齐,能够调整行间距即可。

要lisp程序,因为还不会用别的程序。

点评

http://bbs.mjtd.com/thread-92449-1-1.html  发表于 2012-5-5 10:36
发表于 2012-5-4 22:30:20 | 显示全部楼层
回楼上的,年代太久远了,代码自己都看不懂了!这个网站自己也有几年没来了,今天是搜索其他资料才回到这里。
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-1 18:27:09 | 显示全部楼层
david96007 发表于 2012-5-4 22:30
回楼上的,年代太久远了,代码自己都看不懂了!这个网站自己也有几年没来了,今天是搜索其他资料才回到这里 ...

岁月流逝了  旧地重游一下
发表于 2006-10-10 11:25:00 | 显示全部楼层

 

;平均分布单行文字各行:
(defun c:dqwb ()
(setq a (ssget (list (cons 0 "text"))))
(setq n (sslength a))
(setq all nil)
(setq m 0)
(while (< m n)
(setq all (append all (list (entget (ssname a m)))))
(setq m (1+ m))
)
(setq l 0)
(setq m 1)
(while (< l n)
(setq b (nth l all))
(while (< m n)
(setq c (nth m all))
(if (> (nth 2 (assoc '10 c)) (nth 2 (assoc '10 b)))
(progn
(setq all (subst 'aa (nth l all) all ) )
(setq all (subst 'bb (nth m all) all ) )
(setq all (subst c 'aa all ) )
(setq all (subst b 'bb all ) )
(setq b c)
)
)
(setq m (1+ m))
)
(setq l (1+ l))
(setq m (1+ l))
)
(setq a (nth 0 all))
(setq b (nth (1- n) all))
(setq detay (/ (- (nth 2 (assoc '10 a)) (nth 2 (assoc '10 b))) (1- n) ) )
(setq x0 (nth 1 (assoc '10 a)))
(setq y0 (nth 2 (assoc '10 a)))
(setq m 0)
(while (< m n)
(setq b (nth m all))
(setq x (nth 1 (assoc '10 b)))
(setq y (- y0 (* m detay)))
(setq z (nth 3 (assoc '10 b)))
(setq xyz_new (list '10 x0 y z))
(setq b (subst (cons '72 0) (assoc '72 b) b))
(setq b (subst (cons '73 0) (assoc '73 b) b))
(setq b (subst xyz_new (assoc '10 b) b ) )
(entmod b)
(setq m (1+ m))
)
)

 楼主| 发表于 2006-10-10 14:49:00 | 显示全部楼层

谢谢。经试用程序有对齐功能,但是没有调整行距的功能。希望增加自定义行距的功能。

本帖子中包含更多资源

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

x
发表于 2006-10-10 21:24:00 | 显示全部楼层
你把文本第一行和最后一行的位置确定后,程序会根据这两个位置平均分布行距的。
 楼主| 发表于 2006-10-12 08:18:00 | 显示全部楼层
由于不知道行距是多少,不能做到所有图纸中文字间距的统一,所以要自定义行距。
 楼主| 发表于 2006-10-13 07:56:00 | 显示全部楼层

对楼上的程序进行了小改动,达到了要求。

(defun c:dqwb ()
(setq a (ssget (list (cons 0 "text"))))
(setq n (sslength a))
(setq all nil)
(setq m 0)
(while (< m n)
(setq all (append all (list (entget (ssname a m)))))
(setq m (1+ m))
)

(setq l 0);;按y坐标降序排列
(setq m 1)
(while (< l n)
(setq b (nth l all))
(while (< m n)
(setq c (nth m all))
(if (> (nth 2 (assoc '10 c)) (nth 2 (assoc '10 b)))
(progn
(setq all (subst 'aa (nth l all) all ) )
(setq all (subst 'bb (nth m all) all ) )
(setq all (subst c 'aa all ) )
(setq all (subst b 'bb all ) )
(setq b c)
)
)
(setq m (1+ m))
)
(setq l (1+ l))
(setq m (1+ l))
)

(setq val (getreal "\n行距:"))
(setq p (getpoint "\n首行的插入点:"))
(setq x0 (car p))
(setq y0 (cadr p))

(setq m 0)
(while (< m n)
(setq b (nth m all))
(setq y (- y0 (* m val)))
(setq z (nth 3 (assoc '10 b)))
(setq xyz_new (list '10 x0 y z))
(setq b (subst (cons '72 0) (assoc '72 b) b))
(setq b (subst (cons '73 0) (assoc '73 b) b))
(setq b (subst xyz_new (assoc '10 b) b ) )
(entmod b)
(setq m (1+ m))
)
)
(princ "\n===对齐单行文本,自定义行距程序成功加载!命令行以dqwb启动!")

发表于 2006-10-15 13:50:00 | 显示全部楼层
好人真多啊!!
发表于 2006-10-21 22:34:00 | 显示全部楼层
  1. ((defun lconerr (s)
  2.   (if (/= s "Function cancelled")
  3.     (princ (strcat "\nError: " s))
  4.   ) ;_ end of if
  5.   (setq text nil)
  6.   (setq *error* olderr)
  7.   (princ)
  8. ) ;_ end of defun
  9. (defun getsel ()
  10.   (setq sel nil)
  11.   (princ "\n请选择要对齐的文字:")
  12.   (setq sel (ssget '((0 . "TEXT"))))
  13. ) ;_ end of defun
  14. (defun C:TA (/ sel e dx dy el de num n x y ty inf olderr ab ac dc db)
  15.                                         ;
  16.   (setq olderr  *error*
  17.         *error* lconerr
  18.   ) ;_ end of setq
  19.   (initget 128 "M B T L R")
  20.   (setq
  21.     key (getkword
  22.           "\nM左右中对齐/B底对齐/T顶对齐/R右对齐/<L左对齐> "
  23.         ) ;_ end of getkword
  24.   ) ;_ end of setq
  25.   (if (/= key nil)
  26.     (setq key (strcase key))
  27.   ) ;_ end of if
  28. ;;;选择需要对齐的文字
  29.   (getsel)
  30.   (setq MuBiaoDian (getpoint "\n点取对齐点:"))
  31. ;;;得到的点是当前坐标系的点
  32.   (setq sslen (sslength sel))
  33.   (setq test 0)
  34.   (while (< test sslen)
  35.     (setq TxTEnt (ssname sel test))
  36.     (setq TxtD (entget TxtEnt))
  37.     (setq GC72 (cdr (assoc 72 TxtD)))
  38.     (setq GC73 (cdr (assoc 73 TxtD)))
  39.     (if (and (= GC72 0) (= Gc73 0))
  40.       (progn
  41.         (setq InsP (cdr (assoc 10 TxtD))) ;世界坐标系
  42.       ) ;_ end of progn
  43.       (progn
  44.         (setq InsP (cdr (assoc 11 TxtD))) ;世界坐标系
  45.       ) ;_ end of progn
  46.     ) ;_ end of if
  47.     (setq UInsP (Trans InsP 0 1))       ;转化为当前坐系
  48.     (if (or (= key "L")
  49.             (= key nil)
  50.         ) ;_ end of or
  51.       (progn
  52.         (ChGC TxTEnt 72 0 ;|nil nil|; 73 0)
  53.         (ChC TxtEnt UInsp MuBiaoDian 10 "X")
  54.       ) ;_ end of progn
  55.       (if (= key "R")
  56.         (progn
  57.           (ChGC TxTEnt 72 2 nil nil ;|73 0|;)
  58.           (ChC TxtEnt UInsp MuBiaoDian 11 "X")
  59.         ) ;_ end of progn
  60.         (if (= key "T")
  61.           (progn
  62.             (ChGC TxTEnt ;| 72 1 |; nil nil 73 3)
  63.             (ChC TxtEnt UInsp MuBiaoDian 11 "Y")
  64.           ) ;_ end of progn
  65.           (if (= key "B")
  66.             (progn
  67.               (ChGC TxTEnt ;| 72 1|; nil nil 73 1)
  68.               (ChC TxtEnt UInsp MuBiaoDian 11 "Y")
  69.             ) ;_ end of progn
  70.             (if (= key "M")
  71.               (progn
  72.                 (ChGC TxTEnt 72 1 nil nil ;|73 0|;)
  73.                 (ChC TxtEnt UInsp MuBiaoDian 11 "X")
  74.               ) ;_ end of progn
  75.             ) ;_ end of if
  76.           ) ;_ end of if
  77.         ) ;_ end of if
  78.       ) ;_ end of if
  79.     ) ;_ end of if
  80.     (setq test (1+ test))
  81.   ) ;_ end of while
  82.   (setq *error* olderr)
  83.   (gc)
  84.   (princ)
  85. ) ;_ end of defun
  86. (defun ChGC (TxtEnt GroCod_1 GroCodVal_1 GroCod_2 GroCodVal_2 /)
  87.   (setq ED (entget TxtEnt))
  88.   (if (/= GroCod_1 nil)
  89.     (setq ED (subst (cons GroCod_1 GroCodVal_1) (assoc GroCod_1 ED) ED))
  90.   ) ;_ end of if
  91.   (if (/= GroCod_2 nil)
  92.     (setq ED (subst (cons GroCod_2 GroCodVal_2) (assoc GroCod_2 ED) ED))
  93.   ) ;_ end of if
  94.   (entmod ED)
  95.   (entupd TxtEnt)
  96. ) ;_ end of defun
  97. (defun ChC (TxTEnt UInp MuBDn GroCod XY /)
  98.   (if (= XY "Y")
  99.     (setq WInp (trans (list (car UInp)
  100.                             (cadr MuBDn)
  101.                             (caddr UInp)
  102.                       ) ;_ end of list
  103.                       1
  104.                       0
  105.                ) ;_ end of trans
  106.     ) ;_ end of setq
  107.     (if (= XY "X")
  108.       (setq WInp (trans (list (car MuBDn)
  109.                               (cadr UInp)
  110.                               (caddr UInp)
  111.                         ) ;_ end of list
  112.                         1
  113.                         0
  114.                  ) ;_ end of trans
  115.       ) ;_ end of setq
  116.     ) ;_ end of if
  117.   ) ;_ end of setq
  118.   (setq NInp (list GroCod
  119.                    (car WInp)
  120.                    (cadr WInp)
  121.                    (caddr WInp)
  122.              ) ;_ end of setq
  123.   ) ;_ end of setq
  124.   (setq TtD (entget TxtEnt))
  125.   (setq TtD (subst NInp (assoc GroCod TTD) TTD))
  126.   (entmod TtD)
  127.   (entupd TxTEnt)
  128. ) ;_ end of defun
发表于 2006-10-22 08:07:00 | 显示全部楼层

怎么会这样

 

命令: _appload 已成功加载   lconerr.lsp。
命令: ; 错误: 输入的列表有缺陷

命令: ta TABLET
定点设备不能用作数字化仪。

发表于 2011-11-27 09:40:48 | 显示全部楼层
本帖最后由 GamIng 于 2011-11-27 09:41 编辑
david96007 发表于 2006-10-21 22:34


8楼程序,如果文字有旋转(角度)程序执行结果是错误的。旋转90°时,文字是叠在一块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 14:24 , Processed in 0.202466 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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