合并文字码源
(defun c:HBWZ (/ lst)(setq oldaun (getvar "aunits"))
(setvar "aunits" 3)
(setvar "osmode" 15359)
(setvar "cmdecho" 0)
(command "undo" "be")
(setq ss (ssget '((0 . "MTEXT,TEXT"))))
(setvar "osmode" 0)
(initget "E S A")
(if (not (setq kword
(getkword
"\n在合并文字之间加:[换行(E)/空格(S)/直接合并(A)]<E>"
)
)
)
(setq kword "E")
)
(setvar "osmode" 0)
(setq lst '())
(while (> (sslength ss) 0)
(setq entnam (ssname ss 0)
entdat (entget entnam)
)
(setq pt(cdr (assoc 10 entdat)) ;读取文字的插入点坐标
txt (cdr (assoc 1 entdat)) ;读取文字内容
zg(cdr (assoc 40 entdat)) ;读取文字的字高
lst (cons (list pt txt zg) lst) ;将点坐标、内容、字高组成表
ss(ssdel entnam ss) ;选择集中删除当前的文字对象
)
(entdel entnam) ;删除文字对象
)
(setq
lst
(vl-sort lst
(function
(lambda (e1 e2)
(if (equal (cadr (car e1)) (cadr (car e2)) 1e-4)
(> (car (car e1)) (car (car e2)))
(< (cadr (car e1)) (cadr (car e2)))
)
)
)
)
)
(setq str "")
(cond ((= kword "S")
(foreach e lst
(setq str (strcat (cadr e) " " str))
)
)
((= kword "E")
(foreach e lst
(setq str (strcat (cadr e) "\n" str))
)
)
((= kword "A")
(foreach e lst
(setq str (strcat (cadr e) str))
)
)
)
(command "MTEXT" pt "H" zg "W" 0 str "")
(princ)
(setvar "aunits" oldaun)
(command "undo" "e")
(setvar "osmode" 15359)
(princ)
) 优化一下,合并文字如果是换行用多行文字,其它的用单行文字,同时字体改为原有字体样式,用EntMake组码生成文字。 烟盒迷唇 发表于 2020-7-30 08:56
优化一下,合并文字如果是换行用多行文字,其它的用单行文字,同时字体改为原有字体样式,用EntMake组码生 ...
你好 这个很好用 请问可以再优化一下吗
满足
不同文字样式和字高的若干个文字合并时
增加指定标准选项,鼠标点选或者框选某个指定的文字(也是待合并文字)做为合并后的标准样式
标准样式包括字高、宽度因子、文字左对齐或右对齐都保持一样,
默认使用做为标准文字所在的位置做为合并后的文字位置,也可以指定一个新位置;
烟盒迷唇 发表于 2020-7-30 08:56
优化一下,合并文字如果是换行用多行文字,其它的用单行文字,同时字体改为原有字体样式,用EntMake组码生 ...
稍微修改了一下
在中望CAD中合并后字体高修改为2.5,
现在合并后文字合并字高保持不变,以最大的字高为准
建议优化下操作体验,没有选中文字就直接终止程序,不要继续让用户选关键字了{:1_1:} Thanks for sharing 收藏,谢谢楼主分享 合并后都成多行文字了 这个不错,好用 谢谢楼主分享!! 谢谢楼主分享,,已经收藏了,以后看能不能用的着 烟盒迷唇 发表于 2020-7-30 08:56
优化一下,合并文字如果是换行用多行文字,其它的用单行文字,同时字体改为原有字体样式,用EntMake组码生 ...
您好,优化后的会出现合并文字——换行——字体会放大,并且重复操作所合并的字体会出现在同一位置