AutoCAD LISP 分享K函數庫
理念
在學習或是開發AutoCAD LISP的時候,經常因為需要的功能沒有在內部函數中,而需要自行寫出相對的功能,在重複使用相同功能下,則自行定義成函數會方便重複使用,但同時在初期學習或是開發階段,這個過程會花上許多時間,所以我嘗試分享自己寫的函數。
寫成函數的好處:
1. 方便重複利用,可以減少寫得程式碼
2. 解讀程式碼方便,因為對應函數是對應功能,進而快速理解程式碼是做什麼
下載:(內含有說明)
範例:
;;;輸出點座標到TXT檔案
;;;作者:夜源
;;;時間:2024/10/20
;;;需載入K函數庫
(defun C:output-point-coordinates ( / ss file)
(princ "\n 選取點物件:")
(cond
((not (setq ss (ssget '((0 . "POINT")))))
(princ "\n 沒有選取點物件")
);_
((not(setq file (getfiled "輸出資料到" "" "txt" 1)))
(princ "\n 沒有選擇儲存檔案。")
);_
(T
(k:file_write
file
(mapcar
'(lambda (x)
(K:list-str-combine
(mapcar 'rtos (cdr (assoc 10 (entget x))))
",")
)
(K:ss->list ss)))
);_T
);_cond
(princ)
);_end
;;;載入TXT檔案的點座標到圖面繪製點
;;;作者:夜源
;;;時間:2024/10/20
;;;需載入K函數庫
(defun C:load-point-coordinates ( / file lst)
(cond
((not(setq file (getfiled "選取載入點座標TXT檔" "" "txt" 0)))
(princ "\n 沒有選取載入TXT檔。")
);_
(T
(setq lst (k:file_read file))
(foreach x lst
(command "point" x)
);_foreach
);_T
);_cond
(princ)
);_end
;;;將選取文字輸出到Excel
(defun C:tt ( / sel)
;;K函數庫V1.3
(while (setq sel (entsel "\n選取輸出文字:"))
;;傳到Excel
(k:excel-put-select-value
(cdr (assoc 1
(entget(car sel)))))
;;往下一格
(k:excel-select-Offset 1 0)
);_while
(princ)
);_end
;;;將選取點的座標值輸出到Excel
(defun C:tt2 ( / ss)
;;需使用K函數庫V1.3
(setq ss (ssget '((0 . "POINT"))))
(foreach ent (k:ss->list ss)
;;傳到Excel
(k:excel-put-select-value
(list (cdr (assoc 10 (entget ent)))))
;;往下一格
(k:excel-select-Offset 1 0)
);_foreach
(princ)
);_end
;;;將選取點的座標值(NEZ-YXZ)輸出到Excel
(defun C:tt2-2 ( / ss)
;;需使用K函數庫V1.3
(setq ss (ssget '((0 . "POINT"))))
(foreach ent (k:ss->list ss)
;;傳到Excel
(k:excel-put-select-value
(list (apply '(lambda (x y z)
(list y x z))
(cdr (assoc 10 (entget ent))))))
;;往下一格
(k:excel-select-Offset 1 0)
);_foreach
(princ)
);_end
(defun C:tt3 ( / ss)
;;需使用K函數庫V1.3
(setq ss (ssget '((0 . "LINE,LWPOLYLINE,ARC,CIRCLE"))))
(foreach ent (k:ss->list ss)
;;傳到Excel
(k:excel-put-select-value
(list
(list (cdr (assoc 0 (entget ent)))
(cdr (assoc 8 (entget ent)))
(K:vla-obj-Length (vlax-ename->vla-object ent)))))
;;往下一格
(k:excel-select-Offset 1 0)
);_foreach
(princ)
);_end
留言
張貼留言