AutoCAD LISP 列示輸出所有圖層名稱等資訊
利用函數tblnext指定LAYER來遍歷所有圖層
利用函數while循環到沒有圖層
不過要注意要修改圖層資料需要另外用函數tblobjname 來得到圖層實體
因為函數tblnext只會得到簡短資訊,如下:
_$ (tblnext "LAYER" T)
((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))
_$ (tblobjname "LAYER" "0")
<圖元名稱: 240c7544870>
程式碼範例:
1.在命令列顯示所有圖層名稱、顏色號碼、線型名稱
動畫展示
程式碼:
(defun c:promptlayers ( / lay layname laycolor layLTYPE)
;;;https://eakyle.blogspot.com/
(prompt "\n圖層名稱,顏色索引,線型名稱") ; 寫入標題列
(while (setq lay (tblnext "LAYER" (not lay))) ; 遍歷所有圖層
(setq layname (cdr (assoc 2 lay))) ; 取得圖層名稱
(setq laycolor (cdr (assoc 62 lay))) ; 取得圖層顏色索引
(setq layLTYPE (cdr (assoc 6 lay))) ;線型名稱
(prompt (strcat "\n" layname "," (itoa laycolor) "," layLTYPE)) ; 寫入圖層資料
);_while
(princ)
);_end
2.將所有圖層名稱、顏色號碼、線型名稱輸出到CSV檔
動畫展示
程式碼:
(defun c:exportlayers ( / csvpath csvfile lay layname laycolor layLTYPE)
;;;;;;https://eakyle.blogspot.com/
(setq csvpath (getfiled "選取檔案" "D:\\" "csv" 5)) ; csv 檔案的路徑和名稱
(setq csvfile (open csvpath "w")) ; 開啟 csv 檔案
(write-line "圖層名稱,顏色索引,線型名稱" csvfile) ; 寫入標題列
(while (setq lay (tblnext "LAYER" (not lay))) ; 遍歷所有圖層
(setq layname (cdr (assoc 2 lay))) ; 取得圖層名稱
(setq laycolor (cdr (assoc 62 lay))) ; 取得圖層顏色索引
(setq layLTYPE (cdr (assoc 6 lay))) ;線型名稱
(write-line (strcat layname "," (itoa laycolor) "," layLTYPE) csvfile) ; 寫入圖層資料
);_while
(close csvfile) ; 關閉 csv 檔案
(alert (strcat "已將圖層資料輸出到 " csvpath)) ; 顯示提示訊息
(princ)
);_end
留言
張貼留言