(defun c:gbh( / cmdmode viewctr viewsize sset i j k ssl nsset temp ent number x1 y1 x y h yorn) (defun *error*(s) (exit) ) (setq cmdmode (getvar "cmdecho")) (setvar "cmdecho" 0) (setq viewctr (getvar "viewctr")) (setq viewsize (getvar "viewsize")) (prompt "\n 请从图上选取需要修改的数字: ") (setq sset (ssget)) (if (null sset) (progn (princ "\n Error: Nothing selected!\n") (exit) ) ) ;根据用户指定范围过滤出需要改变的编号,并报告找到多少编号。 (setq i(getint "\n 需要从那个编号开始修改:")) (setq j(getint "\n 修改到那个编号结束:")) (setq k(getint "\n 编号需要增加多少:")) (setq ssl (sslength sset)) (setq nsset (ssadd)) (while (> ssl 0) (setq temp (ssname sset (setq ssl(1- ssl)))) (if (= (cdr (assoc 0 (entget temp))) "TEXT") (progn (setq number (atoi(cdr(assoc 1 (entget temp))))) (if(and (<= i number) (>= j number)) (ssadd temp nsset)) ) ) ) (setq ssl (sslength nsset)) (if (= ssl 0) (progn princ("\nNo numbers selected!") (exit))) (print ssl) (princ "numbers are found.") ;使被改变编号以一定大小处于屏幕中心位置并被高亮度显示, ;改变每个编号前先询问用户,以免改变了不想改变的编号。 (setq x1 (car viewctr)) (setq y1 (cadr viewctr)) (setq ent (entget (ssname nsset (- ssl 1)))) (setq h (cdr(assoc 40 ent))) (while (> ssl 0) (setq ent(entget (ssname nsset (setq ssl (1- ssl))))) (setq x (cadr(assoc 10 ent))) (setq y (caddr(assoc 10 ent))) (if (or (> (abs (- x x1)) (* h 10)) (> (abs (- y y1)) (* h 6))) (progn (command "zoom" "c" (list x y ) (* h 20) ) (setq x1 x) (setq y1 y) ) ) (redraw (cdr(assoc -1 ent)) 3) (initget 1 "Yes No") (setq number (atoi(cdr(assoc 1 ent)))) (princ "\nThe number ") (princ number) (setq yorn (getkword " 是否要修改?(y/n)")) (if (= yorn "Yes") (entmod (subst (cons 1 (itoa(+ number k))) (assoc 1 ent) ent)) ) (redraw (cdr(assoc -1 ent)) 1) ) ;所有编号改变完成后,恢复使用本命令前的视窗。 (command "zoom" "c" viewctr viewsize) (setvar "CMDECHO" cmdmode) (prin1) ) 这个程序修改的数字需要 -32768 和 32767 之间的整数 怎么修改下程序,让它可以修改任意整数! 谢谢 |