發表文章

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 ...

AutoCAD 將配置複製到另一個檔案

圖片
     很多時候會需要製作多個設定相同配置的檔案,而減少重複製作時間,就是從別的檔案複製過來。 方法一:設計中心(指令ADCENTER) 此方法優點:可以一次複製多個配置到目前檔案 而缺點:必須打開要從位置來源的檔案 另外,此方法也可以適用複製圖層、文字型式、線型....等 方法二:配置的從樣板 1.指令: layout 輸入配置選項 [複製(C)/刪除(D)/新建(N)/樣板(T)...... 選取[ 樣板(T) ] 或是對配置按 右鍵 -> 從樣板 2.選取複製來源檔案 3.選取要複製的配置(可複選) 此方法優點:可以一次複製多個配置到目前檔案,並不用打開來源檔案 而缺點: 方法三:LISP 此方法優點:可以一次複製多個配置,並不用打開來源檔案 而缺點:不能打開來源檔案 此程式修改一小部分也可以變成將配置複製到其他檔案 (defun c:layouts (/ fname)   (and (setq fname (getfiled "選取匯入配置來源的圖面" "" "dwg" 0))        (imp_layouts fname)        )   (princ)   ) (defun imp_layouts (source / *acad* doc l_import odbx Doctest       path lays l_list)   (vl-load-com)   (setq *acad* (vlax-get-acad-object) doc (vla-get-activedocument *acad*))   ;;**** 檢查來源檔案是否開啟   (vlax-for oDoc (vla-get-documents *acad*)     (if (= (vla-get-fullname oDoc) source)       (setq Doctest t)))   (if (and (not Doctest) (findfile source)) ...

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://eak...

AutoCAD LISP 模型或配置出圖設定

  1. 使用"-plot"指令(前面有" - "是隱藏視窗) ;;;使用-PLOT指令出圖-詳細設定 (defun C:tt ( / ) (command "-PLOT" "Y" ;_詳細出圖規劃?[是(Y)/否(N)]: "" ;_輸入配置名稱或 [?] <模型>: "DWG To PDF.pc3" ;_輸入輸出設備名稱或 [?] <無>: "" ;_輸入圖紙大小或 [?] <ANSI A (11.00 x 8.50 英吋)>: "M" ;_輸入圖紙單位 [英吋(I)/公釐(M)] <公釐>: "L" ;_輸入圖面方位 [直式(P)/橫式(L)] <橫式>: "N" ;_上下顛倒出圖?[是(Y)/否(N)] <否>: "W" ;_輸入出圖範圍 [顯示(D)/實際範圍(E)/圖面範圍(L)/視圖(V)/視窗(W)] <顯示>: ;;下面點座標為選取出圖範圍是視窗的窗選才有 (getpoint) ;_輸入視窗的左下角點 <0.000000,0.000000>: (getpoint) ;_輸入視窗的右上角點 <0.000000,0.000000>: "F" ;_輸入出圖比例 (出圖 公釐=圖面單位) 或 [佈滿(F)] <佈滿>: "C" ;_輸入出圖偏移 (x,y) 或 [中心點(C)] <0,0>: "Y" ;_以出圖型式出圖?[是(Y)/否(N)] <是>: "" ;_輸入出圖型式表名稱或 [?] (輸入 . 代表無) <>: "Y" ;_以線粗出圖?[是(Y)/否(N)] <是>: "A" ;_輸入描影出圖設定 [依顯示(A...

AutoCAD LISP 讀取TXT檔的內容

圖片
 利用getfiled 選取檔案 open 開啟檔案 read-line讀取一行 while循環到沒有內容 close關閉檔案 以下是LISP範例: (defun C:tt ( / file fl fil )     (setq file (getfiled "選取檔案" "D:\\" "txt" 0)) ;_選取檔案     (setq fl (open file "r")) ;_開啟檔案     (while (setq fil (read-line fl)) ;_讀取一行並循環 (prompt "\n")(prompt fil ) ;_輸出 ) ;_end while     (close fl) ;_關閉檔案   (princ)   );_end 展示: 相關連結: AutoCAD 如何載入LISP open 指令介紹 (AutoLISP) AutoLISP 如何將CAD的內容導出到TXT或CSV

AutoCAD 約束參數 顯示 隱藏 刪除

  DCDISPLAY (指令):將選取物件選集顯示或隱藏與物件選集相關聯的動態約束。 DELCONSTRAINT (指令):從選取物件的選集中移除所有幾何圖形和尺度約束。

AutoCAD Lisp 使用接合(JOIN)卻無法接合

  問題: 在LISP內,用 command 使用 join (接合)指令 卻 沒有接合 !!! 類似有選取物件,卻判別非可接合物件 解決方式: 情況1: 在前面一行加入(initcommandversion) 例如:  (initcommandversion) (command "_.join" "_All" "") 情況2: 可能程式判別非共通直線上或重合 檢查線段點座標是否共通直線上或重合,或是檢查Z值不為0導致