版主帮帮忙,为什么老丢新增的行文字
<p>;;------------------------------------------------------------------<br/>;;; Edit_Exterior 可将大段单行文字重新定义行高、行距<br/>(defun errexit (s) <br/> (princ s)<br/> (restore)<br/>) </p><p>(defun undox ()<br/> (vl-file-delete filename)<br/> (command "._undo" "e") <br/> (setvar "cmdecho" oldcmdecho) <br/> (setvar "osmode" os_old)<br/> (setq *error* olderr) <br/> (princ) <br/>)</p><p>(defun c:Edit_Exterior ( / boolean code e1 e2 editor ent_txt file height_last index index_select index_sort index_ssour index_txt insert_last list_last list_txt pi sslist sslist_sort ssnum ssour txt txt_new width_last)<br/> ;;保存系统变量,程序初始化<br/> (setq<br/> olderr *error* <br/> restore undox<br/> *error* errexit<br/> oldcmdecho (getvar "cmdecho")<br/> os_old (getvar "osmode")<br/> )<br/> (setvar "cmdecho" 0)<br/> (command "._undo" "be")<br/> ;;选择文字</p><p> (setq<br/> editor "notepad" ;"D:\\Program Files\\EmEditor\\emeditor.exe" ;"C:\\Program Files\\UltraEdit\\Uedit32.exe";<br/> index_select 2<br/> sslist nil<br/> sslist_sort nil<br/> )<br/> (princ "\n请选择第 1 组文字:")<br/> (while (setq ssour (ssget (list (cons 0 "TEXT"))))<br/> (princ (strcat "\n请选择第" (itoa index_select) "组文字<回车结束选择>:"))<br/> (setq index_ssour 0)<br/> (while (< index_ssour (sslength ssour));;将文字信息存入列表sslist<br/> (setq<br/> sslist (append sslist (list (entget (ssname ssour index_ssour))))<br/> index_ssour (1+ index_ssour)<br/> )<br/> );end while<br/> (setq;;按文字原来排版方式设置文字显示顺序,调整顺序后存入sslist_sort<br/> sslist_sort<br/> (append<br/> sslist_sort<br/> (vl-sort sslist<br/> (function<br/> (lambda (e1 e2)<br/> (if (> (caddr (assoc 10 e1)) (caddr (assoc 10 e2)))<br/> (> (caddr (assoc 10 e1)) (caddr (assoc 10 e2)))<br/> (and (> (caddr (assoc 10 e1)) (- (caddr (assoc 10 e2)) (* 1 (cdr (assoc 40 e1))))) (< (cadr (assoc 10 e1)) (cadr (assoc 10 e2))))<br/> )<br/> )<br/> )<br/> );end vl-sort<br/> );end append<br/> sslist nil<br/> index_select (1+ index_select)<br/> )<br/> )<br/> ;;设置用于编辑的临时文件file<br/> (setq<br/> filename (strcat (vl-filename-mktemp) ".txt");"edit.txt"<br/> file (open filename "w")<br/> index 0<br/> boolean t<br/> ssnum (length sslist_sort)<br/> )<br/> ;;将选中文字行内容写入临时文件file,然后用文字编辑器打开以供用户编辑<br/> (while (< index ssnum)<br/> (setq txt (cdr (assoc 1 (nth index sslist_sort))))<br/> (write-line txt file)<br/> (setq index (1+ index))<br/> )<br/> (close file)<br/> (princ "\n编辑完成文字编辑器中的单行文本后,请单击鼠标左键或右键继续:")<br/> (startapp editor filename)<br/> ;;判断用户是否结束文件编辑并返回AutoCAD,单击鼠标以结束文件编辑<br/> (while boolean<br/> (setq code (car (grread t 15 0)))<br/> (if (or (= code 3) (= code 11))<br/> (setq boolean nil)<br/> ) <br/> )<br/> ;;打开编辑好的临时文件并读入其内容,写入list_txt,并删除临时文件<br/> (setq<br/> file (open filename "r")<br/> list_txt nil<br/> )<br/> (while (setq txt (read-line file))<br/> (setq list_txt (append list_txt (list txt)))<br/> )<br/> (close file)<br/> (vl-file-delete filename)<br/> ;;将编辑好的原有文字行写回AutoCAD数据库,并新建多出的文字行<br/> (setq<br/> index_txt 0<br/> index_sort 0<br/> )<br/> (repeat (length list_txt)<br/> (if (or (>= index_sort ssnum) (= (substr (nth index_txt list_txt) 1 2) "/n"))<br/> (progn<br/> (if (= (substr (nth index_txt list_txt) 1 2) "/n");判断是否是插入的文字<br/> (setq txt_new (substr (nth index_txt list_txt) 3));将/n开头的文字去掉/n<br/> (setq txt_new (nth index_txt list_txt))<br/> )<br/> (setq<br/> insert_last (polar insert_last (* 1.5 pi) (* 1.5 height_last))<br/> list_last (list (cons 0 "TEXT") (cons 1 txt_new) (cons 7 (getvar "textstyle")) (cons 10 insert_last) (cons 72 0) (cons 73 0) (cons 62 256) (cons 40 height_last) (cons 41 width_last) (cons 50 0) (cons 8 (getvar "clayer")))<br/> )<br/> (entmake list_last)<br/> )<br/> (progn;将原有文字行更新并获取新增文字的位置、高度、宽度<br/> (setq<br/> ent_txt (nth index_sort sslist_sort)<br/> ent_txt (subst (cons 1 (nth index_txt list_txt)) (assoc 1 ent_txt) ent_txt)<br/> insert_last (cdr (assoc 10 (nth index_sort sslist_sort)))<br/> height_last (cdr (assoc 40 (nth index_sort sslist_sort)))<br/> width_last (cdr (assoc 41 (nth index_sort sslist_sort)))<br/> index_sort (1+ index_sort)<br/> )<br/> (entmod ent_txt)<br/> )<br/> )<br/> (setq index_txt (1+ index_txt))<br/> )<br/> (while (<= index_sort ssnum);将原有最后并被删除的文字删除掉<br/> (entdel (cdr (assoc -1 (nth index_sort sslist_sort))))<br/> (setq index_sort (1+ index_sort))<br/> )<br/> (restore);;恢复系统变量<br/> (princ) <br/>);;;endfunction</p><p> <br/></p>
页:
[1]