aaacjh 发表于 2013-1-2 13:01:48

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:01:12

本帖最后由 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:44:20

本帖最后由 NetBee 于 2013-1-2 15:48 编辑

**** Hidden Message *****

USER2128 发表于 2013-1-2 16:54:19

回复,看看程序!谢谢!

hao3ren 发表于 2013-1-4 10:44:23

不懂,看一看

aaacjh 发表于 2013-1-12 18:16:06

NetBee 发表于 2013-1-2 15:44 static/image/common/back.gif
**** 本内容被作者隐藏 ****

谢谢兄台相助! 还有个问题就是,最后按esc退出时,如何让程序删除最后那个图素文字,现在程序虽然有entdel (entlast).但并没删去最后图素.
例外:请教兄台,grread=15 ,2 ,3这些数字有哪些具体含义,哪里可以查到,请指点!

smartstar 发表于 2013-1-12 19:54:30

学习学习!

ddisddis 发表于 2013-2-2 18:59:21

谢谢分享,学习一下

xsso 发表于 2013-2-2 23:55:06

回复学习一下

xiaxiang 发表于 2013-2-3 16:23:56

好帖子,帮忙测试一下
页: [1] 2 3
查看完整版本: grread函数左键失效问题?