跳至內容

自學編寫CAD的Lisp程序

更新時間
快连VPN:速度和安全性最佳的VPN服务
快连VPN:速度和安全性最佳的VPN服务

CAD怎麼自己編lisp程序

做了隱藏和顯示兩個命令.

我編寫的簡單,功能不太全.你看着用吧

複製下列代碼,創建acad.lsp.放在在CAD安裝目錄第一層文件夾下,可自動加載啊:

;在命令行輸入該命令hidsel,然後選擇圖元,結果沒選的被改到隱藏層

(defun C:hidsel(/ all;所有圖元

xs;非隱藏圖元

yc;隱藏圖元

n nam dat)

(setvar "CMDECHO" 0);關閉命令回顯

(command "_layer" "n" "臨時隱藏圖層" "")(command "_layer" "off" "臨時隱藏圖層" "")

(setvar "CMDECHO" 1)

(setq all (ssget "x"));選擇所有

(setq xs (ssget));選擇非隱藏圖元

(setq n -1 yc all);運算隱藏圖元

(repeat (sslength xs)

(setq n (+ n 1))

(setq nam (ssname xs n));返回第N個圖元的名稱

(setq yc (ssdel nam yc))

)

(setq N -1);隱藏

(repeat (sslength yc)

(setq N (+ n 1))

(setq nam (ssname yc n));返回第N個圖元的名稱

(setq dat (entget nam));DAT儲存第N個圖元數據

(entmod (subst (cons 8 "臨時隱藏圖層") (Assoc 8 dat) dat));將yc集合隱藏

)

(setq all nil xs nil yc nil n nil nam nil dat nil);清除數據佔用內存

(princ)

)

;顯示所有圖元

(defun c:shoal(/ all n nam dat)

(setq all (ssget "x"));選擇所有

(setq N -1);隱藏

(repeat (sslength all)

(setq N (+ n 1))

(setq nam (ssname all n));返回第N個圖元的名稱

(setq dat (entget nam));DAT儲存第N個圖元數據

(entmod (subst (cons 8 "0") (Assoc 8 dat) dat));將yc集合隱藏

)

(setvar "CMDECHO" 0)

(COMMAND "PURGE" "LA" "臨時隱藏圖層" "Y" "Y" "")

(setvar "CMDECHO" 1)

(setq all nil n nil nam nil dat nil);清除數據佔用內存

(princ)

)

CAD裏面的lisp有什麼作用啊怎麼用要具體的能讓我明白加分

lisp本身就是cad所屬的開發程序,他提供一些簡單的函數計算,剩下的就全是針對autocad的繪圖功能了。lisp程序類似與數據庫中的存儲過程,可以批量的處理繪製cad圖形。

學習lisp是很簡單的,只要掌握了幾個主要命令的使用就行,就是對語句格式要很研,本身lisp的函數相當多,不必去記。

加載LISP

1. 可以使用APPLOAD命令,然後去找到要加載的LISP文件,加載即可。

2. 可以自己從文件管理器把LISP文件拖動到ACAD的圖形窗口,也可以加載

3. 在命令行後用,(load "c:\temp\xxx.lsp")也可以加載,路徑名請輸入實際的路徑。

另:對於一個LSP程序,(defun 後面的既是命令或者函數,一般程序應該有提示,若沒有,標誌符c:後面的單詞是可以在ACAD下使用的命令,既可以在COMMAND:後面直接輸入,即可執行。

有幾個CAD中的LISP語言怎麼編程

AutoLISP語言是在普通的LISP語言基礎上,又擴充了許多適用於CAD應用的功能而形成的一種程序設計語言。它是一種解釋性值語言,速度較慢,難以保密,可用任何文字編輯軟件編輯,用純文本的格式保存。例如:

(setq i 1);就是代碼i值是1

(command "CIRCLE" '(0 0) 100);命令在座標原點繪製半徑100的圓。

AutoLISP語言中的一切成分都是以函數形式給出的,它沒有語句概念或其他語法結構。執行AutoLISP程序就是執行一些函數,再調用其它函數。例如:

(setq pt1 (getpoint "請選擇圓心插入點"))

(command "CIRCLE" pt1 100);命令這個插入點繪製圓,半徑爲100

AutoLISP把數據和程序統一表達爲表結構,故可把程序當作數據來處理,也可把數據當作程序來執行。

例如:一條直線,起點座標'(0 0),端點座標'(1000 0),圖層爲0層,顏色爲1【紅色】這個是一條直線的一些數據,怎麼執行變爲程序代碼如下:

(entmake (list '(0 . "LINE") '(8 . "0") '(62 . 1) '(10 0 0) '(11 1000 0)))

以上可以直觀的看數據,也可以粘貼到AutoCAD的命令行,就繪製出以上要的直線。

AutoLISP語言中程序運行過程就是對函數值的過程,是在對函數值的過程中實現函數的功能。在AutoCAD裏面,所有的對象可以看成是由無數的點構成,每個點都有自己的座標,函數的運行就是計算出這些點的數值,根據得到的數值進行判斷。

AutoLISP語言的主要控制結構是採用遞歸方式。遞歸方式的使用,使得程序設計簡單易懂。例如:

(setq &k1 (entsel));選擇對象

(setq &k1 (car &k1));提取圖元

(setq #g1 (entget &k1));取得屬性列表

(setq c0 (cdr (assoc 0 #g1)));取得圖元名稱

以上是一個個的寫下來,可以寫成以下:

(setq c0 (cdr (assoc 0 (entget (car (entsel))))));簡單易懂

由於autolisp簡單,容易,所以上手很快。編寫程序後,可以大大的提高繪圖效率,有名的【天正】插件,就是繪圖的好幫手。

autolisp程序也有不足的地方,如提取座標,這個只能在圖元屬性裏面提取,這樣的話會有侷限性,法向座標1與-1的座標值相同,但是圖形的位置不同,造成計算座標的困難,所以提取座標值,最好使用VLAX函數來提取。

以上就是自學編寫CAD的Lisp程序的詳細內容,更多請關注本站其它相關文章!

更新時間

發表留言

請注意,留言須先通過審核才能發佈。