首頁 >電腦教學 >電腦知識 >如何進行CAD Autolisp的二次開發?

如何進行CAD Autolisp的二次開發?

王林
王林轉載
2024-01-04 10:18:301352瀏覽

請問CAD autolisp二次開發怎麼弄啊

;;;燈管T4

(defun C:T4206()

使用者輸入T4206執行命令(不含任何參數)以載入並立即執行後續的程式。

(graphscr)

(setvar "cmdecho" 0)

;;;命令列顯示關閉

(setq P1(getpoint "\n請指定燈管(T4 206.5mm 6W)放置位置:"))

;;;設定一個插入點P1,返回點

(command "-INSERT" "D:/YZ_ZCAD/TK/DGT/T4206.dwg" "S" "1" P1 "0")

執行CAD標準指令時,可以在指令前面加上"-"(參考CAD指令)來直接在命令列中執行指令,而不使用對話方塊。

在程式執行時,不能使用對話方塊來進行操作,可以在指令前加上「-」符號或使用變數FILEDIA來控制。還有一些特殊情況可以使用其他方式來控制。

(setvar "cmdecho" 1)

;;;命令列顯示開啟

(princ)

;;;結束語

)

;;;將以上文字放到LISP裡面以任何英文名命名儲存

#在儲存完檔案後,我們可以在CAD中使用AP載入該檔案。

;;;執行T4206指令執行插入指令,(確;認文件的存在)

就我個人看法而言,我認為VBA開發比LISP更為方便。學習LISP只需掌握基本的知識即可,不必深入學習。而LISP對話方塊開發(DCL)相比VBA要複雜得多。但是,有時候我們需要使用LISP函數來執行VBA函數。在AutoCAD的說明文件中,有專門為開發人員提供的協助,其中包含了許多詳細的內容。很多編書人員也直接使用這些文件中的資源。我建議你可以去看一下,可能對你有幫助。

CAD二次開發修改LISP

(defun c:dz (/ oce1 n1 zn h1 sxh1 p1)

(vl-load-com)

(setq oce1 (getvar "cmdecho"))

(setvar "cmdecho" 0)

(setq ms (vla-get-modelspace

#(vla-get-activedocument (vlax-get-acad-object)) 這行程式碼用於在AutoCAD中取得目前活動文檔的物件。它使用了AutoCAD的VLAX(Visual LISP ActiveX)接口,透過vlax-get-acad-object函數取得AutoCAD的應用程式對象,然後使用vla-get-activedocument方法取得目前活動文件的物件。這樣我們就可以對目前文件進行各種操作,例如存取其屬性、修改物件等。這一行程式碼在AutoCAD的LISP程式設計中非常常見,並且在處理文件物件時非常

)

)

(if qz

()

(setq qz "")

)

(if hz

()

(setq hz "")

)

(initget "c")

(setq nqz (getstring (strcat "\n請輸入前綴/c(為空): " ))

(cond

((= nqz "c") (setq qz ""))

(T (if (/= nqz "")(setq qz nqz)))

)

(setq hz "")

(if (not (setq n1 (getint "\n請輸入起始順序編號 : ")))

(setq n1 1)

)

(setq zn 1)

(if (not (setq h1 (getreal "\n請指定文字高度 : ")))

(setq h1 2.5)

)

(setq sxh1 (strcat qz (itoa n1) hz))是常見的LISP表達式。在這個表達式中,qz、n1和hz是變量,透過拼接它們的值來建立一個新的字串sxh1。 我將為您解釋一下這個表達式的具體意思。 - qz是表示前綴的變量,它儲存了一個字串,例如"前綴"。 - n1是一個整數變量,它儲存了一個數字值,例如10

(setq p1 (getpoint "\n請指定插入點: "))

(while (/= p1 nil)

(setq p1 (vlax-3d-point p1))

(setq txt (vla-addtext

ms

sxh1

p1

h1

)

)

(setq

n1 ( n1 zn)

sxh1 (strcat qz (itoa n1) hz)

p1 (getpoint "\n請指定下一插入點: ")

)

)

(setvar "cmdecho" oce1)

(vlax-release-object ms)

(princ)

)

CAD二次開發LISP高手寫個程式

改為如下即可:

(defun c:sdd ( dwg )

(setq dwg (getfiled "選擇路徑與檔名" "" "Dwg" 1))

(if (wcmatch dwg "*

#-##-

#:##.dwg")

(setq dwg (substr dwg 1 (vl-string-search " " dwg)))

給定一個字串變數`dwg`,我們可以使用`(setq dwg (substr dwg 1 (- (strlen dwg) 4)))`來處理。這行程式碼的作用是將`dwg`字串的最後四個字元截取掉,並將結果重新賦值給`dwg`變數。這樣做的目的可能是為了移除檔案名稱或其他識別碼中的檔案副檔名。透過這行程式碼,我們可以實現對`dwg`字串的修改,使其符合特定的要求或格式。

)

(setq dwg (strcat dwg " " (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD HH:MM)") ".dwg"))

(command "_.saveas" "" dwg)

(princ)### ###)###

以上是如何進行CAD Autolisp的二次開發?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:docexcel.net。如有侵權,請聯絡admin@php.cn刪除