自學編寫CAD的Lisp程序

王林
發布: 2024-01-08 14:02:12
轉載
1300 人瀏覽過

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 "\n請選擇圓心插入點"))

(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程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:docexcel.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板