其實(shí)自己很早以前就想學(xué)習(xí)AutoLisp了剔桨。因?yàn)楸娝苤髯海敫咝Ю肊xcel必須學(xué)VBA,那么高效利用AutoCAD萨脑,Autolisp也算是當(dāng)之無(wú)愧的首選了渤早。對(duì)于Excel來(lái)說(shuō)主要是財(cái)務(wù)用的多瘫俊,對(duì)于AutoCAD來(lái)說(shuō)扛芽,設(shè)計(jì)院用的多。我自己從事自控儀表設(shè)計(jì)登下,少不了和各種表格數(shù)據(jù)打交道叮喳,例如儀表索引啦嘲更,數(shù)據(jù)表選型啦揩瞪,監(jiān)控?cái)?shù)據(jù)表啦赋朦,電纜清冊(cè)啦。雖說(shuō)數(shù)據(jù)量不大李破,一般幾百到上千而已宠哄。在摸索中學(xué)會(huì)了VBA之后,覺(jué)得實(shí)在是太提高效率了嗤攻。從此看Excel都不是之前的Excel了毛嫉。之后很順理成章的用VBA寫(xiě)過(guò)幾個(gè)AutoCAD的小程序,看了下AutoCAD ActiveX的幫助文檔妇菱,加上一些現(xiàn)成的代碼承粤,改改也就出來(lái)了。AutoCAD VBA程序是讀取AutoCAD繪制的P&ID圖紙中的儀表位號(hào)以及管線號(hào)以及各種報(bào)警設(shè)置值到Excel中闯团。后來(lái)還并從Excel中右鍵跳轉(zhuǎn)到所選位號(hào)所在的PID圖紙指定位置中辛臊。剛寫(xiě)完很激動(dòng),但是想想這個(gè)程序雖然功能強(qiáng)悍房交,但是實(shí)際上并沒(méi)有什么用。因?yàn)闆](méi)有人按照你的制圖規(guī)則來(lái)隔心,總是有例外硬霍,這也是AutoCAD作為一款通用制圖軟件的通病,必須深度二次開(kāi)發(fā)耐床,定義好各項(xiàng)規(guī)則才可以,像天正之類(lèi)堪嫂。
那還是剛工作不到兩年的時(shí)候?qū)懙摹2](méi)有想太多恶复,寫(xiě)完之后也沒(méi)有發(fā)布應(yīng)用,就兩三個(gè)人知曉翅萤。直到今年,終于十一月份的時(shí)候終于閑下來(lái)了胚泌。于是想起來(lái)之前想學(xué)的AutoCAD VBA的二次開(kāi)發(fā),想看看有沒(méi)有什么視頻教程可以看看壁公。恰巧同時(shí)也發(fā)現(xiàn)了AutoLisp的視頻教程紊册,于是一起買(mǎi)了。看了一個(gè)星期的教程遏片,大致了解了語(yǔ)法,于是就上手開(kāi)始干了髓需。
由于之前有了學(xué)習(xí)VBA的經(jīng)驗(yàn),所以學(xué)起來(lái)明顯快很多白热。我已經(jīng)知道,看視頻可以減少入門(mén)的困難续扔,但是要真正掌握是必須親手去寫(xiě)代碼,去思考才行的识脆。自己的第一個(gè)標(biāo)注軟件就出來(lái)了。雖然用VBA同樣也能實(shí)現(xiàn)宫蛆,但是AutoCAD VBA對(duì)于版本的支持,寫(xiě)起來(lái)也要復(fù)雜一些,操作上也不便胡诗。
接下來(lái)再看看相關(guān)的資料,先把AutoCAD的操作從頭到尾熟悉一遍瑰抵,了解下運(yùn)行的基本對(duì)象和方法。像之前學(xué)習(xí)的那樣,然后再配合著Autolisp的學(xué)習(xí)婿着。我想兩三個(gè)月之后形纺,也會(huì)像學(xué)會(huì)VBA之后看Excel都是透明的感覺(jué)了吧蜗字。
附上帶橢圓圓圈標(biāo)注lisp源代碼
;橢圓圈標(biāo)注
(defun zcx2()
(setvar "osmode" 0)
(command "line" p1 pause "")
(setq p2 (getvar "lastpoint"))
(setq e1 (entlast))
(entdel e1)
(setq
a1 (car p1 )
b1 (cadr p1)
a2 (car p2)
b2 (cadr p2)
)
(if (> a1 a2)
(setq pp (polar p2 pi le))
(setq pp (polar p2 0 le))
)
(if (> a1 a2)
(setq p3 (polar pp (/ pi 2) zj))
(setq p3 (polar p2 (/ pi 2) zj))
)
(command "ellipse" "C" p1 (polar p1 (angle p1 p2) 1.8) (polar p1 (- pi (angle p1 p2)) 0.8))
(command "line" (polar p1 (angle p1 p2) 1.8) p2 pp "")
(command "text" p3 ht 0 "Text")
)
;帶橢圓圈標(biāo)注主程序
(defun c:bz2()
(setvar "texteval" 1)
(setvar "cmdecho" 0)
(setq vv (getvar "osmode"))
(setq ht (getreal "\n標(biāo)注字高(3):"))
(if (= ht nil) (setq ht 3))
(setq le (getreal "\n橫線長(zhǎng)度(20):"))
(if (= le nil) (setq le 20))
(setq zj (/ ht 3))
(setq n 0)
(while (= n 0)
(setvar "osmode" 33)
(setq p1 nil)
(setq p1 (getpoint "\n 指定點(diǎn)坐標(biāo):"))
(if (= p1 nil) (setq n 1) (zcx2))
)
(setvar "osmode" vv)
(princ)
)