本帖最后由 NetBee 于 2013-1-2 15:48 编辑
 - ;;;实现识别递增编号 By cjh_201-12-08
- ;;;新增选择模式,增强通用性 2012-12-23
- ;;;修改 by netbee of www.mjtd.com 2013-1-2
- (defun c:HBC_BH (/ gr text EP1 zm ss zh lay sty col len i bJ val ws qz p2 vzo strval bhms e1)
- (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))
- )
- (setq bJ T)
- (while bJ
- (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))
-
- (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)(setq e1(entlast)))
- (if col
- (progn (entmake (list '(0 . "TEXT") (cons 10 p2) zh lay col sty (cons 1 strval)))
- (setq text (entget (setq e1(entlast))))
- )
- (progn (entmake (list '(0 . "TEXT") (cons 10 p2) zh lay sty (cons 1 strval)))
- (setq text (entget (setq e1(entlast))))
- )
- ) ;首次生成图素
- )
- )
- ((or (= 3 (car gr)) (= 25 (car gr)))
- (setq i nil text nil e1 nil)
- )
- ((and (= 2 (car gr)) (or (= (cadr gr) 13) (= (cadr gr) 32))) (setq bJ nil i nil text nil))
- )
- ) ;逐次连续编号,esc退出
- )
- (if e1(entdel e1))
- (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)
- )
|