明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3253|回复: 20

grread函数左键失效问题?

  [复制链接]
发表于 2013-1-2 13:01 | 显示全部楼层 |阅读模式
本帖最后由 aaacjh 于 2013-1-2 13:08 编辑

请前辈留步:
以下是个【“末尾带数字”单行文字】递增编号程序,在新增动态函数grread时,出现了左键失效情况。请前辈指点![attach]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)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-1-2 15:01 | 显示全部楼层
本帖最后由 NetBee 于 2013-1-2 15:25 编辑

这个死循环你准备什么时候跳出?
  1. (while T
  2.             (setq vzo "")
  3.             (setq val         (+ val 1)
  4.                      strval (rtos val)
  5.                      szo         (- ws (strlen strval))
  6.             )
  7.            ;;..................................
发表于 2013-1-2 15:44 | 显示全部楼层
本帖最后由 NetBee 于 2013-1-2 15:48 编辑

  1. ;;;实现识别递增编号 By cjh_201-12-08
  2. ;;;新增选择模式,增强通用性 2012-12-23
  3. ;;;修改 by netbee of www.mjtd.com 2013-1-2

  4. (defun c:HBC_BH        (/ gr text EP1 zm ss zh lay sty col len i bJ val ws qz p2 vzo strval bhms e1)
  5.   (print "<HBC_BH(智能编号)>功能已开启")
  6.   (print "<模式1:尾数数字位&&模式2:末位数字位")
  7.   (setq os (getvar "osmode"))
  8.   (setq oldlayer (getvar "CLAYER"))
  9.   (setq temperr *errror*)
  10.   (setq *error* trap1)
  11.   (command "undo" "m")
  12.   (setq os (getvar "osmode"))
  13.   (setq bhms (getint "\n输入编号模式<模式1(1)/模式2(2)>(默认1):"))
  14.   (setvar "CMDECHO" 0)
  15.   (setvar "osmode" 0)
  16.   (setq EP1 (entsel "\n选取源编号:"))
  17.   (while (= EP1 nil) (setq EP1 (entsel "\n选取源编号:")))
  18.   (setq zm (entget (car EP1)))                ;(setvar "osmode" 15359)
  19.   (setq        ss  (cdr (assoc 1 zm))
  20.         zh  (assoc 40 zm)
  21.         lay (assoc 8 zm)
  22.         sty (assoc 7 zm)
  23.   )
  24.   (if (assoc 62 zm)
  25.     (setq col (assoc 62 zm))
  26.   )                                        ;提取图层,颜色,字高,文字样式等信息
  27.   (setq len (strlen ss))
  28.   (setq i (- len 1))
  29.   (setq val (substr ss len 1))
  30.   (if (and (/= val "0") (= (atoi val) 0)) ;非数字,成立
  31.     (progn (alert "提示:编号末位非数字位!请在编号末位添加数字。") (exit))
  32.   )
  33.   (if (= bhms 2)
  34.     (setq val (atoi val)
  35.           qz  (substr ss 1 i)
  36.           ws  1
  37.     )                                        ;后缀,前缀
  38.     (while (< i len) (HBC_BH-01))
  39.   )
  40.   (setq bJ T)
  41.   (while bJ
  42.     (setq vzo "")
  43.     (setq val         (+ val 1)
  44.           strval (rtos val)
  45.           szo         (- ws (strlen strval))
  46.     )
  47.     (repeat szo (setq vzo (strcat "0" vzo))) ;补足前置零,保持与源编号"位数"一致
  48.     (setq strval (strcat vzo strval))
  49.     (setq strval (strcat qz strval))
  50.     (setq i T)
  51.     (while i
  52.       (setq gr (grread t 15))               
  53.                                        
  54.       (cond ((= 5 (car gr))
  55.              (setq p2 (trans (cadr gr) 1 0))
  56.              (if text                        ;若直线已生成,采取替换模式
  57.                (progn (setq text (subst (cons 10 p2) (assoc 10 text) text)) (entmod text)(setq e1(entlast)))
  58.                (if col
  59.                  (progn        (entmake (list '(0 . "TEXT") (cons 10 p2) zh lay col sty (cons 1 strval)))
  60.                         (setq text (entget (setq e1(entlast))))
  61.                  )
  62.                  (progn        (entmake (list '(0 . "TEXT") (cons 10 p2) zh lay sty (cons 1 strval)))
  63.                         (setq text (entget (setq e1(entlast))))
  64.                  )
  65.                )                        ;首次生成图素
  66.              )
  67.             )
  68.             ((or (= 3 (car gr)) (= 25 (car gr)))
  69.              (setq i nil text nil e1 nil)
  70.             )
  71.             ((and (= 2 (car gr)) (or (= (cadr gr) 13) (= (cadr gr) 32))) (setq bJ nil i nil text nil))
  72.       )
  73.     )                                        ;逐次连续编号,esc退出
  74. )
  75.   (if e1(entdel e1))
  76.   (setvar "CMDECHO" 1)
  77.   (setvar "CLAYER" oldlayer)
  78.   (setvar "osmode" os)
  79.   (princ)
  80. )

  81. ;;;子函数1
  82. (defun HBC_BH-01 ()
  83.   (if (and (/= (substr ss i 1) "0") (= (atoi (substr ss i 1)) 0)) ;判断是否为数字字符
  84.     (progn (setq val (atoi (substr ss (+ i 1) (- len i)))) ;提取尾数转整型,即可去除前置零
  85.            (setq ws (- len i))                ;尾数位数
  86.            (setq qz (substr ss 1 i))        ;提取前缀
  87.            (setq i (+ i len))
  88.     )
  89.     (setq i (- i 1))
  90.   )
  91.   (princ)
  92. )
发表于 2013-1-2 16:54 | 显示全部楼层
回复,看看程序!谢谢!
发表于 2013-1-4 10:44 | 显示全部楼层
不懂,看一看
 楼主| 发表于 2013-1-12 18:16 | 显示全部楼层
NetBee 发表于 2013-1-2 15:44
**** 本内容被作者隐藏 ****

谢谢兄台相助! 还有个问题就是,最后按esc退出时,如何让程序删除最后那个图素文字,现在程序虽然有entdel (entlast).但并没删去最后图素.
例外:请教兄台,grread=15 ,2 ,3这些数字有哪些具体含义,哪里可以查到,请指点!
发表于 2013-1-12 19:54 | 显示全部楼层
学习学习!
发表于 2013-2-2 18:59 | 显示全部楼层
谢谢分享,学习一下
发表于 2013-2-2 23:55 | 显示全部楼层
回复学习一下
发表于 2013-2-3 16:23 | 显示全部楼层
好帖子,帮忙测试一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 11:47 , Processed in 0.641551 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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