最初由 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)
 
  
  |