發表文章

目前顯示的是有「AutoCAD」標籤的文章

AutoCAD LISP 使用 VS Code 編輯器

圖片
  一、介紹 Visual Studio Code(簡稱 VS Code)是一款由微軟開發且跨平台的免費原始碼編輯器。 該軟體以擴充元件的方式支援語法突顯、智慧型程式碼補全(又稱 IntelliSense)、程式碼重構功能,並且內建了命令列工具和 Git 版本控制系統。使用者可以更改佈景主題和鍵盤捷徑實現個人化設定,也可以透過內建的擴充元件程式商店安裝其他擴充元件以加強軟體功能。 而 Autodesk 在 AutoCAD 的2021版加入支援 Visual Studio Code 編輯器,可以使用 Visual Studio Code 編輯器來在AutoCAD中Debug 。並且可以選擇編輯器使用原本內建編輯器還是 Visual Studio Code 編輯器。 二、下載 下載 Visual Studio Code 編輯器 免安裝版請下載上面網址的ZIP檔 VS Code 網頁版  (網頁版不能安裝延伸模組,沒辦法安裝AutoLISP擴展套件) 三、中文化 下載後打開是預設是英文介面。 需要下載套件才能中文化。 1. 點選左側功能[ 延伸模組(Extensions) ],快捷鍵Ctrl+Shift+X 2. 搜尋打[ 中文 ]或[ Chinese ]找到[ Chinese (Traditional) Language Pack for Visual Studio Code ] 3. 點選[ 安裝(Install) ]按鈕 4. 安裝完成後,你可以在右下角看到一則詢問訊息,該訊息是問你是否要切換成剛剛下載好的繁體中文套件,就按下[ Change Language and Restart(切換語言並重新開啟) ]的按鈕。 5.重新啟動後,介面變中文。 四、載入AutoCAD套件 需要下載套件才能支援AutoCAD LISP。 1. 點選左側功能[ 延伸模組( Extensions ) ],快捷鍵Ctrl+Shift+X 2. 搜尋 [ AutoCAD AutoLISP Extension ] (此為Autodesk官方套件) 3. 點選[ 安裝 (Install) ]按鈕 五、基本使用 稍後補充 1. 選擇程式語言 選擇AutoLISP 或 DCL,預設純文字檔。 2. 選擇檔案編碼 可選常見UTF-8(預設)或是Big5 六、切換...

