明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1074|回复: 0

版主帮帮忙,为什么老丢新增的行文字

[复制链接]
发表于 2009-2-6 22:28 | 显示全部楼层 |阅读模式

;;------------------------------------------------------------------
;;; Edit_Exterior  可将大段单行文字重新定义行高、行距
(defun errexit (s)
 (princ s)
 (restore)
)

(defun undox ()
 (vl-file-delete filename)
 (command "._undo" "e")
 (setvar "cmdecho" oldcmdecho)
 (setvar "osmode" os_old)
 (setq *error* olderr)
 (princ)
)

(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)
 ;;保存系统变量,程序初始化
 (setq
  olderr  *error*
  restore undox
  *error* errexit
  oldcmdecho (getvar "cmdecho")
  os_old (getvar "osmode")
 )
 (setvar "cmdecho" 0)
 (command "._undo" "be")
 ;;选择文字

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

 

"觉得好,就打赏"
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 18:33 , Processed in 0.314758 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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