ld_117 发表于 2014-7-21 14:26:39

根据文字内容和颜色删除选中文字的函数,求高手指点

本帖最后由 ld_117 于 2014-7-21 15:52 编辑

第一次写lisp程序,函数功能很简单,试了好久功能终于实现了,但有些bug。执行完函数后删除了很多文字想要取消前一个操作,得一直undo才行,怎样才能一次undo就恢复要执行函数前的状态呢??
(defun C:zfpj (/ m all i t1 t2 t3 t4 t5 t6 t7 c1 r) (setq m:err *error* *error* *merr*)
(setq t1 "0 xAUy    ")
(setq t2 "   xAUy0")
(setq t3 "0 xAUy0")
(setq t4 "0 xADy    ")
(setq t5 "   xADy0")
(setq t6 "0 xADy0")
(setq t7 "   xAUy    ")
(setq t8 "   xADy    ")
(setq c1 253)
(setq i 0)
(prompt "选择图形")
(setq all (ssget '((0 . "TEXT,MTEXT"))))
(while (< i (sslength all))
(setq r 1)
(setq ss (ssname all i))
(setq i (1+ i))         
(setq alldata (entget ss))
(setq tcontent (cdr (assoc 1 alldata)))
(setq tcolor (cdr (assoc 62 alldata)))
(if (= tcolor c1) (setq r 2))
(if (= tcontent t1) (setq r 2))
(if (= tcontent t2) (setq r 2))
(if (= tcontent t3) (setq r 2))
(if (= tcontent t4) (setq r 2))
(if (= tcontent t5) (setq r 2))
(if (= tcontent t6) (setq r 2))
(if (= tcontent t7) (setq r 2))
(if (= tcontent t8) (setq r 2))
(if (= r 2) (command "erase" ss ""))
)
(command "UNDO" "E")
(princ))




ld_117 发表于 2014-7-21 16:27:53

自己解决了。。。

ZZXXQQ 发表于 2014-7-21 20:38:18

压缩一下(defun C:zfpj (/ m all i t1 t2 t3 t4 t5 t6 t7 c1 r)
(setq m:err *error* *error* *merr*)
(setq tlst '("0 xAUy    " "   xAUy0" "0 xAUy0" "0 xADy    " "   xADy0"
            "0 xADy0" "   xAUy    " "   xADy    "))
(setq c1 253)
(prompt "选择图形")
(if (setq all (ssget '((0 . "*TEXT")))) (progn
(repeat (setq i (sslength all))
   (setq ss (ssname all (setq i (1- i))))      
   (setq alldata (entget ss))
   (setq tcontent (cdr(assoc 1 alldata)))
   (setq tcolor (cdr(assoc 62 alldata)))
   (if (or (= tccolor c1) (member tcontent tlst)) (entdel ss))
)
))
(princ)
)

ld_117 发表于 2014-7-23 15:34:27

ZZXXQQ 发表于 2014-7-21 20:38 static/image/common/back.gif
压缩一下

多谢,最近燃起了研究这个的热情,我会坚持的
页: [1]
查看完整版本: 根据文字内容和颜色删除选中文字的函数,求高手指点