AutoCAD LISP 列示輸出所有圖層名稱等資訊


利用函數tblnext指定LAYER來遍歷所有圖層

利用函數while循環到沒有圖層

不過要注意要修改圖層資料需要另外用函數tblobjname 來得到圖層實體

因為函數tblnext只會得到簡短資訊,如下:

_$ (tblnext "LAYER" T)

((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))

用函數tblobjname 來得到圖層實體,如下:

_$ (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



留言

這個網誌中的熱門文章

AutoCAD 填充線(剖面線)樣式簡易製作產生器

AutoCAD 如何自訂線型教學

AutoCAD 動態圖塊-如何在所有可見性顯示或隱藏