基于AutoLisp的數(shù)控車床滾珠絲杠螺母副CAD二次開(kāi)發(fā)
《基于AutoLisp的數(shù)控車床滾珠絲杠螺母副CAD二次開(kāi)發(fā)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于AutoLisp的數(shù)控車床滾珠絲杠螺母副CAD二次開(kāi)發(fā)(57頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 目 錄 摘 要..............................................................Ⅰ 第一章 緒 論 1 1.1 CAD二次開(kāi)發(fā)國(guó)內(nèi)外研究現(xiàn)狀 1 1.2 課題研究的目的及意義 2 1.3 研究的內(nèi)容和方法 2 第二章 CAD二次開(kāi)發(fā)方法的理論分析 3 2.1 Autolisp語(yǔ)言簡(jiǎn)介 3 2.2 Autolisp 語(yǔ)言的數(shù)據(jù)類型及相關(guān)函數(shù) 3 2.2.1 Autolisp的數(shù)據(jù)類型 3 2.2.2 Autolisp的相關(guān)函數(shù) 5 2.3 加載和運(yùn)行Autolisp程序 7 第三章 參數(shù)化設(shè)計(jì)程
2、序編制過(guò)程 9 3.1 圖形及參數(shù)分析 9 3.2 菜單設(shè)計(jì) 10 3.3 對(duì)話框設(shè)計(jì) 11 3.4 編制Autolisp繪圖程序 14 3.5 尺寸標(biāo)注程序 18 3.6 圖框程序 20 第四章 結(jié)果分析 25 第五章 總 結(jié) 25 參考文獻(xiàn) 27 Abstract 28 附 錄 29 基于AutoLisp的數(shù)控車床滾珠絲杠螺母副CAD二次開(kāi)發(fā) 摘 要 AutoCAD 技術(shù)一直處于不斷發(fā)展和探索中,隨著CAD技術(shù)的功能不斷的完善和強(qiáng)大,已經(jīng)廣泛應(yīng)用于機(jī)械、建筑等各個(gè)領(lǐng)域,其二次開(kāi)發(fā)技術(shù)也不斷受到人
3、們的應(yīng)用。本文以AutoCAD為平臺(tái),利用Autolisp語(yǔ)言對(duì)AutoCAD二次開(kāi)發(fā)的基本設(shè)計(jì)思路和方法對(duì)AutoCAD的參數(shù)化設(shè)計(jì)理念加以強(qiáng)化,加強(qiáng)了人性化的交互方式設(shè)計(jì)。系統(tǒng)研究并開(kāi)發(fā)用于數(shù)控車床滾珠絲杠螺母副的參數(shù)化自動(dòng)繪圖程序。在本文中,介紹了Autolisp語(yǔ)言,菜單,對(duì)話框的制作過(guò)程,通過(guò)lisp編程語(yǔ)言來(lái)完成對(duì)對(duì)話框參數(shù)的調(diào)用以及自動(dòng)分析運(yùn)算,實(shí)現(xiàn)自動(dòng)繪圖功能。從而提高設(shè)計(jì)效率,減輕技術(shù)人員的勞動(dòng)強(qiáng)度,快速完成多種型號(hào)不同參數(shù)的數(shù)控車床滾珠絲杠螺母副的繪圖工作。 關(guān)鍵詞 CAD AutoLisp 參數(shù)化 滾珠絲杠螺母副 數(shù)控車床
4、 Ⅰ 2010屆機(jī)械設(shè)計(jì)制造及其自動(dòng)化專業(yè)畢業(yè)設(shè)計(jì)(論文) 第一章 緒 論 1.1 CAD二次開(kāi)發(fā)國(guó)內(nèi)外研究現(xiàn)狀 CAD技術(shù)的發(fā)展和形成至今已有50多年的歷史了,20世紀(jì)50年代在美國(guó)誕生了第一臺(tái)計(jì)算機(jī)繪圖系統(tǒng),開(kāi)始出現(xiàn)具有簡(jiǎn)單繪圖輸出功能的被動(dòng)式的計(jì)算機(jī)輔助設(shè)計(jì)技術(shù),即CAD技術(shù)。CAD軟件發(fā)展的初期,CAD的含義僅僅是圖版的代替品而非現(xiàn)在我們經(jīng)常討論的CAD所包含的全部?jī)?nèi)容。CAD技術(shù)以從二維繪圖為主要目標(biāo)的算法一直持續(xù)到70年代末期,以后作為CAD技術(shù)的一個(gè)分支而相對(duì)單獨(dú)、平穩(wěn)地發(fā)展。早期
5、應(yīng)用較為廣泛的是CADAM軟件,近十年來(lái)占據(jù)繪圖市場(chǎng)的是AutoDesk公司的AutoCAD軟件。 60年代出現(xiàn)的三維CAD系統(tǒng)只是極為簡(jiǎn)單的線框式系統(tǒng),它只能表達(dá)基本的幾何信息,不能有效表達(dá)幾何數(shù)據(jù)間的拓?fù)潢P(guān)系。進(jìn)入70年代,只能采用多截面視圖、特征緯線的方式來(lái)近似表達(dá)所設(shè)計(jì)的自由曲面。隨著計(jì)算機(jī)的發(fā)展,當(dāng)三維曲面造型系統(tǒng)出現(xiàn)時(shí),標(biāo)志著計(jì)算機(jī)輔助設(shè)計(jì)技術(shù)從單純模仿工程圖紙的三視圖模式中解放出來(lái),首次實(shí)現(xiàn)以計(jì)算機(jī)完整描述產(chǎn)品零件的主要信息的方式。 從70年代末到80年代初,隨著計(jì)算機(jī)技術(shù)的前進(jìn),同時(shí)在CAD技術(shù)方面也進(jìn)行了許多開(kāi)拓。1979年世界上出現(xiàn)了第一個(gè)完全基于實(shí)體造型技術(shù)的大型CA
6、D軟件──I-DEAS。由于實(shí)體造型技術(shù)能夠精確表達(dá)零件的全部屬性,在理論上有助于CAD的模型表達(dá),給設(shè)計(jì)帶來(lái)了驚人的方便性,它代表著未來(lái)CAD技術(shù)的發(fā)展方向。在實(shí)體造型技術(shù)逐漸普及時(shí),CAD技術(shù)的研究又有了重大進(jìn)展。在80年代中期,人們提出了一種比無(wú)約束自由造型更新穎、更好的算法——參數(shù)化實(shí)體造型方法。從算法上來(lái)說(shuō),這是一種很好的設(shè)想。它主要的特點(diǎn)是:基于特征、全尺寸約束、全數(shù)據(jù)相關(guān)、尺寸驅(qū)動(dòng)設(shè)計(jì)修改。當(dāng)時(shí)參數(shù)化技術(shù)還處于一種發(fā)展初級(jí)階段,很多技術(shù)難點(diǎn)有待于攻克。進(jìn)入90年代,參數(shù)化技術(shù)變得比較成熟起來(lái),充分體現(xiàn)出其在許多通用件、零部件設(shè)計(jì)上存在的簡(jiǎn)便易行的優(yōu)勢(shì)。 技術(shù)理論上的認(rèn)可并非意味
7、著時(shí)間上的可行性,考慮到這種參數(shù)化的不完整性以及需要很長(zhǎng)時(shí)間的過(guò)渡時(shí)期。但是在把線框模型、曲面模型以及實(shí)體模型疊加在一起的復(fù)合建模卻并非完全基于實(shí)體,只是主模型技術(shù)的雛形,難以全面應(yīng)用參數(shù)化技術(shù)。由于參數(shù)化技術(shù)和非參數(shù)化技術(shù)的本質(zhì)不同,用參數(shù)化技術(shù)造型后進(jìn)入非參數(shù)化系統(tǒng)要進(jìn)行內(nèi)部轉(zhuǎn)換,才能被系統(tǒng)接受,而大量的轉(zhuǎn)換極易導(dǎo)致數(shù)據(jù)丟失和其他不利條件,這樣的參數(shù)化技術(shù)的市場(chǎng)競(jìng)爭(zhēng)力自然是不高的。全尺寸約束,即設(shè)計(jì)者在設(shè)計(jì)初期及全過(guò)程中,必須將形狀和尺寸聯(lián)合起來(lái)考慮,并且通過(guò)尺寸約束來(lái)控制形狀,通過(guò)尺寸的改變來(lái)驅(qū)動(dòng)形狀的改變,一切以尺寸(即所謂的參數(shù))為出發(fā)點(diǎn)。 一旦所設(shè)計(jì)的零件形狀過(guò)于復(fù)雜時(shí),面對(duì)滿屏幕
8、的尺寸,如何改變這些尺寸以達(dá)到所需要的形狀就很不直觀。實(shí)事上,全約束是對(duì)設(shè)計(jì)者的一種硬性規(guī)定。撇開(kāi)這樣全約束的規(guī)定,沿著這個(gè)思路,在對(duì)現(xiàn)有各種造型技術(shù)進(jìn)行了充分地分析和比較以后,一個(gè)更新穎大膽的設(shè)想產(chǎn)生了。SDRC的開(kāi)發(fā)人員以參數(shù)化技術(shù)為藍(lán)本,提出了一種比參數(shù)化技術(shù)更為先進(jìn)的實(shí)體造型技術(shù)──變量化技術(shù),使得現(xiàn)在的CAD技術(shù)和系統(tǒng)都具有良好的開(kāi)放性。圖形接口、圖形功能日趨標(biāo)準(zhǔn)化。在CAD系統(tǒng)中,綜合應(yīng)用正文、圖形、圖像、語(yǔ)音等多媒體技術(shù)和人工智能、專家系統(tǒng)等技術(shù)大大提高了自動(dòng)化設(shè)計(jì)的程度,出現(xiàn)了智能CAD新學(xué)科。智能CAD把工程數(shù)據(jù)庫(kù)及其管理系統(tǒng)、知識(shí)庫(kù)及其專家系統(tǒng)、擬人化用戶接口管理系統(tǒng)集于一
9、體。 目前國(guó)內(nèi)實(shí)際應(yīng)用的CAD系統(tǒng)可分為兩大類:一類是國(guó)產(chǎn)自主版權(quán)的CAD軟件;另一類是國(guó)外商品化的CAD軟件,由于國(guó)外的CAD軟件的功能齊全,性能優(yōu)良,并完成了商品化和工程化的需求,因此在國(guó)內(nèi)市場(chǎng)上占有很大的份額。然而此類商品化的CAD軟件一般是通用化軟件,用戶在應(yīng)用時(shí)必須依據(jù)各行業(yè)的特點(diǎn)進(jìn)行不同程度的二次開(kāi)發(fā),方能發(fā)揮出應(yīng)有的效益。選擇做AutoCAD的二次開(kāi)發(fā)方式也并不容易,二次開(kāi)發(fā)軟件廠商必須要緊跟著AutoCAD的步伐進(jìn)行更新與完善,否則客戶將不能使用或出現(xiàn)很多問(wèn)題。AutoCAD功能越來(lái)越強(qiáng)大,用戶的使用水平也在不斷提升,用戶對(duì)二次開(kāi)發(fā)工具的依賴性在減小。而且AutoDesk也圍
10、繞AutoCAD完善產(chǎn)品線,憑借強(qiáng)大的研發(fā)實(shí)力,不斷推出建筑、規(guī)劃、機(jī)械、GIS等專業(yè)應(yīng)用。使得國(guó)內(nèi)做二次開(kāi)發(fā)專業(yè)應(yīng)用的軟件在市場(chǎng)上占有很小一部分。 Autolisp是當(dāng)今世界上應(yīng)用最為廣泛的微機(jī)CAD系統(tǒng)軟件,它的用途遠(yuǎn)遠(yuǎn)多于其他任何系統(tǒng),究其原因,在于功能齊全,界面友好,易學(xué)易用。但它最大的有點(diǎn)莫過(guò)于其體系結(jié)構(gòu)的開(kāi)放性,其內(nèi)嵌式程序設(shè)計(jì)語(yǔ)言Autolisp語(yǔ)言是人們對(duì)它進(jìn)行二次開(kāi)發(fā)的最好工具,無(wú)論什么專業(yè)都可以根據(jù)本專業(yè)的特點(diǎn)開(kāi)發(fā)出適合本專業(yè)的CAD應(yīng)用軟件。特別是隨著AutoCAD版本的不斷升級(jí),其功能更強(qiáng)、開(kāi)放性更好,更便于人們二次開(kāi)發(fā)。為人們更好地開(kāi)發(fā)本專業(yè)的CAD系統(tǒng)提供了更有利
11、的條件。 1.2 課題研究的目的及意義 本課題選用數(shù)控車床滾珠絲杠螺母副零件圖和裝配圖作為研究對(duì)象。通過(guò)應(yīng)用Autolisp語(yǔ)言,編制程序生成的菜單,利用DCL對(duì)話框控制語(yǔ)言設(shè)計(jì)接受用戶數(shù)據(jù)參數(shù)的對(duì)話框,編制Autolisp程序,調(diào)用參數(shù)對(duì)話框,分析運(yùn)算,實(shí)現(xiàn)圖形參數(shù)化及智能化,分析計(jì)算與繪圖一體化,系統(tǒng)完成CAD二次開(kāi)發(fā)自動(dòng)繪圖功能。 隨著社會(huì)各行業(yè)的不斷發(fā)展,行業(yè)之間的競(jìng)爭(zhēng)不斷增強(qiáng),其促進(jìn)發(fā)展技術(shù)的科技含量也不斷在增高,相應(yīng)的各種應(yīng)用軟件輔助工具也層出不窮。要適合行業(yè)要求滿足行業(yè)需要?jiǎng)t需要對(duì)個(gè)應(yīng)用軟件進(jìn)行不同程度的改進(jìn)或開(kāi)發(fā)來(lái)發(fā)揮其應(yīng)有的效益。那么針對(duì)本課題而言,便是對(duì)AutoC
12、AD二次開(kāi)發(fā),通過(guò)Autolisp編程設(shè)計(jì),利用參數(shù)化繪圖完成滿足用戶定義參數(shù)的各型號(hào)數(shù)控機(jī)床滾珠絲杠螺母副要求的零件圖,既提高了工作效率又滿足繪圖要求。 1.3 研究的內(nèi)容和方法 本課題擬用AutoCAD軟件以及二次開(kāi)發(fā)語(yǔ)言Autolisp,以數(shù)控車床滾珠絲杠螺母副為研究對(duì)象,設(shè)計(jì)完成參數(shù)化自動(dòng)繪圖功能的程序。其主要內(nèi)容和方法包括:針對(duì)研究對(duì)象對(duì)其參數(shù)和圖形進(jìn)行詳細(xì)分析,從而選擇繪圖程序的編程方式和參數(shù)變量的確定;設(shè)計(jì)制作菜單,對(duì)話框以及各部分的lisp程序;根據(jù)研究對(duì)象的圖形結(jié)構(gòu)要求設(shè)計(jì)編程,完成繪圖程序的編制;按照CAD作圖標(biāo)準(zhǔn)相應(yīng)的完成標(biāo)注、圖框等程序。按此設(shè)計(jì)思路、模型和實(shí)現(xiàn)
13、手段,利用Autolisp完成CAD系統(tǒng)二次開(kāi)發(fā)。 第二章 CAD二次開(kāi)發(fā)方法的理論分析 2.1 Autolisp語(yǔ)言簡(jiǎn)介 Autolisp是AutoCAD內(nèi)嵌式編程語(yǔ)言,所謂內(nèi)嵌式就是指Autolisp已經(jīng)集成到AutoCAD軟件中,是AutoCAD本身支持且能在其中運(yùn)行的高級(jí)語(yǔ)言。使用Autolisp可以直接調(diào)用幾乎所有的AutoCAD命令。Autolisp語(yǔ)言既具備一般語(yǔ)言的基本結(jié)構(gòu)和功能,又具有一般高級(jí)語(yǔ)言所沒(méi)有的強(qiáng)大圖形處理功能,是一種具有賦值能力的解釋性語(yǔ)言。在AutoCAD中,用戶十分方便地利用Autolisp編程語(yǔ)言對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā),把自
14、己日常工作中常用的某些操作以命令的形式添加到AutoCAD中,然后用戶就可以像使用AutoCAD標(biāo)準(zhǔn)命令一樣使用新添加的命令以完成特定的操作。用戶還可以直接增加和修改AutoCAD命令,隨意擴(kuò)大圖形編輯功能,建立圖形庫(kù),并對(duì)當(dāng)前圖形進(jìn)行直接訪問(wèn)和修改。Autolisp語(yǔ)言具有如下特點(diǎn): (1) Autolisp語(yǔ)言中的所有成分都是以函數(shù)形式給出的,執(zhí)行程序就是執(zhí)行一些函數(shù),再調(diào)用其它函數(shù)。 (2) AutoLisp語(yǔ)言建立在基于普通的LISP語(yǔ)言基礎(chǔ)上,并擴(kuò)充了許多適用于CAD的特殊功能形成。 (3) 是一種能以直譯方式(不須先行編譯)亦可于AutoCAD內(nèi)部執(zhí)行的直譯性程序語(yǔ)言。
15、 (4) 擅長(zhǎng)處理具有不同存儲(chǔ)量的各類數(shù)據(jù)對(duì)象。 (5) 數(shù)據(jù)及程序均統(tǒng)一以串行 (List)結(jié)構(gòu)表示。 (6) AutoLisp語(yǔ)言中的程序主要運(yùn)行過(guò)程結(jié)構(gòu)是采用遞歸方式。 AutoCAD軟件本身是一種非參數(shù)化環(huán)境,不能實(shí)現(xiàn)尺寸驅(qū)動(dòng)的參數(shù)化技術(shù),雖然可以調(diào)試大量繪圖程序確定的可變參數(shù)變量后調(diào)整可變參數(shù)來(lái)實(shí)現(xiàn),但工作量大難以實(shí)現(xiàn)。而Autolisp可以編制程序驅(qū)動(dòng)AutoCAD的圖形數(shù)據(jù)庫(kù),達(dá)到尺寸與圖形的一致變更,接受鼠標(biāo)或鍵盤的屏幕圖形信息,修改尺寸相關(guān)圖形自動(dòng)按比例改變,從而實(shí)現(xiàn)參數(shù)化技術(shù)。因此,實(shí)現(xiàn)參數(shù)化繪圖程序設(shè)計(jì)是Autolisp語(yǔ)言最經(jīng)典的應(yīng)用之一。 A
16、utoLISP是一種程序開(kāi)發(fā)語(yǔ)言,Visual LISP是為加速AutoLISP程序開(kāi)發(fā)而設(shè)計(jì)的軟件開(kāi)發(fā)工具,Visual LISP全面兼容AutoLISP程序,提供一個(gè)全新的集成開(kāi)發(fā)環(huán)境。通過(guò)Visual LISP與AutoCAD命令窗口進(jìn)行交互來(lái)實(shí)現(xiàn)相應(yīng)程序的提示。進(jìn)而利用AutoLISP進(jìn)行各種工作的分析計(jì)算,自動(dòng)繪制復(fù)雜的圖形,控制菜單,驅(qū)動(dòng)對(duì)話框,定義新的命令,為AutoCAD擴(kuò)充智能化、參數(shù)化的功能。 2.2 Autolisp 語(yǔ)言的數(shù)據(jù)類型及相關(guān)函數(shù) 2.2.1 Autolisp的數(shù)據(jù)類型 Autolisp語(yǔ)言使用7種類型的數(shù)據(jù),它們是整數(shù)型、實(shí)數(shù)型、字符串、文件指
17、針、圖元名、表和選擇集。下面對(duì)在本次設(shè)計(jì)用得較多的數(shù)據(jù)類型作一下介紹。 (1) 字符串 字符串可以被Autolisp語(yǔ)言當(dāng)作一種數(shù)據(jù)類型使用,但是必須用雙引號(hào)引起來(lái)。引號(hào)內(nèi)的內(nèi)容可以傳遞給AutoCAD當(dāng)作指令執(zhí)行,所以在引號(hào)包括的字符串中,可以用反斜杠(\)添加控制字符。字符串在Autolisp程序中常用于文件名、標(biāo)識(shí)符及DCL中的控制名。字符串中的大小寫和空格符都是有含義的,同一字母的大小寫是不同的字符。而字符串的長(zhǎng)度是字符串一對(duì)雙引號(hào)之間的字符個(gè)數(shù)(不包含雙引號(hào))。 字符串中可以包括ASCII中的任何字符,通常格式“\nnn”,其中nnn是字符的八進(jìn)制ASCII碼,由于反斜杠已經(jīng)
18、作為字符串的前導(dǎo)轉(zhuǎn)義符,當(dāng)字符串中要使用反斜杠時(shí),則必須使用“\\”或“\134”的轉(zhuǎn)義符。雙引號(hào)(“)被替用那個(gè)用于字符串定界,所以如果字符串需要包含它時(shí),可以使用“\”或“\042”來(lái)表示。一些常用的控制符: \e 表示取消 ESC \n 表示換行 LF \t表示制表 HT \r表示回車 CR 其中e n t r 必須小寫。 (2) 表 Autolisp存儲(chǔ)和處理數(shù)據(jù)最有效的方式表。鑒于AutoCAD的數(shù)據(jù)是以鏈的方式進(jìn)行存儲(chǔ)的,所以Autolisp使用表這一數(shù)據(jù)類型。表是指在一對(duì)相匹配的左右圓括號(hào)之間元素的有序集合,表中的每一項(xiàng)成為表的元素,表中的元素可以是整
19、數(shù)、實(shí)數(shù)、字符串、符號(hào),也可以是另一個(gè)表。 所有的圖形都是由點(diǎn)線面組成的,而線面又可以分解成點(diǎn)和點(diǎn)的組合,所以點(diǎn)是最基本的元素。為了處理圖形中的點(diǎn)的坐標(biāo),Autolisp對(duì)二維平面和三維空間的點(diǎn)的坐標(biāo)的表達(dá)如下:平面上的點(diǎn)可以表示為(x y),空間的點(diǎn)可以表示為(x y z)。 表就是包含在括號(hào)中以空格隔開(kāi)的一組相關(guān)值,例如:(1 2.2 3)、(“a” “sheep” “it”)、(2 “this”)這些都是表??梢酝ㄟ^(guò)list函數(shù)創(chuàng)建和處理表。 表有兩種基本類型:標(biāo)準(zhǔn)表和引用表。標(biāo)準(zhǔn)表是從左括號(hào)開(kāi)始到配對(duì)的右括號(hào)結(jié)束。對(duì)于標(biāo)準(zhǔn)表的第一元素(0號(hào)元素)必須是一個(gè)合法的而且已存在的Au
20、tolisp函數(shù)。AutoCAD將按照此函數(shù)的功能完成其操作。引用表是在左括號(hào)前加一撇,表示不對(duì)表作求值處理。 表的大小用其長(zhǎng)度來(lái)衡量的,也就是說(shuō)表的長(zhǎng)度要看括號(hào)內(nèi)的元素個(gè)數(shù)的多少,長(zhǎng)度就是指表中頂層元素的個(gè)數(shù)。例如: (setq a 5) 表的長(zhǎng)度為3 (setq b (+ c(/ d 2))) 表的長(zhǎng)度為3 如果表中沒(méi)有任何元素,則稱表為空表,在Autolisp中用nil或()表示。 (3) 符號(hào) Autolisp中的符號(hào)用于存儲(chǔ)數(shù)據(jù),因此“符號(hào)”和“變量”這兩個(gè)詞的意思相同,可以相互交換使用。在Autolisp中,不允許使用數(shù)字作為符號(hào)名的第一個(gè)字
21、符,字符的大小寫是等效的,符號(hào)的長(zhǎng)度不限,所有的字符都有意義,但盡量不要超過(guò)6個(gè)字符的符號(hào)名,否則要占用大量的內(nèi)存,而且會(huì)減慢程序的運(yùn)行速度,程序的可讀性差,不利于對(duì)程序的理解。 在Autolisp中,當(dāng)把一個(gè)值賦給一個(gè)符號(hào)時(shí),也就是把這個(gè)符號(hào)約束為那個(gè)值,因此可以將不同類型的數(shù)據(jù)賦值給同一個(gè)符號(hào),使它在不同時(shí)刻有不同的值,使得編程十分靈活而簡(jiǎn)練。值得注意的是:用戶在編寫程序的時(shí)候,程序中定義的符號(hào)不能與系統(tǒng)中的函數(shù)和符號(hào)名相同,從而引起后面的定義取代前面已定義的混亂現(xiàn)象。 2.2.2 Autolisp的相關(guān)函數(shù) 函數(shù)是許多計(jì)算機(jī)語(yǔ)言的重要組成部分,在Autolisp語(yǔ)言中,函數(shù)也占
22、有非常重要的地位。進(jìn)行Autolisp語(yǔ)言程序設(shè)計(jì)時(shí),通過(guò)眾多函數(shù)才能實(shí)現(xiàn)賦值、計(jì)算、輸入輸出以及編寫條件語(yǔ)句、循環(huán)語(yǔ)句和子程序等。Autolisp語(yǔ)言中以表的形式寫出所有的函數(shù),每個(gè)函數(shù)在程序中表現(xiàn)為一條或多條語(yǔ)句,執(zhí)行特定的功能,最后返回某種Autolisp數(shù)據(jù)。Autolisp預(yù)定義了140多個(gè)函數(shù),下面對(duì)在本次設(shè)計(jì)用得較多的函數(shù)作一下介紹。 (1) 賦值函數(shù) 賦值函數(shù)是Autolisp的基本函數(shù),它將表達(dá)式的值賦給符號(hào),并可以同時(shí)將多個(gè)表達(dá)式的值分別賦給多個(gè)符號(hào)。Set和setq函數(shù)用于為一個(gè)或多個(gè)變量賦值。其格式為: (setq <符號(hào)><值或表達(dá)式>[<符號(hào)><值或表達(dá)式>
23、]……) 它將表達(dá)式的值賦給符號(hào),并返回最后一個(gè)表達(dá)式的值。例如: (setq a 125);把125賦給a,返回125。 (setq b 26 c 4.7);b值為26,c值為4.7,返回4.7。 (setq s “to”);s為字符串變量,其值為to,返回值為to。 (setq ab (2 4));ab的值為表(2 4),返回(2 4)。 表達(dá)式(setq x nil)和(setq y nil)則表示釋放變量x和y所占用的內(nèi)存空間。 Setq函數(shù)也可以與另一個(gè)函數(shù)連接為變量賦值。例如: (setq p1(getpoint “enter start point:”)) (
24、2) 計(jì)算函數(shù) 在Autolisp中絕大多數(shù)編程和數(shù)學(xué)運(yùn)算中經(jīng)常使用計(jì)算功能函數(shù),在其中可以使用加、減、乘、除函數(shù),角度的正弦、余弦,反正切等不同功能的計(jì)算函數(shù)。 計(jì)算函數(shù)的格式為:(運(yùn)算符 運(yùn)算數(shù)1 運(yùn)算數(shù)2 運(yùn)算數(shù)3……) 這里運(yùn)算符一定要放在最前面,這不同于一般數(shù)學(xué)計(jì)算表達(dá)式。運(yùn)算符與運(yùn)算數(shù)之間以及運(yùn)算數(shù)與預(yù)算數(shù)之間至少要有一個(gè)空格。例如: 求和函數(shù):(+ 1 3);返回4 差函數(shù):(- 10 2 4);返回4 ,在差函數(shù)運(yùn)算中,如果運(yùn)算數(shù)超過(guò)兩個(gè),則第一個(gè)數(shù)中減去后面所有數(shù)的和。 乘函數(shù):(* 0.4 3 -2);返回2.4 除函數(shù):(/ 1000 5);返回200
25、 求余函數(shù):(rem 7 3);返回1 指數(shù)函數(shù):(EXP 10);返回2.718282 自然對(duì)數(shù)函數(shù):(log 4.5);返回1.504077 平方根函數(shù):(sqrt 4);返回2 正弦函數(shù):(sin 1.0);返回0.841471(弧度) 余弦函數(shù):(cos 1.0);返回0.540302 反正切函數(shù):(atan 1.0);返回0.785398 (atan -3.0 2.0);返回0.982793(即返回<數(shù)1>/<數(shù)2>的反正切值),反正切函數(shù)的返回值弧度范圍為-π到+π。 (3) 邏輯函數(shù) 邏輯函數(shù)的返回值只有T(真,即非零)和nil(假,即零)兩種。邏輯函數(shù)有:
26、 (not <表達(dá)式>);返回表達(dá)式邏輯非 (null <表達(dá)式>);當(dāng)表達(dá)式為nil時(shí)返回T,否則返回nil。 (or <表達(dá)式1><表達(dá)式2>……);其中如果至少有一個(gè)表達(dá)式值為T,則函數(shù)的值為T,若個(gè)表達(dá)式的值均為nil,則函數(shù)的值為nil。 (and <表達(dá)式1><表達(dá)式2>……);返回一系列表達(dá)式的邏輯“與”,該函數(shù)對(duì)表達(dá)式從左至右求值,如有一個(gè)表達(dá)式的值為nil,則停止求值并返回nil,當(dāng)對(duì)所有表達(dá)式求值的結(jié)果都不為nil時(shí)才返回T。 (4) 條件執(zhí)行函數(shù) 條件執(zhí)行函數(shù)有兩種,其格式為: 第一種:(if<測(cè)試式><表達(dá)式1>[<表達(dá)式2>]) 該函數(shù)當(dāng)測(cè)試式為T時(shí),
27、執(zhí)行表達(dá)式1,否則執(zhí)行表達(dá)式2,當(dāng)沒(méi)有表達(dá)式2時(shí),如果測(cè)試式為nil,該函數(shù)返回nil.否則返回表達(dá)式1的值。 例如:(if(> a b)(setq c 3)(setq c 4));當(dāng)a>b,c值為3,否則c值為4。 第二種:(cond (<測(cè)試式1><表達(dá)式1>)(<測(cè)試式2><表達(dá)式2>)……) 該函數(shù)接管任意數(shù)目的表作為變?cè)?,它一次?duì)各測(cè)試式進(jìn)行計(jì)算,一旦該式不為nil,則執(zhí)行后面的表達(dá)式而不再測(cè)試以后的式子。 (5) Autolisp自定義函數(shù) 用戶可以利用defun函數(shù)在Autolisp中定義自己的函數(shù)。一旦能完成定義,這些函數(shù)可以同標(biāo)準(zhǔn)函數(shù)一樣在AutoCAD命令提示行
28、、Visual lisp控制臺(tái)提示行或者是其它Autolisp表達(dá)式中使用。 其語(yǔ)法格式如下: (defun函數(shù)名(參數(shù)表/局部變量) (表達(dá)式1) (表達(dá)式2) ) 該函數(shù)可以有一個(gè)變量表和局部變量表,也可以沒(méi)有變量而只使用一對(duì)空括號(hào)。Defun函數(shù)本身返回它所定義的函數(shù)名稱,而調(diào)用defun所定義的函數(shù)則將返回該定義函數(shù)中的最后一個(gè)表達(dá)式的值。前面表達(dá)式不返回值,只是完成預(yù)定操作。局部變量用于函數(shù)的內(nèi)部,與本函數(shù)之外不發(fā)生任何聯(lián)系。在函數(shù)體內(nèi)部可以改變變量表中的符號(hào)或表的值,但是不會(huì)改變調(diào)用該函數(shù)時(shí)作為實(shí)際參數(shù)傳遞變量表的那些符號(hào)或表的值。 例如:(defun
29、 add 2(x) (+ x 2) ) 這是一個(gè)定義加2的函數(shù),調(diào)用(add 2 x),返回其加2 的結(jié)果。 值得注意的是:不能將Autolisp的內(nèi)部函數(shù)名和內(nèi)部符號(hào)名用做用戶定義的函數(shù)名,因?yàn)檫@將使Autolisp預(yù)定義的內(nèi)部函數(shù)不能使用。 用戶還可以使用defun定義AutoCAD中新的命令。通過(guò)定義新的命令,能夠用某些特定的命令完成一些特殊工作。 其語(yǔ)法格式如下: (defun C:命令名()表認(rèn)式…) 其中,“命令名”為所要定義的新命令的名稱,它前面的“C:”必須有,命令名后面必須帶一個(gè)沒(méi)有形參的變?cè)亍? 例如,我們定義一個(gè)函數(shù)畫(huà)一個(gè)圓: (defu
30、n c:circle() (setq point (getpoint“enter centerpoint:”)) (setq radius (getpoint“enter radius:”)) (command "circle" point radius) ) 這樣,circle就成為AutoCAD的一個(gè)新命令。使用時(shí)和其它任何AutoCAD的命令一樣,只需在命令提示符下鍵入該命令名circle即可,然后選取一點(diǎn),再輸入半徑值,一個(gè)圓就可以完成了。 2.3 加載和運(yùn)行Autolisp程序 Autolisp程序通常有兩個(gè)相關(guān)的名稱:程序文件名和函數(shù)名。所
31、有的Autolisp文件都以.lisp為文件擴(kuò)展名。在一個(gè)相同的Autolisp程序文件中可以有一個(gè)或多個(gè)函數(shù)定義。要運(yùn)行一個(gè)函數(shù),定義該函數(shù)的Autolisp程序文件必須被加載。在Visual lisp文本編輯器窗口裝載一個(gè)Autolisp程序以如下操作過(guò)程完成: (1) 確保包含.lisp程序的文本編輯器窗口是激活的。 (2) 在Visual lisp界面中選擇“工具”→“加載編輯器中的文字”選項(xiàng),或者直接在工具欄上點(diǎn)擊“加載活動(dòng)編輯器窗口”按鈕。Visual lisp在控制臺(tái)窗口顯示一個(gè)程序已被加載的信息。 (3) 在控制臺(tái)里輸入帶括號(hào)的函數(shù)名稱,并回車或者在AutoCAD窗
32、口界面輸入被裝載的load函數(shù)名,則在圖形命令窗口提示數(shù)據(jù)響應(yīng)情況。 如果用戶想要使用Visual LISP,必須首先與AutoCAD中的圖形和命令窗口進(jìn)行交互來(lái)響應(yīng)程序的提示。當(dāng)Visual LISP將控制權(quán)交給AutoCAD時(shí),如果AutoCAD被最小化了,那么用戶需要手工來(lái)恢復(fù)和激活窗口,因?yàn)閂isual LISP不能自動(dòng)恢復(fù)AutoCAD窗口。 打開(kāi)AutoCAD軟件,可以在命令提示下輸入vlisp或在AutoCAD菜單中選擇“工具”→“AutoLISP”→“Visual LISP編輯器”。如圖2-1所示。 圖2-1 AutoLISP編輯器界面
33、 第三章 參數(shù)化設(shè)計(jì)程序編制過(guò)程 3.1 圖形及參數(shù)分析 (1) 圖形分析 圖3-1 滾珠絲杠螺母副裝配圖 圖3-1所示是數(shù)控車床滾珠絲杠螺母副的二維視圖,由主視圖、左視圖組成,其中主要元素包括線、圓、圓弧、長(zhǎng)度標(biāo)注、直徑標(biāo)注等構(gòu)成,那么在用Autolisp編寫程序時(shí)要涉及到圖形的每個(gè)細(xì)節(jié)。繪圖時(shí)要按照AutoCAD的手工繪圖方式一樣選擇確定圖層,顏色以及線型、線寬等。因此依照上面的圖形結(jié)構(gòu)可以應(yīng)用Autolisp 的line(畫(huà)線命令),arc(畫(huà)圓弧命令),circle(畫(huà)圓命令)。無(wú)論是線還是圓,在繪圖過(guò)程中都要涉
34、及到點(diǎn),那么便可以通過(guò)定位點(diǎn)來(lái)定位圖中各個(gè)元素,用Command函數(shù)組織定點(diǎn),連接直線,畫(huà)圓。左視圖的6個(gè)Φ10圓均勻環(huán)形分布,那么在編程序時(shí)可以使用array(列陣)的命令作圖,從而減少定點(diǎn)個(gè)數(shù),不容易引起點(diǎn)與點(diǎn)之間的混亂,使程序顯得簡(jiǎn)潔明了。 (2) 參數(shù)分析 數(shù)控機(jī)床的滾珠絲杠螺母副的參數(shù)設(shè)置見(jiàn)圖3-2和表3-1所示。 圖3-2 滾珠絲杠螺母副的參數(shù)圖 序號(hào) 參數(shù)名 含義 初值(mm) 1 x 繪圖起點(diǎn)的橫坐標(biāo) 500 2 y 繪圖起點(diǎn)縱坐標(biāo) 600 3 d0 滾珠絲杠公稱直徑 32
35、 4 d1 滾珠絲杠大徑 31.1 5 d2 滾珠絲杠底徑 28.9 續(xù)表3-1 6 d3 軸頸直徑 25 7 d4 滾珠直徑 2.381 8 L 滾珠絲杠總長(zhǎng)度 170 9 l 滾珠絲杠螺紋長(zhǎng)度 130 10 l1 軸頸長(zhǎng)度 20 11 d 7 螺母的大徑 76 12 d 8 螺母節(jié)圓直徑 63 13 d 9 螺母右部分直徑 50 14 d 10 螺母上螺栓孔直徑 10 15 d 11 螺栓公稱直徑 6 16 a 螺栓孔的其起始角度 60 17 p 滾珠絲杠的導(dǎo)程 4 表3
36、-1 滾珠絲杠零件圖參數(shù)明細(xì) 結(jié)合以上的參數(shù),設(shè)計(jì)對(duì)話框,設(shè)計(jì)參數(shù)名以便將用戶輸入的數(shù)據(jù)參數(shù)傳入AutoLISP程序的相應(yīng)代碼中。在上述參數(shù)中以變量形式存在由用戶自定義的x、y二維點(diǎn),把它作為基點(diǎn),通過(guò)對(duì)直線、圓、圓弧的變量參數(shù)尺寸計(jì)算、分析確定點(diǎn)。結(jié)合AutoLISP語(yǔ)言的編程命令,如list(創(chuàng)建表)、atof(數(shù)據(jù)類型轉(zhuǎn)換)、相關(guān)的setq(賦值函數(shù))、command函數(shù)和加、減、乘、除的計(jì)算函數(shù)等進(jìn)行編程。 一張完整的圖紙當(dāng)然也少不了圖形的尺寸標(biāo)注和圖框的繪制,那么也要結(jié)合上述變量參數(shù)編制尺寸標(biāo)注程序和不同型號(hào)圖框的繪制程序。 3.2 菜單設(shè)計(jì) 針對(duì)數(shù)控車床滾珠絲杠螺母的C
37、AD二次開(kāi)發(fā),在AutoCAD中的標(biāo)準(zhǔn)菜單中不包含用戶使用該項(xiàng)的菜單命令。為了實(shí)現(xiàn)菜單與lisp程序連接調(diào)用對(duì)話框進(jìn)行交互式操作,那么就要自定義菜單或是在菜單中添加所需的命令。 A utoCAD的主控界面菜單都是通過(guò)菜單文件來(lái)定義的。用戶可以修改菜單文件或創(chuàng)建自己的菜單。通過(guò)編輯菜單文件中的文本,可以定義菜單項(xiàng)的外觀和位置。菜單項(xiàng)可以包含CAD命令或AutoLISP程序。 依照該課題的設(shè)計(jì)要求建立下拉式菜單的具體步驟如下: (1) 決定所要增加的菜單的位置,即決定菜單在屏幕上顯示的位置或在圖形輸入的區(qū)域。 (2) 用Visual LISP編輯器編輯用戶自己的菜單文件,其文件
38、擴(kuò)展名必須是.mnu,然后存在當(dāng)前子目錄下。 (3) 在命令行中輸入menuload,將自定義菜單進(jìn)行裝載。 (4) 將加載后的自定義菜單插入到AutoCAD中的標(biāo)準(zhǔn)菜單中。 在對(duì)話框中單擊用戶要編譯的菜單文件名并拾取屏幕上會(huì)顯示出用戶菜單的內(nèi)容。選擇其中的菜單項(xiàng),“確定”選項(xiàng),系統(tǒng)開(kāi)始編譯。編譯完成后,就可實(shí)現(xiàn)用戶定義的功能。 要實(shí)現(xiàn)菜單繪圖,則需要將菜單和.lisp程序連接,才能生成符合要求的繪圖菜單。 設(shè)計(jì)的菜單程序代碼如下: ***POP1 ***USER [參數(shù)化繪圖] [繪制絲杠圖] ^C^C^P(load" load_sg");load_sg;^P [
39、繪制螺母圖] ^C^C^P(load" load_lm");load_lm;^P [繪制螺母副圖] ^C^C^P(load "load_lmf");load_lmf;^P [繪制圖框]^c^c^p(load "tk");tk;^p [取消] ^C 其中,POP1為定義第一個(gè)下拉菜單,USER為下拉菜單的主菜單名,^C^C指連續(xù)兩次ESC鍵,^P為控制菜單的回顯狀態(tài)。(load" load_sg")用于加載load_sg.lsp程序文件。利用上面菜單的定制方法,可對(duì)己有的菜單進(jìn)行添加與刪除操作,達(dá)到用戶操作方便實(shí)用的目的。新增用戶菜單后的AutoCAD菜單如圖3-3所示。 圖3
40、-3 新增用戶菜單后的AutoCAD菜單 3.3 對(duì)話框設(shè)計(jì) 對(duì)話框是現(xiàn)在許多軟件進(jìn)行人機(jī)交互的常用方法。它簡(jiǎn)捷、直觀,給用戶提供了更多的信息和選擇,大大的提高了計(jì)算機(jī)的擬人化程度,方便而直觀地實(shí)現(xiàn)程序設(shè)計(jì)時(shí)的數(shù)據(jù)傳輸和信息傳輸。在AutoCAD環(huán)境下設(shè)計(jì)的對(duì)話框可以采用對(duì)話框控制語(yǔ)言DCL編寫,DCL以ASCII文件形式定義對(duì)話框,是一種非過(guò)程的對(duì)象描述語(yǔ)言,它以非圖形的方式描述對(duì)話框的觀賞屬性和功能屬性。設(shè)計(jì)對(duì)話框講究美觀和功效性,用戶可以按照自己所希望的任何順序輸入。 AutoCAD中的對(duì)話框是由自身的框架以及各種控件所組成,對(duì)話框控件的屬性和布局都是由DCL文件定義的。用戶只
41、需提供最基本的位置信息,AutoCAD就可以自動(dòng)確定對(duì)話框的大小和部件的布局。在進(jìn)行實(shí)際設(shè)計(jì)中,其控件的類型已經(jīng)被可編程對(duì)話框(PDB)功能模塊預(yù)定義了,那么在編程過(guò)程中可以按照其預(yù)定義的功能選擇控件的編組,進(jìn)行列分配、添加邊框等,這樣便可以創(chuàng)建復(fù)雜的控件也稱組件,使得對(duì)話框的布局有序美觀。 DCL 對(duì)話框本身并不能單獨(dú)運(yùn)作,它僅僅是用于規(guī)劃對(duì)話框的屏幕畫(huà)面和接受用戶輸入數(shù)據(jù)而已, 本身并不具有數(shù)據(jù)處理的能力,真正的數(shù)據(jù)處理功能全部是在 AutoLisp 程序里執(zhí)行。利用 AutoLisp對(duì)話框的驅(qū)動(dòng)程序,實(shí)現(xiàn)對(duì)話框的裝入、顯示及卸載等功能。AutoL isp 語(yǔ)言專門提供一個(gè)函數(shù)actio
42、n_tile處理用戶的動(dòng)作, 然后載入運(yùn)行對(duì)話框的AutoL isp 程序。 本課題是以滾珠絲杠螺母副為研究對(duì)象,下面以絲杠為例,根據(jù)相關(guān)參數(shù)確定控件組成需要的對(duì)話框。在Visual lisp編輯器中輸入如下代碼,并保存為c_sg.dcl文件。其程序代碼為: c_sg:dialog{ //定義該對(duì)話框的名稱c_sg label="絲杠主視圖"; //定義該對(duì)話框的標(biāo)題 :text{ //開(kāi)始定義字符串 label="先輸入數(shù)據(jù),然后單擊開(kāi)始";//添加提示性語(yǔ)句,提醒用戶操作順序 } :
43、boxed_row{ //第一個(gè)行框 label="輸入絲杠的起始點(diǎn)"; //指定行框的標(biāo)題 :edit_box{ //輸入橫作坐標(biāo)的編輯框 label="X軸坐標(biāo)(單位:mm)"; //指定編輯框的標(biāo)題 key="cpx"; //設(shè)置鍵值 fixed_width=true; //啟動(dòng)“使用者自定義寬度”功能 width=5; //指定編輯框的寬度 align
44、ment=centered; } :edit_box{ //輸入縱坐標(biāo)的編輯框 label="y軸坐標(biāo)(單位:mm)"; key="cpy"; fixed_width=true; width=5; alignment=centered; } } //結(jié)束第一個(gè)行框定義 :boxed_row{ //第二個(gè)行框 label="輪廓尺寸參數(shù)"; :edit_box{ //輸入絲杠全長(zhǎng)的編輯框 l
45、abel="絲杠全長(zhǎng)(單位:mm)"; key="qc"; edit_limit=20; edit_width=5; } :edit_box{ //輸入絲杠公稱直徑編輯框 label="公稱直徑(單位:mm)"; key="zj"; edit_limit=20; //指定編輯框可用的最大字符位數(shù) edit_width=5; //指定編輯框的寬度 } :edit_box{ //輸入絲杠導(dǎo)程的編輯框 label="基本導(dǎo)程(單位:mm)";
46、 key="dc"; edit_limit=20; edit_width=5; } //結(jié)束編輯框定義 } //結(jié)束第二個(gè)行框定義 :boxed_row{ //第三個(gè)行框 :edit_box{ //輸入絲杠外徑編輯框 label="絲杠外徑(單位:mm)"; key="wj"; edit_limit=20; edit_width=5; } :edit_box{ //輸入絲杠底徑編輯框
47、 label="絲杠底徑(單位:mm)"; key="dj"; edit_limit=20; edit_width=5; } :edit_box{ //輸入滾珠直徑編輯框 label="滾珠直徑"(單位:mm); key="gzj"; edit_limit=20; edit_width=5; } } :boxed_row{ //第四個(gè)行框 label="軸頸參數(shù)"; :edit_box{ //輸入軸頸長(zhǎng)度編輯框 label="軸頸長(zhǎng)度(單位:mm)"; key="zc"
48、; edit_limit=20; edit_width=5; } :edit_box{ //輸入軸頸直徑編輯框 label="軸頸直徑(單位:mm)"; key="zz"; edit_limit=20; //指定編輯框可用的最大字符位數(shù) edit_width=5; //指定編輯框的寬度 } } :boxed_row{ //第五個(gè)行框 :button{ //定義“開(kāi)始”按鈕 label="開(kāi)始"; key="begin";
49、 //設(shè)置鍵值 fixed_width=true; //啟動(dòng)“使用者自定義寬度”功能 width=5; //指定編輯框?qū)挾? } ok_only; //設(shè)置“確定”按鈕 } //結(jié)束第五個(gè)行框定義 } //結(jié)束整個(gè)對(duì)話框定義 將程序加載運(yùn)行的對(duì)話框如圖3-4所示。 圖3-4 滾珠絲杠輸入?yún)?shù)對(duì)話框 3.4 編制Autolisp繪圖程序 Autolisp程序的編制是整個(gè)設(shè)計(jì)的核心部分,它涉及到
50、菜單的連接、對(duì)話框的調(diào)用功能的實(shí)現(xiàn),零件圖形的完整繪制過(guò)程,他們都必須在lisp程序中完成。下面介紹一下在編程中應(yīng)用較多的函數(shù)。 (1) command函數(shù) 函數(shù)格式:(command[命令][參數(shù)子命令]……) 功能:直接向AutoCAD的“command”發(fā)送命令。 本函數(shù)在Autolisp內(nèi)部執(zhí)行AutoCAD命令,并總返回nil。函數(shù)后的[命令][參數(shù)或子命令]等即是在AutoCAD圖形編輯狀態(tài)的提示符command下輸入的命令、數(shù)據(jù)及選擇項(xiàng)(子命令)等。具體傳送的參數(shù)應(yīng)根據(jù)調(diào)用的AutoCAD命令序列的要求來(lái)決定,其中,AutoCAD的命令及選擇項(xiàng)等都是作為字符串來(lái)傳送的。
51、 所執(zhí)行命令后跟的參數(shù)它們可以是字符串、實(shí)數(shù)型、整數(shù)型或點(diǎn)表,但這必須與所要執(zhí)行的命令所需的參數(shù)類型一致。 例如:命令:(command ”circle””100 100” 10) Circle指定畫(huà)圓,100,100指定圓的圓心,10指定圓的半徑,執(zhí)行上面語(yǔ)句就會(huì)在以(100,100)坐標(biāo)為圓心,以10為半徑畫(huà)圓。 (2) atof函數(shù) 該函數(shù)是一種參數(shù)類型轉(zhuǎn)換函數(shù),結(jié)構(gòu):atof<字符串>,該函數(shù)的返回將<字符串>轉(zhuǎn)換成實(shí)數(shù)型的結(jié)果。 例如:(atof “50”);返回50.000000 (3) princ函數(shù) 該函數(shù)屬于輸出函數(shù),基本格式為:(princ<表達(dá)式>[<文
52、件描述符>])。該函功能就是將程序運(yùn)行的結(jié)果輸出到AutoCAD界面上。函數(shù)princ和prinl基本相同,唯一的差別在于princ能夠?qū)崿F(xiàn)<表達(dá)式>中控制符的控制功能。例如: (prinl “\t Hello!”);打印 “\t Hello!”,返回“\t Hello!” (princ “\t Hello!”);打印 返回 “Hello!” (4) polar函數(shù) 該函數(shù)為求值函數(shù),基本格式為:(polar<基點(diǎn)><角度><距離>),此函數(shù)返回一個(gè)點(diǎn)的坐標(biāo),該點(diǎn)與<基點(diǎn)>之間的距離為<距離>,該點(diǎn)和<基點(diǎn)>的連線與X軸正方向夾角為<角度>,(以弧度為單位,夾角按逆時(shí)針?lè)较?/p>
53、度量)。 (5) 編制絲主視圖和側(cè)視圖程序 在文本編輯器中輸入以下代碼,保存為文件名load_sg.lsp的文件。 ;;;;;;;;;;;;;;;;;;;;;主函數(shù);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:load_sg(/ dcl_id x y l l1 d0 d1 d2 d3 d4 d5 d6 p p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28 p29 p30 p31 p32
54、 pl pr pz px pl1 pl2 pr1 pr2 r);;;;給定變量以及根據(jù)絲杠 參數(shù)進(jìn)行分析所確定的點(diǎn)的變量 (setq dcl_id (load_dialog "c_sg.dcl"));;;將c_sg.dcl的程序通過(guò)load_dialog 來(lái)加載這個(gè)dcl文件 (if (not(new_dialog "c_sg" dcl_id))(exit));;;調(diào)用new_dialog顯示指定對(duì)話框 (action_tile "begin" "(data_manage)");;;;;;;;通過(guò)設(shè)置控件值來(lái)初始化對(duì)話框,調(diào)用action_tile函數(shù)來(lái)指定與控件相關(guān)聯(lián)的Autoli
55、sp表達(dá)式 (start_dialog);;;;;;;;;;調(diào)用該函數(shù)將控制權(quán)交給對(duì)話框,以便用戶進(jìn)行數(shù)據(jù)輸入 (unload_dialog dcl_id);;;;;;結(jié)束對(duì)話框時(shí),在調(diào)用該函數(shù)來(lái)卸載DCL程序 (drawl);;;;;;;;;;;;;;;;;;調(diào)用繪圖子程序即主視圖和側(cè)視圖 (princ);;;;;;;;;;;;;;;;;;;;;輸出 ) (defun data_manage() (setq x (atof(get_tile "cpx")));;將對(duì)話框中輸入的參數(shù)轉(zhuǎn)化成實(shí)數(shù)型 (setq y (atof(get_tile "cpy"))) (
56、setq p0 (list x y ));;;;;;;設(shè)置用戶繪圖起點(diǎn) (setq l (atof(get_tile "qc"))) (setq l1 (atof(get_tile "zc")));;將對(duì)話框中輸入的參數(shù)轉(zhuǎn)化成實(shí)數(shù)型 (setq d0 (atof(get_tile "zj"))) ┇ (setq p (atof(get_tile "dc"))) (setq p1 (list x (+ y (/ d3 2))));;;通過(guò)函數(shù)分析,計(jì)算確定繪圖相關(guān)點(diǎn)的位置,以便連接成直線或是確定圓形畫(huà)圓 (setq p2
57、(list (- x (- l1 2)) (+ y (/ d3 2)))) (setq p3 (list (- x l1)(+ y(-(/ d3 2)2)))) (setq p5 (list (- x(- l1 2)) (- y(/ d2 2)))) (setq p6 (list x (- y(/ d3 2)))) (setq p7 (list x (- y(- (/ d1 2)2)))) ;;;設(shè)置繪制絲杠主視圖的各點(diǎn) ┇ (setq p27 (list (+ x (- l 2))(- y (/ d1 2)))) (setq p28 (list (+ x
58、 (- l 2))(- y (/ d0 2)))) (setq p29 (list (+ x (* 0.75 l))(+ y (/ d1 2)))) (setq p30 (list (+ x (+ (* 0.75 l )d4))(+ y (/ d1 2))));;;;;;設(shè)置繪制絲杠螺紋及滾珠的點(diǎn) (setq p31 (list (+ x (+ (* 0.75 l )(* 1.5 d4))(- y (/ d1 2))))) (setq p32 (list (+ x (+ (* 0.75 l )(* 2.5 d4))(- y (/ d1 2)))))
59、 (setq r (/ d4 2)) (setq d5(- d3 4)) (setq d6(- d1 4)) (setq pl (list (- x(+ l1 5))y));;;;;;;;;;;;;確定主視圖中心線位置 (setq pr (list (+ x (+ 5(+ l l1)))y)) (setq pz (list (+ x (+ 100 (+ l l1)))y));;;;;確定側(cè)視圖的繪制中心 (setq px (polar pz (+ alf (* 0.5 pi))(/ d2 2))) (setq pl1 (polar pz (+
60、alf pi)(+ 5 (/ d0 2))));定側(cè)視圖中心線位置 (setq pr1 (polar pz alf (+ (/ d0 2)))) (setq pl2 (polar pz (+ alf (* 0.5 pi))(+ 5 (/ d0 2)))) (setq pr2 (polar pz (+ alf (* -0.5 pi))(+ 5 (/ d0 2)))) ) (defun drawl() (command "layer" "m" 0 "c" 1 "" "");;設(shè)置圖層0及線條顏色為紅色 (command "linetype" "s" "center
61、" "");;設(shè)置線型為中心線 (command "lweight" 0);;;;;;;;;;;;;;;;設(shè)置當(dāng)前線寬為0 (command "line" pl pr);;;;;;;;;;;;;;連接中心線 (command "layer" "m" 1 "c" 2 "" "");;;;;設(shè)置圖層1,線條顏色為白色 (command "linetype" "s" "bylayer" "");設(shè)置當(dāng)前線隨層 (command "lweight" 0.3);;;;;;;;;;;;;設(shè)置線條寬度為0.3 (command "line" p0 p1 "");;;;;;
62、;;;;;;連接個(gè)點(diǎn),畫(huà)粗實(shí)線 (command "line" p1 p2 "") ┇ (command "line" p16 p27 "") (command "line" p13 p19 "") (command "line" p7 p11 "") (command "linetype" "s" "bylayer" "");;;;;;設(shè)置當(dāng)前線隨層 (command "lweight" 0);;;;;;;;;;;;;;;;;;;;;;設(shè)置線寬為0 (command "line" p14 p15 "");;;;;;;;;連接
63、點(diǎn)畫(huà)細(xì)實(shí)線 (command "line" p12 p17 "") (command "line" p8 p26 "") (command "line" p10 p28 "") (command "line" p29 p31 "") (command "line" p30 p32 "") (command "arc" p29 "e" p30 "r" r);;;;;畫(huà)絲杠與滾珠連接的圓弧 (command "arc" p30 "e" p31 "r" r) (command "layer" "m" 0 "c" 1 "" "");設(shè)置圖層0及線條顏色
64、紅色 (command "linetype" "s" "center" "");設(shè)置中心線 (command "lweight" 0);設(shè)置當(dāng)前線寬為0 (command "line" pl1 pr1 "");畫(huà)側(cè)視圖中心線 (command "line" pl2 pr2 "") (command "linetype" "s" "bylayer" "");設(shè)置當(dāng)前線隨層 (command "lweight" 0.3);;;;;;;;;;;;;;;設(shè)置線寬為0.3 (command "circle" pz "D" d1 "" );;;;;;畫(huà)側(cè)視圖的各圓
65、 (command "circle" pz "D" d3 "" ) (command "circle" pz "D" d5 "" ) (command "circle" pz "D" d6 "" ) (command "linetype" "s" "bylayer" "");;;設(shè)置當(dāng)前線隨層 (command "lweight" 0);;;;;;;;;;;;;設(shè)置線寬為0 (command "ciecle" pz d0 "") (command "arc" "c" pz px "a" "270.0");;;;畫(huà)絲杠側(cè)視圖四分之三圓弧 (comman
66、d "layer" "m" 0 "on" "" "");;;;;;;;調(diào)用0圖層待命 ) 將程序加載并運(yùn)行,其結(jié)果如圖3-5所示。 圖3-5 滾珠絲杠主、左視圖 3.5 尺寸標(biāo)注程序 零件圖紙的繪制少不了尺寸的標(biāo)注,那是反映所繪零件外形尺寸最直觀的條件。尺寸標(biāo)注包括長(zhǎng)度尺寸標(biāo)注和直徑、半徑尺寸,角度尺寸標(biāo)注標(biāo)注。下面介紹AutoLISP語(yǔ)言尺寸標(biāo)注的相關(guān)命令。 (1) dinmlinear 命令 該命令是command函數(shù)調(diào)用標(biāo)注長(zhǎng)度的命令。由于長(zhǎng)度尺寸的標(biāo)注需要確定尺寸線是水平的還是垂直的,這些方向定位也是需要用命令來(lái)確定,那么dinmlinear命令常與表示指定方向的命令連用,來(lái)達(dá)到標(biāo)注的效果。 例如:對(duì)繪制的一條直線進(jìn)行標(biāo)注的程序代碼如下: (setq p1 (10 15) p2(20 30) p3(15 25)) (command "line"p1 p2 "") (command "dinmlinear" p1 p2 "h" p3) 通過(guò)這樣一條命令來(lái)標(biāo)注p1 p2 這條直線,其中p1、p2 表示的是這條直線的尺寸界線起點(diǎn)位置
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見(jiàn)問(wèn)題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說(shuō)話方式
- 汽車銷售績(jī)效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對(duì)成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營(yíng)銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩
- 銷售資料:銷售10大黃金觀念
- 銷售資料:導(dǎo)購(gòu)常用的搭訕?lè)椒?/a>