




已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
autolisp在autocad機(jī)械制圖中的應(yīng)用在2005年8月7日8月12日期間我們在第一汽車集團(tuán)公司工藝裝配有限公司的工藝裝配研究所進(jìn)了為期一周的三下鄉(xiāng)的實習(xí)學(xué)習(xí)活動,我們本著科學(xué)嚴(yán)謹(jǐn)?shù)膽B(tài)度象王俊偉副所長學(xué)習(xí)autolisp在autocad在二次開發(fā)中的應(yīng)用?,F(xiàn)在對autolisp語言以有了初步的了解。還在王副所長的指導(dǎo)下獨自編寫了幾個有用的小程序,在這次活動中我們收益非淺不但過了一個有益的假期還提高了自己的就業(yè)競爭力。在眾多的autocad開發(fā)工具中,autolisp是使用最簡單、應(yīng)用最廣泛、使用者最多的一種開發(fā)工具。但是,autolisp只是一種解釋型語言,且不能加密。為了解決這個問題,autodesk公司在autocad r14中推出了visual lisp的測試版,隨后在autocad 2000中推出了visual lisp的正式版本。visual lisp完全兼容以前的autolisp,同時應(yīng)用了autocad的另一個開發(fā)工具-objectarx面向?qū)ο蠹夹g(shù)和activex技術(shù),使visual lisp開發(fā)的應(yīng)用程序功能更強(qiáng)大,運行速度更快,從而真正成為一個能開發(fā)商業(yè)軟件的開發(fā)平臺.autolisp是由autodesk公司開發(fā)的一種lisp程序語言(lisp是list processor的縮寫)。第一篇關(guān)于lisp的參考文獻(xiàn)是由john mccarthy 在1960年4月的acm通訊中發(fā)表的。除了fortran和cobol,大多數(shù)在六十年代早期開發(fā)出來的語言都過時了,可是lisp卻生下來,并且已經(jīng)成為人工智能(ai)的首選程序序言。autolisp解釋程序位于autocad軟件包中,然而autocad r2.17及更低版本中并不包含autolisp解釋程序,這樣,只有通過autocad 2.18及更高版本才可以使用autolisp語言。autocad軟件包中包含大多數(shù)用于產(chǎn)生圖形的命令,但仍有某些命令末被提供。例如,autocad中沒有在圖形文本對象內(nèi)繪制矩形及作全局改變的命令。通過autolisp,你可以使用autolisp程序語言編制能夠在圖形文本對象內(nèi)繪制矩形或作全局選擇性改變的程序。事實上,可以用autolisp編制任何程序,或把它嵌入到菜單中,這樣定制你的系統(tǒng)會取得更高的效率?,F(xiàn)在,已經(jīng)有數(shù)以百計的第三方軟件開發(fā)人員使用autolisp語言編制各種應(yīng)用程序軟件包,例如,象smlayout的軟件包,用它可以產(chǎn)生各種復(fù)雜幾何圖形的平面布局圖,這些幾何圖形包括管道的交叉部、過渡都、圓柱、彎管接頭、圓錐以及罐頂。目前社會上非常需要autolisp程序員為應(yīng)用軟件及客戶菜單的開發(fā)提供顧問。任何編程語言都提供數(shù)學(xué)函數(shù)。在autolisp中,同樣提供了編程以及數(shù)學(xué)計算所需的大部分?jǐn)?shù)學(xué)函數(shù),可以使用autolisp對數(shù)字進(jìn)行加、減、乘、除運算,還可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用autolisp還可以進(jìn)行許多其他計算。由于我們學(xué)習(xí)過c語言所以autolisp語言對我們學(xué)習(xí)起來難度不大,autolisp語言具有計算機(jī)語言的一般性所以不難理解。機(jī)械制圖中,常常得做許多大量的重復(fù)工作。下面這幾個用lisp編寫得程序,是我畫圖時經(jīng)常使用的,節(jié)省了我的不少時間,希望也能幫助廣大使用autocad的工程師們。 1.自動求和 機(jī)械制圖中材料表的填寫是畢不可少的,填寫完后還需根據(jù)材料表求出總重量。一般一幅圖中常有幾十個物體,將這些重量一項一項相加個繁瑣的過程,而且容易出錯。使用下面這個程序,只需用鼠標(biāo)選定需要相加的數(shù),其和就會自動的顯示在命令行中。 因為在autocad中沒有“數(shù)”這種實體,所有的數(shù)都以實體“text”存在,所以程序中使用了“atof”函數(shù),將以字符串形式表示的數(shù)轉(zhuǎn)換為實數(shù)。 (defun c:total( / cmdmode sset ssl nsset temp ssl1 total) (if *error* quit) (setq cmdmode (getvar cmdecho) (setvar cmdecho 0) (prompt nselect numbers to add: ) (setq sset (ssget) (if (null sset) (princ nerror: nothing selected!n) ;過濾出選中的“text”實體,并報告有多少“text”實體被選中。 (progn (setq ssl (sslength sset) (setq nsset (ssadd) (while ( ssl 0) (setq temp (ssname sset (setq ssl(1- ssl) (if (= (cdr (assoc 0 (entget temp) text) (ssadd temp nsset) ) ) (setq ssl (sslength nsset) (print ssl) (princ text entities are found.) ;選出所有可轉(zhuǎn)化為數(shù)的“text”,并求和。 (setq total 0) (setq ssl1 ssl) (while ( ssl 0) (setq temp (ssname nsset (setq ssl (1- ssl) (setq number (atof(cdr(assoc 1 (entget temp) (if (= 0 number) (setq ssl1 (1- ssl1) (setq total (+ total number) ) ) ;顯示和及加數(shù)的個數(shù),便于用戶檢查是否多選或漏選。 (princ nthe total is ) (princ total) (princ of the ) (princ ssl1) (princ numbersn) ) ) (setvar cmdecho cmdmode) ) (princ ntc:total loaded. start command with total.) 2.自動生成遞增數(shù) 用cad作圖時,常需畫一些距離一定、數(shù)值遞增的數(shù)。如填寫材料表時,“序號”一欄就需填寫由下至上的遞增數(shù)。通常,我們先用“text”命令寫一個數(shù),再用“array”命令將其按一定方向陣列,最后用“edit”命令一個一個的改正。下面這個程序可將你從這單調(diào)重復(fù)的動作中解放出來。 (defun c:arn( / ent temp d a number yorn) (setq cmdmode (getvar cmdecho) (setvar cmdecho 0) ;選擇一個實體,并判斷能否作為生成遞增數(shù)的初始數(shù)。 (setq ent (entsel nselect number to arn: ) (if (null ent) (progn (princ nerror: nothing selected!n) (exit) ) ) (setq temp (entget (car ent) (if (= (cdr (assoc 0 temp) text) ;輸入生成遞增數(shù)的個數(shù)、數(shù)間距及其方向。 (progn (setq number(getint number of texts:) (setq d(getdist dist between texts:) (setq a (atoi(cdr(assoc 1 temp) (initget 1 v h) (setq yorn (getkword direction(v/h)?) (if (= yorn v) (setq p (list 0 d) ) (if (= yorn h) (setq p (list d 0) ) ;重復(fù)拷貝前一個數(shù),并將拷貝數(shù)加1。 (while (/= number 1) (command copy ent p ) (setq ent (entlast) (setq temp (entget ent) (setq a (+ a 1) (entmod (subst (cons 1 (itoa a) (assoc 1 temp) temp) (setq number (1- number) ) ) ) (setvar cmdecho cmdmode) ) (princ ntc:arn loaded. start command with arn.) 3.修改編號 作圖時,常常需要對圖中的物體進(jìn)行編號,有時會在已編好號的物體中插入幾個物體,那么在這之后的編號都需作相應(yīng)的增加。對于比較多的編號,一個個的尋找再修改就很麻煩,下面這個程序可以自動完成對編號的尋找及修改過程。 為了能夠清楚的看清要改變的數(shù)字及及其所處的位置,用變量“h”記錄數(shù)字的高度,變量“viewctr”及“viewsize”記錄了使用命令前的視窗中心及其大小。 (defun c:chn( / cmdmode viewctr viewsize sset i j k ssl nsset temp ent number x1 y1 x y h yorn) (defun *error*(s) (exit) ) (setq cmdmode (getvar cmdecho) (setvar cmdecho 0) (setq viewctr (getvar viewctr) (setq viewsize (getvar viewsize) (prompt nselect numbers to add: ) (setq sset (ssget) (if (null sset) (progn (princ nerror: nothing selected!n) (exit) ) ) ;根據(jù)用戶指定范圍過濾出需要改變的編號,并報告找到多少編號。 (setq i(getintnthe number from which to change:) (setq j(getintnthe number to which to add:) (setq k(getintnhow much you want to add:) (setq ssl (sslength sset) (setq nsset (ssadd) (while ( ssl 0) (setq temp (ssname sset (setq ssl(1- ssl) (if (= (cdr (assoc 0 (entget temp) text) (progn (setq number (atoi(cdr(assoc 1 (entget temp) (if(and (= j number) (ssadd temp nsset) ) ) ) (setq ssl (sslength nsset) (if (= ssl 0) (progn princ(nno numbers selected!) (exit) (print ssl) (princ numbers are found.) ;使被改變編號以一定大小處于屏幕中心位置并被高亮度顯示, ;改變每個編號前先詢問用戶,以免改變了不想改變的編號。 (setq x1 (car viewctr) (setq y1 (cadr viewctr) (setq ent (entget (ssname nsset (- ssl 1) (setq h (cdr(assoc 40 ent) (while ( ssl 0) (setq ent(entget (ssname nsset (setq ssl (1- ssl) (setq x (cadr(assoc 10 ent) (setq y (caddr(assoc 10 ent) (if (or ( (abs (- x x1) (* h 10) ( (abs (- y y1) (* h 6) (progn (command zoom c (list x y ) (* h 20) ) (setq x1 x) (setq y1 y) ) ) (redraw (cdr(assoc -1 ent) 3) (initget 1 yes no) (setq number (atoi(cdr(assoc 1 ent) (princ nthe number ) (princ number) (setq yorn (getkword to be changed?(y/n) (if (= yorn yes) (entmod (subst (cons 1 (itoa(+ number k) (assoc 1 ent) ent) ) (redraw (cdr(assoc -1 ent) 1) ) ;所有編號改變完成后,恢復(fù)使用本命令前的視窗。 (command zoom c viewctr viewsize) (setvar cmdecho cmdmode) ) (princ ntc:chnumber loaded. start command with chn.) 4.自動畫管線圖的小程序 畫一些管路原理圖時,常常有許多管路在圖中相交,而這些管路實際并不相連。我們常把在相交點處次要的管路斷開,在用一半圓連接兩斷點,下面的程序可以幫助大家完成做這一繁瑣的工作。 程序中使用“break”命令截斷需要被斷開的管線,再用“arc”命令畫一半圓連接兩斷點。變量p讀取管線交點;p1、p2為點p的左右或上下兩點;p3為連接p1、p2半圓的中點。由于使用“break”命令時若autocad環(huán)境處于對象捕捉方式(osmode0),則“break”命令截斷的p1、p2兩點可能為變?yōu)閜1、p2附近的捕捉點。所以程序開始時用變量myosmode記錄系統(tǒng)變量osmode,而后設(shè)置osmode為0,程序結(jié)束后再設(shè)置還原osmode。變量horn判斷用戶需要斷開的是水平線還是垂直線。 (defun c:brel(/myosmode horv p p1 p2 p3) (setq myosmode (getvar osmode) (setvar osmode 0) (setq p (getpoint nselect point to break:) (initget 1 h v) (setq horv (getkword directionh/v?) (if (= horv h) (progn (setq p1 (list (- (car p) 1.5) (cadr p) (setq p2 (list (+ (car p) 1.5) (cadr p) (setq p3 (list (car p) (+ (cadr p) 1.5) ) (progn (setq p1 (list (car p) (- (cadr p) 1.5) (setq p2 (list (car p) (+ (cadr p) 1.5) (setq p3 (list (+ (car p) 1.5) (cadr p) ) ) (command break p1 p2) (command arc p1 p3 p2) (setvar osmode myosmode) (princ) ) (princ nstart command with brel which will break a line and join it with an arc.) autocad 2000 中的visual lisp開發(fā)工具開發(fā)三維圓柱螺旋線程序,給出了開發(fā)程序代碼和運行結(jié)果,以及三維彈簧、螺紋繪制實例。在用autocad 2000繪制三維工程圖時,經(jīng)常遇到繪制螺紋、彈簧這類三維圓柱螺旋線的問題。在autocad中,繪制三維線的命令有很多,如line、3dpoly、spline等命令,而可以作為三維拉伸路徑的線只有3dpoly命令繪出的線可以勝任,而且不能使用其中的擬合項。因此,為了保證繪制的三維圓柱螺旋線尺寸精確,就必須輸入大量精確數(shù)據(jù),才能一點一點地畫出所需的螺旋線,這樣做起來非常麻煩。有關(guān)資料介紹采用圓弧近似構(gòu)成螺旋線1,但是這樣畫出的螺紋不能通過裝配干涉檢查。由于在autocad中不方便繪制螺旋線,為了解決這個問題,筆者采用編制一個lisp程序來實現(xiàn)。該程序可以實現(xiàn)圓柱螺旋線自動繪圖,不僅可以用于繪制彈簧螺旋線和螺紋的螺紋線。還可以進(jìn)行參數(shù)化繪圖。3、 圓柱螺旋線的繪制3.1 圓柱螺旋線數(shù)學(xué)模型* 圓柱螺旋線的形成圓柱螺旋線是技術(shù)上應(yīng)用最廣的空間曲線,其形成如圖1所示。一動點m沿圓柱的母線ab作等速直線運動,而該母線又繞圓柱的軸線作等角速旋轉(zhuǎn)時,點m的運動軌跡即為圓柱螺旋線。* 數(shù)學(xué)模型 當(dāng)圓柱螺旋線的軸線與坐標(biāo)系的z軸重合時,圓柱螺旋線上動點m(x,y,z)的參數(shù)方程如下:x=rcos y=rsinz=t1*/(2)在參數(shù)方程中:r為圓柱面的半徑,為螺旋線升角,t1為導(dǎo)程(即母線ab旋轉(zhuǎn)一周時,動點m沿軸線方向上升的距離),右旋取正號,左旋取負(fù)號。開始 參數(shù)r、t1、k賦值 給出基點坐標(biāo)計算x, y, z各點坐標(biāo)繪制螺旋線結(jié)束打開autocad2000進(jìn)入visual lisp開發(fā)環(huán)境,新建一個文件,在visual lisp文本編輯器窗口進(jìn)行程序代碼編制。 繪制圓柱螺旋線的autolisp程序代碼如下:; this program is using for drawing a helix(setqb1(getpoint請輸入基點:)(setqr(getreal半徑 r=:)(setqt1(getreal節(jié)距 t1=:)(setqk(getint段數(shù) k=:)(setqn(getint圈數(shù) n=:)(setqta(/(*23.14159)k)(setqj1(/t1k)(setqa0)(setqjj0)(setqii0)(commanducsob1)(command3dpoly(listr00)(repeatn(repeatk(setqjj(+jj1)(setqa(+taa)(setqx(*r(cosa)(setqy(*r(sina)(setqz(*j1jj)(setqp2(listxyz)(commandp2)(setqii(+ii1)(setqz(*t1ii)(command )段數(shù)k 最好為36或36的倍數(shù)(72)。繪彈簧時,n為彈簧的總?cè)?shù);繪螺紋時,若螺紋的長度為l,則n=l / t1。將這個lisp程序保存為“helix.lsp。在編寫lisp程序時,應(yīng)注意輸入一定要正確,括號和空格都必不可少,否則會影響到螺旋線的軌跡。自動生成明細(xì)表巧門在利用計算機(jī)進(jìn)行機(jī)械繪圖的領(lǐng)域里,autocad是國內(nèi)公認(rèn)的功能強(qiáng)大的繪圖軟件。但其在文字、表格處理上卻顯得很薄弱,尤其是在制作表格上,甚至沒有提供此項功能。而人工繪制表格和文字輸入不但花費的時間長,而且嚴(yán)重地影響了繪圖速度。因此,如何自動而有效地生成明細(xì)表便顯得很有意義。本文通過實例介紹如何在autocad系統(tǒng)下自動生明細(xì)表的方法。 圖1 明細(xì)表 序號規(guī)格名稱數(shù)量材料備注135.1汽缸透蓋1zg35235.2汽缸體135335.3螺塞2a3f4gb6170-86螺母m1012a3f535.4壓蓋1th200實現(xiàn)方法1. 建立明細(xì)表數(shù)據(jù)文件首先,把明細(xì)表的數(shù)據(jù)信息,用文字編輯器按如下格式寫入磁盤文件mxb.txt中,作為明細(xì)表數(shù)據(jù)文件?!?”“35.1”“氣缸透蓋”“1”“zg35”“”“”“”“2”“35.2”“氣缸體”“1”“35”“”“”“”“3”“35.3”“螺塞”“2”“a3f”“”“”“”“4”“gb617086”“螺母m10”“12”“a3f”“”“”“”“5”“35.4”“壓蓋”“1”“th200”“”“”“”然后用autolisp的readline函數(shù)提取有關(guān)數(shù)據(jù)信息,并把該數(shù)據(jù)信息賦給表格圖塊屬性。注意:各字符串要加雙引號,空字符串引號“”不可省略,以便autolisp識別。2.建立明細(xì)表格式圖塊通常,一個明細(xì)表是由表頭和表體兩部分組成。表頭是固定的,因此可以用autocad命令生成一個固定的表頭,并把它作為一個圖塊存入磁盤。假設(shè)要得到如圖1所示的明細(xì)表,則先做一個明細(xì)表表頭。 表頭 表頭實際上是一個圖形文件,本文設(shè)定該文件名為mxb.dwg,然后用autocad命令建立一個。 圖塊 當(dāng)用戶向表中插入該塊時,系統(tǒng)會向用戶詢問屬性值,此時用autolisp程序?qū)⑸厦娼⒌拿骷?xì)表數(shù)據(jù)文件中的數(shù)據(jù)分別賦給各個屬性。屬性的定義是用autocad命令attdef完成的。編制程序首先,用autolisp的i/o函數(shù)readline讀入數(shù)據(jù)文件mxb.txt,再用字符串連接函數(shù)strcat給文件的每一行加上括號,此時數(shù)據(jù)類型為字符串(str)。然后,再利用read函數(shù)把字符串轉(zhuǎn)換成一個表(list),以方便autolisp對表中的每一項進(jìn)行各種操作。最后,用autolisp的command函數(shù)調(diào)用insert命令,先將圖塊mxb.dwg插入表中,再將mxb1.dwg插入表中,用nth函數(shù)將前面autolisp讀入的數(shù)據(jù)中各項信息分別賦給mxb1.dwg中的各個屬性。下面給出實現(xiàn)上述功能的程序清單: (defun c:mxb(/scmde p f1 bk a m1 m2 m3 m4 m5 m6 m7 m8 p1)(setq scmde (getvar “cmdecho)(setvar “cmdecho 0)(setq p (getpoint “n please input a point:)(setq f1 (getstring “n please input file name:)(setq f (open f1 “r)(print “n please wait .)(setq bk “mxb)(command “insert bk p 1 1 0)(setq bk “mxb1)(setq p1 (list (car p) ( (cadr p) 8)(while (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化體制改革中的地方政府角色探析
- 深化工業(yè)園區(qū)改革創(chuàng)新的面臨的問題、機(jī)遇與挑戰(zhàn)
- 2025年裝配式建筑施工員職業(yè)技能認(rèn)證模擬試卷(裝配式建筑施工技術(shù))-裝配式建筑裝配式構(gòu)件質(zhì)量與安全
- 抽水蓄能對電力安全保障的貢獻(xiàn)分析
- 2025汽車銷售合同范文
- 基于大數(shù)據(jù)的醫(yī)學(xué)教育個性化發(fā)展
- 中秋節(jié)品牌營銷策略
- 動物世界解析
- 學(xué)習(xí)任務(wù)群背景下小學(xué)語文單元整體教學(xué)的面臨的問題、機(jī)遇與挑戰(zhàn)
- 初二學(xué)業(yè)全面規(guī)劃
- 054.產(chǎn)科危急重癥早期識別中國專家共識(2024年版)
- 2024年陜西省西安市中考地理試題卷(含答案逐題解析)
- 2024年汽車駕駛員(技師)證考試題庫附答案
- 辛亥革命勝利的歷史意義及其局限性
- 化學(xué)高考考前指導(dǎo)講座
- 新疆維吾爾自治區(qū)2024年普通高考第三次適應(yīng)性檢測(三模)英語試卷(含答案詳解)
- 2023-2024學(xué)年全國初中一年級下歷史人教版期末試卷(含答案解析)
- 2024京東代運營服務(wù)合同范本
- 海上風(fēng)電柔性直流輸電系統(tǒng)先進(jìn)控制技術(shù)分析報告
- 2024屆四川省瀘州市龍馬潭區(qū)六年級語文小升初摸底考試含答案
- 三年級語文下冊 期末綜合模擬測試卷(人教浙江版)
評論
0/150
提交評論