Ⅰ 有幾個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程序,實現按屬性塊圖框里的一個圖號按從左到右排列
在這里說一下編程思路:
1、用過濾法,做一個選擇集,選中圖中所有的TK塊
2、遍歷這個選擇集,得到每個圖框的左下角坐標與右上角坐標,以及它里邊的圖號屬性值
----同時得到坐標的最大Y值(用來找空的地方)
3、按屬性值進行排序,將每個TK的坐標,排好順序後,按先後次序,移動到「空」的地方
從左到右放置 ,間隔就是你所說的200
4、第3步中,要根據每個TK的坐標,選中TK內的所有實體,然後一起移動
5、唔。。。。差不多就是以上幾步
Ⅲ Auto 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程序編程求助:能夠簡單計算並顯示出來。
你好,請您試一試下面的程序:
;小程序,實現個小功能——比如cad上面有三行文字:
;第一行為:小紅年齡:18
;第二行為:小明年齡:9
;第三行為:小李年齡:5
;(這三行文字里年齡都是變的)
;然後調用lisp程序,程序提示選擇這三行文字,確定。
;然後程序提示指定插入點。然後點插入點。
;這時候在插入點出現兩行文字:
;第一行 小紅比小明大:9
;第二行 小紅比小李大:13
(defun c:nl ()
(setq sss (ssget)
nm0 (nm&nl 0)
nl0 (cadr nm0)
nm0 (car nm0)
nm1 (nm&nl 1)
nl1 (cadr nm1)
nm1 (car nm1)
nm2 (nm&nl 2)
nl2 (cadr nm2)
nm2 (car nm2)
nl20 (- nl2 nl0)
nl21 (- nl2 nl1)
)
(print (list nm0 nl0 nm1 nl1 nm2 nl2 nl20 nl21))
(command "text" pause "" "" (strcat nm2 "比" nm1 "大:" (rtos nl21 2 0))
"text" "" (strcat nm2 "比" nm0 "大:" (rtos nl20 2 0))
)
)
(defun nm&nl (i / nm nl)
(setq nm (ssname sss i)
nm (entget nm)
nm (cdr (assoc 1 nm))
nl (substr nm 11)
nm (substr nm 1 4)
nl (read nl)
)
(list nm nl)
)
Ⅳ CADlisp編程:如何用lisp處理一個dwg圖形中的多個多線段
使用while函數就可以
首先選擇集(setq &kw (ssget));得到
進入循環,由於要編輯圖形,所以不能夠使用repeat函數,要使用while函數。
首先,得到函數的圖元:
(setq &k1 (ssname &kw 0))
(while &k1;進入循環
(setq &kw (ssdel &k1 &kw));在選擇集裡面去掉這個圖元,這樣才不會出現問題,使可以編輯圖形
;;這個時候進入編輯圖元&k1,直到編輯完成
(setq &k1 (ssname &kw 0));對下一個圖元進行編輯
);循環結束
;以上是依次讀取圖元過程
Ⅵ CAD lisp語言編程!
轉成特定測量數據格式就可以了導入cad