grread函数左键失效问题?
本帖最后由 aaacjh 于 2013-1-2 13:08 编辑请前辈留步:
以下是个【“末尾带数字”单行文字】递增编号程序,在新增动态函数grread时,出现了左键失效情况。请前辈指点!72785
;;;实现识别递增编号 By cjh_201-12-08
;;;新增选择模式,增强通用性 2012-12-23
(defun c:HBC_BH(/ gr text EP1 zm ss zh lay sty col len i val ws qz p2 vzo strval bhms)
(print "<HBC_BH(智能编号)>功能已开启")
(print "<模式1:尾数数字位&&模式2:末位数字位")
(setq os(getvar "osmode"))
(setq oldlayer(getvar "CLAYER"))
(setq temperr *errror*)
(setq *error* trap1)
(command "undo" "m")
(setq os(getvar "osmode"))
(setq bhms(getint"\n输入编号模式<模式1(1)/模式2(2)>(默认1):"))
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(setq EP1(entsel"\n选取源编号:"))
(while (= EP1 nil)
(setq EP1 (entsel"\n选取源编号:"))
)
(setq zm(entget(car EP1)))
;(setvar "osmode" 15359)
(setq ss(cdr(assoc 1 zm)) zh(assoc 40 zm)
lay(assoc 8 zm) sty(assoc 7 zm)
)
(if (assoc 62 zm)
(setq col(assoc 62 zm))
);提取图层,颜色,字高,文字样式等信息
(setq len(strlen ss))
(setq i(- len 1))
(setq val(substr ss len 1))
(if (and (/= val "0") (= (atoi val) 0));非数字,成立
(progn (alert"提示:编号末位非数字位!请在编号末位添加数字。")(exit))
)
(if (= bhms 2)
(setq val(atoi val) qz(substr ss 1 i) ws 1);后缀,前缀
(while (< i len)
(HBC_BH-01)
)
)
(while T
(setq vzo "")
(setq val(+ val 1) strval(rtos val) szo(- ws (strlen strval)))
(repeat szo
(setq vzo(strcat "0" vzo))
);补足前置零,保持与源编号"位数"一致
(setq strval(strcat vzo strval))
(setq strval(strcat qz strval))
(setq i T)
(while i
(setq gr (grread t 15));获取动态信息,但为何左键按下没有反应?
;(setq gr (GXL-GE-GRREAD '(t 7 2) nil (entlast)));GXL-GE-GRREAD为动态“添加扑捉”函数
(cond
((= 5 (car gr))
(setq p2 (trans (cadr gr) 1 0))
(if text;若直线已生成,采取替换模式
(progn
(setq text(subst (cons 10 p2) (assoc 10 text) text))
(entmod text)
)
(if col
(progn
(entmake(list '(0 . "TEXT") (cons 10 p2) zh lay col sty (cons 1 strval)))
(setq text(entget (entlast)))
)
(progn
(entmake(list '(0 . "TEXT") (cons 10 p2) zh lay sty (cons 1 strval)))
(setq text(entget (entlast)))
)
);首次生成图素
)
)
((or
(= 3 (car gr));左键按下,为何没有执行该语句呢?困惑!
(= 25 (car gr))
(and (= 2 (car gr)) (= (cadr gr) 13))
(and (= 2 (car gr)) (= (cadr gr) 32))
)
(setq i nil)
)
)
);逐次连续编号,esc退出
)
(setvar "CMDECHO" 1)
(setvar "CLAYER" oldlayer)
(setvar "osmode" os)
(princ)
)
;;;子函数1
(defun HBC_BH-01()
(if (and (/= (substr ss i 1) "0") (= (atoi(substr ss i 1)) 0));判断是否为数字字符
(progn
(setq val(atoi(substr ss (+ i 1) (- len i))));提取尾数转整型,即可去除前置零
(setq ws(- len i));尾数位数
(setq qz(substr ss 1 i));提取前缀
(setq i(+ i len))
)
(setq i(- i 1))
)
(princ)
) 本帖最后由 NetBee 于 2013-1-2 15:25 编辑
这个死循环你准备什么时候跳出?(while T
(setq vzo "")
(setq val (+ val 1)
strval (rtos val)
szo (- ws (strlen strval))
)
;;.................................. 本帖最后由 NetBee 于 2013-1-2 15:48 编辑
**** Hidden Message ***** 回复,看看程序!谢谢! 不懂,看一看 NetBee 发表于 2013-1-2 15:44 static/image/common/back.gif
**** 本内容被作者隐藏 ****
谢谢兄台相助! 还有个问题就是,最后按esc退出时,如何让程序删除最后那个图素文字,现在程序虽然有entdel (entlast).但并没删去最后图素.
例外:请教兄台,grread=15 ,2 ,3这些数字有哪些具体含义,哪里可以查到,请指点! 学习学习! 谢谢分享,学习一下 回复学习一下 好帖子,帮忙测试一下