最初由 marting 发布
[B]我们同事的图经常是文字都是单个的,能否提供个“多行智能”的字符串连接程序?
那样处理说明就太惬意了,谢谢! [/B]
好了。
- ;|
- 命令:txt_join
-
- 功能:窗选字体自动按由上至下,由左至右的顺序将字串合并
- 程序配合XDRX_API build 20630+版本使用,朋友们可以把这个LISP拷贝到“晓东工具箱”的安装的
- LISP目录,自己加入到菜单里面就可以非常方便的使用了。
- 关于程序的建议请到“晓东CAD空间-编程申请”论坛
- [url]http://www.xdcad.net/forum留言[/url]
-
- |;
- (defun c:txt_join (/ cutz1 ll l11 l1 pt_min mm l0 ss tb js strb e str
- str0 pt p1
- )
- (xdrx_begin)
- (xdrx_ucson)
- (defun cutz1 (p)
- (list (car p) (cadr p))
- )
- (princ "\n请选取要编辑的文字 <退出>: ")
- (setq ss (ssget '((0 . "TEXT"))))
- (xdrx_setsstodb ss 0)
- (setq tb nil
- strb nil
- mm (* 3e-4 (getvar "viewsize"))
- pt_min (getvar "extmin")
- )
- ;;构造表(((x1 y1) "string1" "实体名1") ((x2 y2) "string2" "实体名2") ......)
- (while (setq e (xdrx_getentdata 0))
- (setq tb (append (list (list (cutz1 (xdrx_getentdxf 10))
- (xdrx_getentdxf 1)
- e
- )
- )
- tb
- )
- )
- )
- ;;构造ll 按y坐标((距离1 (x1 y1) (x2 y2)...)
- ;; (距离2 (x1 y1) (x2 y2) ....)
- (foreach ll (mapcar 'car tb)
- (setq ln (abs (xdrx_p2ldist ll pt_min (polar pt_min 0 1.0)))
- l2 l1
- )
- (while (and (setq ll1 (car l2))
- (not (equal ln (car ll1) mm))
- )
- (setq l2 (cdr l2))
- )
- ;;将距离值近似的线段归入同一个子表内, 否则另开一个新的子表。
- (setq l1 (if ll1
- (subst (append ll1 (list ll)) ll1 l1)
- (cons (list ln ll) l1)
- )
- )
- )
- ;;y坐标降序
- (setq l11 (mapcar 'cdr (reverse (apply 'xdrx_rlistsort2 l1))))
- ;;ll x升序
- (while (setq l0 (car l11))
- (setq ll (append ll (apply 'xdrx_rlistsort2 l0)))
- (setq l11 (cdr l11))
- )
- ;;取出第一个字串
- (setq e (last (assoc (car ll) tb)))
- (xdrx_setenttodb e)
- (setq ss (ssdel e ss)
- )
- ;;构造字串表("string" "string1" ......)
- (setq js 0)
- (repeat (length ll)
- (setq str (cadr (assoc (nth js ll) tb)))
- (setq strb (append (list str) strb))
- (setq js (1+ js))
- )
- (setq strb (mapcar 'xdrx_string_trimleft strb))
- (setq strb (mapcar 'xdrx_string_trimright strb))
- (command "erase" ss "")
- (setq str0 (apply 'strcat (reverse strb))) ;合并字串
- (xdrx_modent 1 str0 10 (car ll))
- (setq ss (ssadd e ss))
- (setq pt (append (car ll) '(0)))
- (if (setq
- p1 (xdrx_dragssmove "\n请移动点<不移动>: " ss pt)
- )
- (command ".move" ss "" pt p1)
- )
- (xdrx_ucsoff)
- (xdrx_end)
- (princ)
- )
- (princ)
- (princ "\n字串合并, 命令C:txt_join.")
- (princ)
|