我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網站首頁 > CAD新聞

CAD批量改標高

時間:2009-11-23 15:10:26 來源:

有時需要將標高統一修改一個差值。這里提供一個程序可以快捷實現這一功能。該程序在你選擇物體后,輸入一個差值,則所選物體里的所有標高就都加上了這個差值。需要說明的是程序中針對的標高是位于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))                                       #p#分頁標題#e#
                  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)
)