AutoCAD LISP 分享K函數庫

 理念

    在學習或是開發AutoCAD LISP的時候,經常因為需要的功能沒有在內部函數中,而需要自行寫出相對的功能,在重複使用相同功能下,則自行定義成函數會方便重複使用,但同時在初期學習或是開發階段,這個過程會花上許多時間,所以我嘗試分享自己寫的函數。

    寫成函數的好處:

1. 方便重複利用,可以減少寫得程式碼

2. 解讀程式碼方便,因為對應函數是對應功能,進而快速理解程式碼是做什麼


下載:(內含有說明)

K函數庫V1.2

K函數庫V1.3


AutoCAD 如何載入LISP檔案


範例:

;;;輸出點座標到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(AutoCAD LISP)

 ;;;將選取文字輸出到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(AutoCAD LISP)

 ;;;將選取點的座標值輸出到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




將選取線,聚合線,圓,弧的物件類型及圖層及長度輸出到Excel(AutoCAD LISP)
 ;;;將選取線,聚合線,圓,弧的物件類型及圖層及長度輸出到Excel

(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


留言

這個網誌中的熱門文章

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

AutoCAD 如何自訂線型教學

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