004-AutoLisp的系統變數設定

  • Share this:

AutoCAD 裡的 抓點模式設定 , 在 AutoLisp 的程式執行當中會造成不可預期的"效果". 所以,在 AutoLisp 的程式裡, 總會一開始就把抓點模式關閉, 只在需要用到抓點功能的時候,才開啟必要的抓點模式值.

使用下列位元碼設定常駐式「物件鎖點」模式: 0  NON (無) 1  END (端點) 2  MID (中點) 4  CEN (圓心) 8  NOD (節點) 16  QUA (四分點) 32  INT (交點) 64  INS (插入點) 128  PER (垂直點) 256  TAN (切點) 512  NEA (最近點) 1024  QUI (快速) 2048  APP (外觀交點) 4096  EXT (延伸線) 8192  PAR (平行)

如果要指定多個物件鎖點,請輸入其值的和。 例如,輸入 3 指定 「端點」(位元碼 1) 與 「中點」(位元碼 2) 物件鎖點。 輸入 16383 將指定所有的物件鎖點。

-------------------------------------------------------------------

另一個系統變數 blipmode , 在先前的 AutoCAD 的版本中預設值為1(開啟), 所以,在繪圖的過程當中,會不斷產生亮點,看起來很雜亂. 因此,在AutoLisp的程式開頭,大多會先將它設為0(關閉).

下面是這兩個變數在 AutoLisp 中的設定範例:

(setq oldsnap (getvar "osmode")) ;儲存抓點模式設定值

(setq oldblipmode (getvar "blipmode")) ;儲存亮點設定值

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;關閉系統變數

(setvar "osmode" 0) ;關閉抓點

(setvar "blipmode" 0) ;關閉亮點 ;

(setvar "osmode" oldsnap) ;重設抓點

(setvar "blipmode" oldblipmode) ;重設亮點 ;

) ;結束功能指令

另外, 還有一個普遍的問題是: 當我的程式中希望USER輸入一個數量, 而USER可能會輸入一個無效的值,如: 0, -20, 3.75, ..... 這在程式裡,可能只是回應錯誤的結果,但也可能永遠?回應,當掉,...

為了防止不當的輸入值, 可以使用 (initget) . 例如:

(initget (+ 1 2 4)) (setq lb (getdist "n長度 : "))

----------------------------------------------------

1 = 不允許user直接按 "Enter". 2 = 不允許user輸入零 "0". 3 = 不允許user輸入負數.

-----------------------------------------------------

1,2,3,...可以累加起來寫成:

(initget 7) (setq lb (getdist "n長度  : "))

在AutoCAD裡,要設定變數,要下 setvar 這個指令:

指令: setvar 輸入變數名稱或 [列示(?)]: blipmode

輸入 BLIPMODE 的新值<0>: 0

在AutoLisp裡,要設定系統變數,則是先用 (getvar) 讀取目前的系統變數值,

然後儲存為舊值,再設定新的值.

等到程式執行完畢,再把舊值設回去原來的變數.

這樣設定的目的,除了是為了在AutoLisp執行過程當中,可以減少不可預期的結果

產生;另一方面,也確定在執行AutoLisp程式的前後,系統變數的值是一致的.

user不會因為執行AutoLisp程式後,覺得畫面怪怪的,有種陌生的感覺.


Tags: