您當(dāng)前的位置:主頁>>AutoCAD>>AutoCAD二次開發(fā)  
           Visual LISP開發(fā)三維圓柱螺旋線程序

    摘 要  本文介紹了用AutoCAD 2000 中的Visual LISP開發(fā)工具開發(fā)三維圓柱螺旋線程序,給出了開發(fā)程序代碼和運(yùn)行結(jié)果,以及三維彈簧、螺紋繪制實(shí)例。
   關(guān)鍵詞  Visual LISP 三維 圓柱螺旋線  

   1、 引言
   在眾多的AutoCAD開發(fā)工具中,AutoLISP是使用最簡單、應(yīng)用最廣泛、使用者最多的一種開發(fā)工具。但是,AutoLISP只是一種解釋型語言,且不能加密。為了解決這個(gè)問題,Autodesk公司在AutoCAD R14中推出了Visual LISP的測試版,隨后在AutoCAD 2000中推出了Visual LISP的正式版本。Visual LISP完全兼容以前的AutoLISP,同時(shí)應(yīng)用了AutoCAD的另一個(gè)開發(fā)工具-----ObjectARX面向?qū)ο蠹夹g(shù)和ActiveX技術(shù),使Visual LISP開發(fā)的應(yīng)用程序功能更強(qiáng)大,運(yùn)行速度更快,從而真正成為一個(gè)能開發(fā)商業(yè)軟件的開發(fā)平臺。本文作者采用AutoCAD 2000 中的Visual LISP進(jìn)行了三維圓柱螺旋線程序開發(fā),并與AutoCAD 2000交互繪圖結(jié)合,快速繪制三維螺紋和彈簧。
   2、 問題的提出
   筆者在用AutoCAD 2000繪制三維工程圖時(shí),經(jīng)常遇到繪制螺紋、彈簧這類三維圓柱螺旋線的問題。在AutoCAD中,繪制三維線的命令有很多,如Line、3Dpoly、Spline等命令,而可以作為三維拉伸路徑的線只有3Dpoly命令繪出的線可以勝任,而且不能使用其中的擬合項(xiàng)。因此,為了保證繪制的三維圓柱螺旋線尺寸精確,就必須輸入大量精確數(shù)據(jù),才能一點(diǎn)一點(diǎn)地畫出所需的螺旋線,這樣做起來非常麻煩。有關(guān)資料介紹采用圓弧近似構(gòu)成螺旋線[1],但是這樣畫出的螺紋不能通過裝配干涉檢查。由于在AutoCAD中不方便繪制螺旋線,為了解決這個(gè)問題,筆者采用編制一個(gè)LISP程序來實(shí)現(xiàn)。該程序可以實(shí)現(xiàn)圓柱螺旋線自動繪圖,不僅可以用于繪制彈簧螺旋線和螺紋的螺紋線。還可以進(jìn)行參數(shù)化繪圖。
   3、 圓柱螺旋線的繪制
   3.1 圓柱螺旋線數(shù)學(xué)模型
   * 圓柱螺旋線的形成
   圓柱螺旋線是技術(shù)上應(yīng)用最廣的空間曲線,其形成如圖1所示。一動點(diǎn)M沿圓柱的母線AB作等速直線運(yùn)動,而該母線又繞圓柱的軸線作等角速旋轉(zhuǎn)時(shí),點(diǎn)M的運(yùn)動軌跡即為圓柱螺旋線。
   * 數(shù)學(xué)模型
   當(dāng)圓柱螺旋線的軸線與坐標(biāo)系的Z軸重合時(shí),    
   圓柱螺旋線上動點(diǎn)M(x,y,z)的參數(shù)方程如下:   
   x=rcosα                 
   y=rsinα
   z=±t1*α/(2π)           
   在參數(shù)方程中:r為圓柱面的半徑,α為螺旋線升角,t1為導(dǎo)程(即母線AB旋轉(zhuǎn)一周時(shí),動點(diǎn)M沿軸線方向上升的距離),右旋取正號,左旋取負(fù)號。
   3.2 程序框圖
   開始

  參數(shù)r、t1、k賦值    

  給出基點(diǎn)坐標(biāo)

  計(jì)算x, y, z各點(diǎn)坐標(biāo)

  繪制螺旋線

  結(jié)束

  3.3 程序代碼
   打開AutoCAD2000進(jìn)入Visual LISP開發(fā)環(huán)境,新建一個(gè)文件,在Visual LISP文本編輯器窗口進(jìn)行程序代碼編制!  
   繪制圓柱螺旋線的AutoLISP程序代碼如下:

  ; This program is using for drawing a helix

  (setq b1 (getpoint "請輸入基點(diǎn):"))   

  (setq r (getreal "半徑 r=:"))

  (setq t1 (getreal "節(jié)距 t1=:"))

  (setq k (getint "段數(shù) k=:"))

  (setq n (getint "圈數(shù) n=:")) 

  (setq ta (/ (* 2 3.14159) k))

  (setq j1 (/ t1 k))

  (setq a 0)

  (setq jj 0)

  (setq ii 0)

  (command "ucs" "o" b1)

  (command "3dpoly" (list r 0 0))

  (repeat n

  (repeat k

  (setq jj (+ jj 1))

  (setq a (+ ta a))

  (setq x (* r (cos a)))

  (setq y (* r (sin a)))

  (setq z (* j1 jj))

  (setq p2 (list x y z))

  (command p2)

  )

  (setq ii (+ ii 1))

  (setq z (* t1 ii))

  )

  (command "" )

  段數(shù)k 最好為36或36的倍數(shù)(72)。繪彈簧時(shí),n為彈簧的總?cè)?shù);繪螺紋時(shí),若螺紋的長度為L,則n=L / t1。將這個(gè)LISP程序保存為“helix.lsp"。
   在編寫LISP程序時(shí),應(yīng)注意輸入一定要正確,括號和空格都必不可少,否則會影響到螺旋線的軌跡。
   3.4 程序運(yùn)行結(jié)果

  加載并運(yùn)行 "helix.lsp" 程序,首先在AutoCAD2000繪圖窗口命令行出現(xiàn)提示,按提示輸入?yún)?shù)r、t1、k、n值后,螺旋線即畫好。
   4、 應(yīng)用
   * 繪制彈簧
   在AutoCAD2000 繪圖窗口改變坐標(biāo)系,用“畫圓”的命令繪制彈簧截面,再將螺旋線作為彈簧拉伸路徑拉伸,進(jìn)行適當(dāng)剖切繪制支承段即畫好如圖5所示彈簧。
   我們繪制的彈簧參數(shù)如下:
   外徑D=14mm,d=1mm,節(jié)距t=4mm,有效圈數(shù)n1=10,支承圈數(shù)n2=2.5,右旋。
   * 繪制螺紋
   如果用“畫多邊形”的命令繪制三角形或矩形截面,再將螺旋線作為螺紋拉伸路徑拉伸。然后進(jìn)行適當(dāng)修整,我們可以得到如圖6 所示螺紋。
   5、 結(jié)論
   (1) 在Visual LISP開發(fā)環(huán)境加載并運(yùn)行圓柱螺旋線AutoLISP程序,在AutoCAD2000繪圖窗口命令行后,按提示輸入不同的參數(shù),即可繪制所需要的三維圓柱螺旋線。故此,可以參數(shù)化快速繪制各種三維螺紋和彈簧。
   (2)以前AutoLISP應(yīng)用程序要另找文本編輯器編寫源代碼,然后回到AutoCAD中加載運(yùn)行,不便于程序的調(diào)試。用Visual LISP 集成開發(fā)環(huán)境,我們可以在一個(gè)單獨(dú)的環(huán)境中執(zhí)行文本編輯、程序調(diào)試、與AutoCAD及其他應(yīng)用程序的交互等操作,極大地方便了AutoCAD的二次開發(fā),滿足技術(shù)人員AutoCAD的二次開發(fā)需要。

民眾工作室.制作      版權(quán)所有