畢英建 丁玲玲 韓世展 曹程溪 丁克會(huì)
摘要:利用AutoCAD內(nèi)嵌的Visual LISP語(yǔ)言進(jìn)行三維函數(shù)曲線交互式對(duì)話框程序設(shè)計(jì),幫助使用者繪制各種三維、二維公式函數(shù)曲線,可方便快速地分析函數(shù)參數(shù)對(duì)曲線形狀的影響,擴(kuò)充了AutoCAD的功能。
關(guān)鍵詞:二次開發(fā);函數(shù)曲線;對(duì)話框;Visual LISP語(yǔ)言
中圖分類號(hào):TH122 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)29-0226-03
Abstract: Using Visual LISP language embedded in AutoCAD for 3D function curve interactive dialog box programming, Help users draw various 3D and 2D formula function curves,It can analyze the influence of function parameters on curve shape conveniently and quickly. The function of AutoCAD is expanded.
Key words: secondary exploration; function curve; dialog box; Visual LISP language
1 背景
AutoCAD是一款發(fā)行較早,使用很廣的繪圖軟件。Visual LISP是為加速AutoLISP程序開發(fā)而設(shè)計(jì)的軟件開發(fā)工具,是一個(gè)完整的集成開發(fā)環(huán)境(IDE),包括文本編輯器、格式編排器、語(yǔ)法檢查器、源代碼調(diào)試器檢驗(yàn)和監(jiān)程管理系統(tǒng)、上下文相關(guān)幫助等,它增強(qiáng)并擴(kuò)展了AutoLISP語(yǔ)言。Visual LISP兼容AutoLISP程序。在Visual LISP集成環(huán)境下可以便捷、高效地開發(fā)AutoLISP程序,可以經(jīng)過(guò)編譯得到運(yùn)行效率高、代碼緊湊、源代碼受到保護(hù)的應(yīng)用程序。
一些較為復(fù)雜的三維、二維函數(shù)曲線在數(shù)學(xué)函數(shù)圖樣分析和工程設(shè)計(jì)分析中會(huì)經(jīng)常用到,機(jī)械行業(yè)用到的三維軟件如UG,Pro/E等及工程領(lǐng)域用到的MATLAB等都有繪制三維函數(shù)曲線圖形的功能,鑒于AutoCAD目前還不能實(shí)現(xiàn)這樣的功能,因此筆者對(duì)AutoCAD二次開發(fā),添加了三維函數(shù)曲線命令,可以在AutoCAD中繪制各種三維,二維函數(shù)曲線。
2 問(wèn)題分析與程序原理
常用三維公式曲線表示形式有:笛卡爾坐標(biāo)系方程、圓柱坐標(biāo)系方程、球坐標(biāo)系方程。在AutoCAD中都可以輸入相應(yīng)形式的坐標(biāo)數(shù)據(jù)繪圖。
笛卡爾坐標(biāo)系即三維空間直角坐標(biāo)系,其方程是形如[X=ft; Y=ft; Z=ft]所組成的參數(shù)方程組,t為自變量,X、Y、Z為因變量,因此直觀的可以得到函數(shù)曲線上的點(diǎn)坐標(biāo)。圓柱坐標(biāo)系是基于圓柱體的空間坐標(biāo)系,其方程形如[R=ft; θ=ft; Z=ft]所組成的參數(shù)方程組。球坐標(biāo)系是基于球體的空間坐標(biāo)系,其方程形如[R=ft ; θ=ft ; Φ=ft]。由于柱坐標(biāo)方程和球坐標(biāo)方程均可變換為笛卡爾坐標(biāo)方程,因此在程序中最終會(huì)以笛卡爾坐標(biāo)的形式獲取函數(shù)曲線上點(diǎn)的坐標(biāo),這樣方便程序的坐標(biāo)數(shù)據(jù)處理。
使用者不需要將柱坐標(biāo)和球坐標(biāo)方程轉(zhuǎn)換為笛卡爾坐標(biāo)方程再輸入表達(dá)式,程序本身自帶換算功能,相比較于UG和Pro/E中只允許輸入笛卡爾坐標(biāo)方程來(lái)說(shuō),減少了用戶的計(jì)算量,提高了繪圖速度和便捷性。
程序繪制曲線的辦法是采用Spline命令創(chuàng)建“真實(shí)”的樣條曲線即NURBS曲線,等步距取點(diǎn)完成作圖。與等誤差法比較雖有其缺點(diǎn),如相同的精度計(jì)算步數(shù)較多,但也有其優(yōu)點(diǎn),如程序編寫簡(jiǎn)單,計(jì)算量小、對(duì)周期函數(shù)容易選擇恰當(dāng)?shù)牟骄鄟?lái)保證圖形的對(duì)稱性、函數(shù)的取值范圍不影響圖形的平滑性和對(duì)稱性。
程序的主要原理如下:
1)根據(jù)程序需要?jiǎng)?chuàng)建相應(yīng)的對(duì)話框即DCL文件,對(duì)各個(gè)控件進(jìn)行布局。
2)編輯運(yùn)行程序的LISP主文件,調(diào)用對(duì)話框,響應(yīng)用戶輸入,實(shí)現(xiàn)對(duì)函數(shù)曲線的預(yù)覽和繪圖。
3)程序中處理函數(shù)公式時(shí)不能用字符t、e作為參數(shù)字符,因?yàn)閠是Lisp的保留字,e為數(shù)學(xué)專用字符。
4)預(yù)覽提供主視、左視、俯視與西南軸側(cè)四種方位,以供使用者在實(shí)際作圖前有效參考并修改相關(guān)函數(shù)曲線的各類參數(shù)。
5)在每次響應(yīng)預(yù)覽、確定動(dòng)作時(shí),程序都要進(jìn)行自檢,判斷使用者輸入的參數(shù)、表達(dá)式等是否存在語(yǔ)法錯(cuò)誤,計(jì)算的結(jié)果是否符合規(guī)定,能否進(jìn)行完整的運(yùn)算,如果存在錯(cuò)誤則自行退出程序并給出相關(guān)錯(cuò)誤類型的提示,以免造成程序崩潰、死循環(huán)等不可預(yù)見的情況。
6)預(yù)覽對(duì)話框中采用線段作圖,實(shí)際作圖采用Spline命令對(duì)曲線進(jìn)行擬合。
7)程序幫助是必不可少的,可用調(diào)用對(duì)話框的方式,將要顯示的內(nèi)容寫在程序中,按下幫助按鈕,顯示幫助內(nèi)容,提供在線幫助。
3 應(yīng)用
程序在VLISP下編輯、檢查、運(yùn)行,當(dāng)確認(rèn)無(wú)誤后可以將其保存在CAD的support目錄下,文件名自定。用appload命令加載主程序文件即可以使用。如果每次打開CAD都有可能用到此命令則將其添加到“啟動(dòng)組”中,以便每次啟動(dòng)CAD時(shí)自動(dòng)加載該程序。為加快CAD系統(tǒng)的啟動(dòng),可以將命令添加到某菜單組中,方法是在 .mns或 .mnu文件下拉菜單中添加如下一行:
ID_Fun-curve [函數(shù)曲線(&F;)]^P(load "文件名")^P ^C^C_fa
重載菜單組,則當(dāng)選中此菜單項(xiàng)才加載此程序,之后方可在命令行使用。對(duì)于較大的程序,這樣做可以加速系統(tǒng)的啟動(dòng),增大內(nèi)存空間。
以下給出錐螺旋曲線、蝴蝶曲線圖例。
(1)錐螺旋線的方程為[X=x*cos b*xY=x*sinb*c*xZ=a*x ] 采用笛卡爾坐標(biāo)系,自變量[x]取值范圍[0~360],步距為1,單位選角度。在X、Y、Z文本框中輸入各自的表達(dá)式(見圖2),選擇某一方向視圖,點(diǎn)擊預(yù)覽查看曲線,按繪圖按鈕拾取坐標(biāo)點(diǎn)畫圖,見圖3。
用此程序可方便地分析函數(shù)中參數(shù)的變化對(duì)曲線形狀的影響,如此例中:參數(shù)a控制螺距大小,影響整個(gè)螺旋線的高度,參數(shù)b控制螺旋線的圈數(shù),b=5即為5圈,參數(shù)c控制曲線生成不規(guī)則螺旋線,當(dāng)a=2,c=2時(shí),曲線變?yōu)閳D4形狀。
參考文獻(xiàn):
[1] 郭秀娟. AutoCAD二次開發(fā)實(shí)用教程[M]. 北京: 機(jī)械工業(yè)出版社, 2014.
[2] 童秉樞. 機(jī)械CAD技術(shù)基礎(chǔ)[M]. 北京: 清華大學(xué)出版社, 1996.
[3] 三維曲線方程大全-百度文庫(kù)[EB/OL]. https://wenku.baidu.com/view/038719fbf705cc175527095f.html.
[4] 張巖, 吳水根. MATLAB優(yōu)化算法[M]. 北京: 清華大學(xué)出版社, 2017.
[5] 詹建新. UG10.0造型設(shè)計(jì)、模具設(shè)計(jì)與數(shù)控編程實(shí)例精講[M]. 北京: 清華大學(xué)出版社, 2017.
【通聯(lián)編輯:謝媛媛】