有时需要将标高统一修改一个差值。这里提供一个程序可以快捷实现这一功能。该程序在你选择物体后,输入一个差值,则所选物体里的所有标高就都加上了这个差值。需要说明的是程序中针对的标高是位于PUB_DIM层上的TEXT,以及块名为BG、BGZ、BGY的属性块,如果你所要改的标高不在此范围内,可以将程序中的层名或块名改为你需要的名称。命令名:bbg


程序中针对的标高是位于PUB_DIM层上的TEXT,以及块名为BG、BGZ、BGY的属性块,如果你所要改的标高不在此范围内,可以将程序中的层名或块名改为你需要的名称。
你的标高如果不是属性块,可将标高在PUB_DIM层上绘制。

程序为小数点后面3位,如只需保留两位,需将程序中两处(rtos y 2 3)改为(rtos y 2 2);将程序中所有的0.000改为0.00。

1.把下面的代码存到文本文档里面,然后把文本文档改 bbg.lsp
2.在cad中用ap命令,加载此文件即可
3.你可以用此命令了,使用命令 bbg
============================


(defun to(n) 
(cdr (assoc n (entget sn))) 

(princ "\n欢迎使用批量改标高程序!命令名:bbg   == GYSJY 2008.12.24 ==") 
(defun c:bbg( / blip e1 en n sn ss tr1 x y1) 
(command "undo" "g") 
(setq blip (getvar "blipmode")) 
(setvar "blipmode" 0)    
(setq n 0 bgaoy0 (if bgaoy0 bgaoy0 -0.05) 
        ss (ssget '((-4 . "<OR")(-4 . "<AND")(0 . "TEXT")(8 . "PUB_DIM")(-4 . "AND>") 
                    (-4 . "<AND") 
                    (0 . "INSERT") 
                    (-4 . "<OR")(2 . "$BG-R")(2 . "BG")(2 . "BGZ")(-4 . "OR>") 
                    (-4 . "AND>")(-4 . "OR>")) 
           )         

(princ "\n新旧标高差<")(princ bgaoy0) 
(setq x (getreal ">:")           
        y (if x x bgaoy0) bgaoy0 y 

(if ss 
    (progn 
      (princ "\n旧,新标高分别为:") 
      (repeat (sslength ss) 
        (setq sn (ssname ss n) en (entget sn) n (1+ n) 
        ) 
        (if (= (to 0) "TEXT") 
          (progn 
            (setq y0 (to 1) y1 y0) 
            (if (eq (substr y1 1 1) "(") 
              (setq y1 (substr y1 2) tr1 "(" ) 
              (setq tr1 nil) 
            );处理带括号的标高            
            (setq y (if (or (eq y1 "%%P0.000")(eq y1 "%%p0.000")(eq y1 "±0.000")) 0.0 (atof y1))                                       

   y (+ y bgaoy0) y (if (= y 0.0) "%%p0.000" (rtos y 2 3)) 
                  y (if tr1 (strcat tr1 y ")") y)                  
            ) 
            (setq e1 (subst (cons 1 y) (assoc 1 en) en)) 
            (entmod e1) 
          ) 
          (progn;处理属性块中的标高 
            (setq e1 (entget (entnext (cdr (car en))))                
                  y1 (assoc 1 e1) y3 y1 y1 (cdr y1) 
                  y (if (or (eq y1 "%%P0.000")(eq y1 "%%p0.000")(eq y1 "±0.000")) 0.0 (distof y1)) 
                  y (+ y bgaoy0) y (if (= y 0.0) "%%p0.000" (rtos y 2 3))            
                  e1 (subst (cons 1 y)(assoc 1 e1) e1)                
            ) 
            (entmod e1);;修改属性; 
            (entmod en);;修改实体 
          ) 
        );(if (= (to 0) "TEXT") 
      (princ (strcat y1 " " y ", ")) 
      );repeat 
    ) 

(setvar "blipmode" blip) 
(command "undo" "e") 
(princ) 
)