根據名稱控制圖層顯示開關的命令

圖層有顯示開關、凍結解凍、鎖定解鎖等一系列相互對應的正反操作,編製控制程序時,往往會正反各自定義一個命令,如在Express中的LayOn和LayOff。

昨天隨手幫人寫了一個程序,可以使用同一個命令對指定名稱的圖層進行顯示的開關切換操作,代碼也非常簡單,就分享在這裡:

;;;定義AutoLISP命令:QuickSWitch(QSW)(Defun C:QSW (/ LAY LAYS EX) (setq lays ("圖層1" "圖層2" "圖層3") ex (getvar "Expert") ) (setvar "expert" 5) (command "_.Layer") (foreach lay lays (if (< (cdr (assoc 62 (tblsearch "Layer" lay))) 0) (command "_On" lay) (command "_Off" lay) ) ) (command "") (setvar "expert" ex) (princ))

這個命令可以切換指定圖層的顯示開關:當圖層是顯示時,執行此命令會關閉顯示,反之則打開顯示。

這裡介紹一下系統變數EXPERT,控制AutoCAD給予用戶提示和警告的級別。具體參數可以參照幫助文檔,這裡不再詳細寫了。在AutoCAD中,關閉當前圖層的顯示,會有一個警告提示。因為關閉了當前圖層的顯示,後面繪製的動作產生的實體將看不見,這對於初級用戶來說,容易造成困擾,因此AutoCAD對這種操作需要提醒用戶。

當EXPERT設為5,即為最高專家級別時,這個警告就不需要再提示高級AutoCAD用戶,避免程序運行時,用戶級別不夠,又嘗試關閉當前圖層,需要額外編製代碼來提供AutoCAD要求的額外用戶輸入確認。

最後講解一下圖層顯示的關(OFF)與凍結(FREEZE),凍結後的圖層內的實體將不再參與後繼的操作,如被選擇、捕捉交點或者獲取範圍等,但是關閉顯示則不然,關閉後圖層上的實體僅僅是不可見,會依然參與後繼的操作。因此還是可以對關閉顯示的圖層進行操作。

根據這個原理,可以在這個QuickSWitch的基礎上編製凍結/解凍,鎖定/解鎖等對應的圖層開關命令。有興趣的可以自行嘗試。

推薦閱讀:

3D預覽的顯示
智慧水務軟體二次開發入門介紹篇—使用ruby對ICM進行一些簡單的操作

TAG:AutoCAD | Lisp | 二次開發 |