發表文章

AutoCAD LISP 無法預覽DCL 因無法建立 DCL 的暫存檔

 問題: AutoCAD Visual LISP 編輯器中 想要預覽DCL 但顯示錯誤 ; 警告: 無法建立 DCL 的暫存檔: "C:/Program Files/Autodesk/AutoCAD 2024/$vld$.dcl" 解決方法: 方法1:更改暫存檔路徑 選項 → 檔案 → 支援檔搜尋路徑 按"加入"按鈕,再按"瀏覽"進入瀏覽資料夾對話框中 選取 D:\\CAD 即可,建議將加入之路徑移至最上端。 參考: Autocad 論壇 方法2:未有寫入權限(改善方式:增加寫入權限) 在該資料夾新增 $vld$.dcl 檔案 對該檔案 → 右鍵 → 內容 → 安全性 → 選擇使用者 → 新增寫入權限 參考: Autodesk visual-lisp-autolisp-and-general 討論區  

OpenDCL Studio (工作坊) 繁體中文版 下載

圖片
  OpenDCL Studio (工作坊) 繁體中文版 OpenDCL 是一個開源應用程式平台,專為希望以一組豐富的現代 Windows 使用者介面元素取代 AutoCAD 有限的 DCL(對話控制語言)使用者介面語言的 AutoLISP 程式設計師。  AutoCAD 應用程式開發人員和客製化人員可以使用 OpenDCL Studio 以互動方式設計現代、專業的使用者介面元素,以供 AutoCAD 中的 AutoLISP 程式碼使用。  OpenDCL Runtime 元件與應用程式一起部署,並為 OpenDCL 應用程式的最終使用者提供 AutoCAD 內部必要的執行時間框架。 這是AutoCAD對話框外掛,經由模組化後不用像舊的DCL一樣用程式碼做對話框, 而是像VBA一樣可以視覺化去設計版面。 下載分兩個部分 OpenDCL Studio    <--- 這是版面設計程式,只有設計者要安裝 OpenDCL Runtime <--- 這是 AutoCAD 外掛安裝檔,用來加載 OpenDCL 檔案,沒有這個無法執行(因為 OpenDCL 提供了 原本 DCL 更多的功能) OpenDCL Studio 繁體中文版 v9.1.5.2(翻譯版本14) 下載 協助中文版翻譯(目前翻譯未完全完成) Google 文件翻譯對照檔案 我是用簡體中文版進行翻譯(但看到裡面還有很多英文,所以心血來潮就進行翻譯) 所以有些可能會是對面用語 因為個人語言能力有限,有些還沒翻譯或不知道該如何翻就沒有翻譯 上面Google文件翻譯檔案只有介面翻譯檔案,沒有說明檔(因為原本官方提供是HTML檔,我還在想要怎麼處理) 回報翻譯問題

AutoCAD LISP 分享K函數庫

圖片
 理念     在學習或是開發AutoCAD LISP的時候,經常因為需要的功能沒有在內部函數中,而需要自行寫出相對的功能,在重複使用相同功能下,則自行定義成函數會方便重複使用,但同時在初期學習或是開發階段,這個過程會花上許多時間,所以我嘗試分享自己寫的函數。     寫成函數的好處: 1. 方便重複利用,可以減少寫得程式碼 2. 解讀程式碼方便,因為對應函數是對應功能,進而快速理解程式碼是做什麼 下載:(內含有說明) K函數庫V1.3.2 K函數庫V1.3.1 (修正部分函數沒有載入) K函數庫V1.3 K函數庫V1.2 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...

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