本帖最后由 llsheng_73 于 2013-12-9 04:55 编辑
如果都象图上那样由前辍加数字并且都是TEXT就很好办了
 - (defun c:ckbh(/ sstoes enscen s e n c)
- (defun SstoEs(ss / a en lst)
- (if ss(progn(setq a -1)
- (while(setq en(ssname ss(setq a(1+ a))))(setq lst(cons en lst)))))
- lst)
- (defun enscen(ens / ma mi ll ur);图元名表包围盒
- (mapcar'(lambda(x)(vla-getboundingbox (vlax-ename->vla-object x) 'll 'ur)
- (setq ma (cons (vlax-safearray->list ll) ma)
- mi (cons (vlax-safearray->list ur) mi)))ens)
- (setq ll(mapcar'(lambda(a b)(apply'mapcar(cons a b)))'(min max)(list ma mi))
- ll(list(/(+(caar ll)(caadr ll))2)(/(+(cadar ll)(cadadr ll))2)0)))
- (setq c(getstring"编号前辍:"))
- (if(null c)(setq c ""))
- (setq n(1+(strlen c))
- s(vl-sort(mapcar'(lambda(x)(atoi(substr(cdr(assoc 1(entget x)))n)))(sstoes(ssget"X"(list(cons 0 "TEXT")(cons 1(strcat c"*"))))))'<))
- (if s
- (progn(setq n (car s))
- (repeat(-(last s)(car s))
- (if(not(member(setq n(1+ n))s))(setq e(cons(strcat c(itoa n))e))))
- (setq n(strcat c(itoa(last s)))
- s(sstoes(ssget"X"(list(cons 0 "TEXT")(cons 1 n)))))
- (setq c(getvar"CMDECHO"))
- (setvar "CMDECHO" 0)(command"zoom""c"(enscen s)"")(setvar "CMDECHO" c)
- (setq c (getvar "Grips"))
- (setvar "Grips" 0)(sssetfirst nil(ssadd(car s)(ssadd)))(setvar "Grips" c)
- (list n e)))
- )
程序要求你先输入一个前辍,程序结束返回一个表,第一个元素是当前最大编号,第二个元素是所漏掉的号的表,
将最大号亮显并且屏幕移到以它为中心 详见附图
至于对这个返回结果具体要怎么处理,只能你自己看着办了哟
|