AutoCAD LISP 載入或重新載入線型

 內建線型定義檔(.lin),acad.lin 用於英制單位,而 acadiso.lin 則用於公制單位。(在 AutoCAD LT 則是 acadlt.lin 和 acadltiso.lin) 範例1:載入或重新載入內建所有線型(使用 -linetype指令 ) ;;;程式說明:從 lin 檔案載入或重新載入內建所有線型 ;;;作者:ronjonp ;;;來源: lsp 從 .lin 檔案載入或重新載入所有線型 (defun c:loadlt (/ ex v va)   (setq va (mapcar 'getvar (setq v '(cmdecho expert))))   (mapcar 'setvar v '(0 5))   (foreach lt (if (= 0 (getvar 'measurement)) ; <-是否英制 ;; 或將您的自訂檔案新增至清單中,如果不在搜尋路徑中,請提供完整路徑 '("acad.lin") ;; 公制 '("acadiso.lin")       )     (and (findfile lt) (command "._-linetype" "_Load" "*" lt ""))   );_foreach   (mapcar 'setvar v va)   (princ) );_defun_end

AutoCAD LISP 圖層的性質與群組篩選方法

圖片
不想要一個一個手動新增,可以做成巨集或是LISP來快速新增圖層的性質 (Property) 與群組 (Group) 篩選 (Filter) 分類。  方法1:使用指令(-LAYER) 範例1:新增圖層的性質篩選(名稱:凍結圖層,性質:凍結圖層) 1. 輸入指令: -LAYER 輸入選項 [?/建立(M)/設定(S)/新建(N)/更名(R)/打開(ON)/關閉(OFF)/顏色(C)/線型(L)/線粗(LW)/透明度(TR)/材料(MAT)/出圖(P)/凍結(F)/解凍(T)/鎖住(LO)/解鎖(U)/狀態(A)/描述(D)/調和(E)/外部參考(X)]: 2. 輸入: filter  (此未顯示在指令選項中,為隱藏) 輸入圖層篩選選項 [新建(N)/設定(S)/更名(R)/編輯(E)/刪除(D)/結束(X)]: 3. 輸入: N (新建) 選取圖層篩選類型 [群組(G)/性質(P)]: 4. 輸入: P (性質) 輸入父系圖層篩選 <全部>: 5. 輸入:直接按下 Enter鍵 (此為不在任何分支之下;如果要在已有篩選之子項要輸入此項) 輸入性質篩選定義: 6. 輸入: frozen=="true" (此為凍結圖層)(如果多條件要同時輸入在此處) 輸入圖層篩選的名稱: 7. 輸入: 凍結圖層 (此為決定篩選名稱,不能空白或重複名稱) 輸入圖層篩選選項 [新建(N)/設定(S)/更名(R)/編輯(E)/刪除(D)/結束(X)]: 8. 輸入:直接按下 Enter鍵 結束指令 (如果沒有要繼續輸入) 這樣就新增圖層篩選完成 指令巨集: ^C^C-layer;filter;n;p;;frozen=="true";凍結圖層;; LISP: (Command "-layer" "filter" "n" "p" "" "frozen==\"true\"" "凍結圖層" "") 補充 性質篩選定義 : 名稱:NAME,要篩選的圖層名稱(可用萬用字元) 關閉:OFF,true/false 凍結:frozen,true/false 鎖住:locke...

AutoCAD 匯出圖片方法整理

 有時候會做簡報或是跟業主或同事溝通,想要簡單快速顯示想表達圖面的部分,通常會想用圖片呈現,但是不同方法又有不同優缺點,在此做些列出並比較。 一、指令輸出法(OUT系指令) 使用內建指令輸出圖片檔案。 可選檔案格式:JPG、PNG、BMP、TIF、WMF......等多種。 使用指令: BMPOUT 指令:將選取的物件儲存至獨立設備點陣圖格式(BMP檔)的檔案中。 JPGOUT 指令:將選取的物件儲存為 JPEG 檔案格式的檔案。 TIFOUT 指令:將選取的物件以 TIFF 檔案格式儲存至檔案。 PNGOUT 指令:將選取的物件儲存為可攜式網路圖形格式(PNG檔)的檔案。 WMFOUT 指令:將選取的物件儲存至 Windows 中繼檔(WMF檔)。(背景為透明)(會建立包含向量資料和 TrueType 字體) PSOUT 指令:從 DWG 檔建立 PostScript 檔案。 EXPORT 指令:將選取的物件儲存為其他檔案格式。(在儲存視窗選擇儲存格式) 使用方法:使用指令後,出現視窗選擇儲存位置及檔名後,選取要輸出物件,即可輸出檔案。 優點: 1. 可以快速輸出圖片檔案。             2. 可以選取需要的物件輸出。(未被選取不會輸出)             3. 選擇Windows 中繼檔(WMF檔)可以背景為透明。 缺點: 1. 此方法是類似 CAD 顯示畫面擷取,導致物件大小會跟顯示畫面內的物件相關             2. 匯出圖片長寬比跟顯示畫面相同             3. 匯出圖片會有選取的物件範圍旁容易有留白問題(不會因為選取的物件而裁減)             4. 在模型使用會有背景是黑色問題(WMF檔例外)             5. 無法使用類似出圖型式表(.ctb)來快速轉換替代色(例如:黃色轉黑色) 二、列印輸出法(PLOT指令) 使用...

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

圖片
 問題: AutoCAD Visual LISP 編輯器中 想要預覽DCL 但顯示錯誤 ; 警告: 無法建立 DCL 的暫存檔: "C:/Program Files/Autodesk/AutoCAD 2024/$vld$.dcl" 下圖為在LISP編輯器預覽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

AutoCAD 約束參數 顯示 隱藏 刪除

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

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

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

AutoCAD 多重引線文字對齊排列教學

圖片
 如何使用內建指令把多重引線文字對齊並排列 使用指令 mleaderalign 可以設定對齊方式:分散對齊(D)/使引線線段平行(P)/指定間距(S)/使用目前的間距(U) (文字對齊textalign使用方式相同) 1. 分散對齊 可以讓在選定距離內分散對齊 2. 使引線線段平行 會使第一引線線段平行,但文字不會對齊 3. 指定間距 可以指定對齊之間的間距距離 4. 使用目前的間距 使用原本間距來對齊

AutoCAD 常見問題:圖塊無法使用現地編輯

圖片
問題: 圖塊無法使用現地編輯 顯示錯誤 指令: _refedit 在其他物件的參考中找到錯誤: ** 缺少應用程式參考: ACAD,到 AcDbLinetypeTableRecord。 原因: 該圖塊內含有其他應用程式或外掛產生的物件, 產生附加有延伸資料(XData),無法解析導致。 解決方式: 移除延伸資料(XData) 使用下面LISP,在 圖塊編輯內使用指令daa ,但 請注意他會刪除所有延伸資料(XData) (defun DelXdata (ent app / entlst tmplst)     (setq entlst (entget ent app))     (foreach memb (cdr (assoc -3 entlst)) (setq tmplst (cons -3 (list (cons (car memb) nil)))       entlst (subst tmplst (assoc -3 entlst) entlst)       entlst (entmod entlst)       ) )     ) (defun C:daa (/ curass countr)     (setq curass (ssget "X" '((-3 ("*"))))   countr 0   )     (if curass (repeat (sslength curass)     (DelXdata (ssname curass countr) '("*"))     (setq countr (1+ countr))     ) )     (princ)     ) 相關連結 AutoCAD 如何載入LISP

AutoCAD 常見問題:聚合線未填滿

圖片
 問題: 發現有線寬的聚合線未被填滿 解決方式: 方法1. 設定 FILLMODE=1 方法2. 在某些 視埠 才出現,是因為視圖不是 上視圖 ,而是 自訂視圖 方法3. 一樣左上角, 視覺樣式 ,改回 2D線架構 可能被改成 線架構 或 隱藏 的 視覺樣式

AutoCAD 常見問題:原本指令有視窗選擇變成在指令列上輸入

圖片
 問題:原本指令有視窗選擇(對話視窗)變成在指令列上輸入 常見於:開啟檔案....有對話框出現的指令 或是選取替代字型時 解決方式:在指令列輸入 FILEDIA (系統變數) ,如果是 0 請改成 1 ,就可恢復出現視窗 。 系統變數 FILEDIA 功能是抑制檔案導覽對話方塊的顯示。 FILEDIA=0,不顯示對話方塊。在回應指令提示時輸入波狀符號 (~),仍然可以顯示檔案對話方塊。 FILEDIA=1,顯示對話方塊。 其他系統變數也會影響對話方塊的顯示: ATTDIA 控制 INSERT 指令是否使用對話方塊來輸入屬性值。 CMDNAMES 顯示目前作用中的指令與透通指令的名稱 (英文)。 EXPERT 控制是否顯示某些警告對話方塊。 HPDLGMODE 可控制「填充線與漸層」對話方塊和「填充線編輯」對話方塊的顯示。 知識補充: 有些功能既可以在指令行使用,也可以在對話方塊內使用。 在許多情況下,您可以在指令前面輸入一個連字符號( - )來限制對話方塊,並改為在指令行上顯示提示。 例如:在指令行中輸入 layer ,將顯示圖層性質管理員。在指令行中輸入 -layer ,將顯示對等的指令行選項。 抑制此對話方塊有助於與舊版 AutoCAD 應用程式相容及使用腳本檔。 在對話方塊的選項與指令行的選項之間,可能會有些許差異。

AutoCAD 常見問題: 標註後會被自動分解

圖片
發現問題: 1.在使用標註後發現標註被自動分解了。 解決方法: 1. 使用DIMASSOC (系統變數),設定2。(會自動分解的話是設定0) 此系統變數控制標註物件的關聯性以及是否會分解標註。 數值 功能 0 建立分解的標註。標註的不同元素之間沒有關聯。 標註的線、弧、箭頭和文字都繪製成個別的物件。 1 建立非關聯式標註物件。標註的各種元素被組成一個單一的物件。 如果標註的其中一個定義點移動,則標註將更新。 2 建立關聯式標註物件。標註的各種元素被組成一個單一的物件, 且該標註的一個或多個定義點與幾何物件上的關聯點相聯結。 如果幾何物件上的關聯點移動,則標註位置、方位與值都將更新。

AutoCAD 如何依條件篩選物件

圖片
       有時會需要選取相同條件物件,會是複數條件的需求。下列介紹內建指令: 1. 選取類似物件(SelectSimilar) 在目前圖面中尋找符合所選物件性質的所有物件,然後將其加入至選集。 可以在設定選單選擇篩選條件:顏色/圖層/線型/線型比例/線粗/出圖型式/物件型式/名稱。 優點:可依據選取物件快速篩選 缺點:1.篩選條件過多時需要選取更多物件             2. 無法把多條件混合,例如:需求條件1圖層A+顏色A,條件2圖層B+顏色B,不會選取圖層A+顏色B或圖層B+顏色A            3. 會選取圖面內所有篩選條件範圍內物件 2.快速選取(Qselect) 可以依據指定物件類型或性質的條件建立選集。 優點:1. 可以從部分範圍內篩選。             2. 篩選條件比選取類似物件(SelectSimilar)多。 缺點:1. 一次只能篩選一種條件,多個條件需要多次使用來加入或移出選集 3.篩選(Filter) 建立篩選條件清單來選取物件。 優點:1. 可以建立複雜的條件清單,並可以儲存下次使用             2. 可以選取目前圖面物件來快速加入篩選性質條件             3. 可以使用萬用字元 缺點:1. 雖然可以選取目前圖面物件來快速加入篩選性質條件,但是會一次把選取物件多個性質一次加入,要事後刪除不要的性質 使用LISP: 1.運用ssget函數 例如:篩選圖層:"A"+顏色:黃色(2號) (ssget '((8 . "A")(62 . 2)))