版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 計算機輔助設計課程設計</p><p> 題 目: 基于VBA的零件參數(shù)化模型構(gòu)建 </p><p> 學生姓名: XXX 學 號: </p><p> 學 院: 機械工程學院 </p><p> 專 業(yè):
2、 機械設計制造及其自動化 </p><p> 班 級: 機械XXX班 </p><p> 指導教師: XXX(教授) XXX(講師) </p><p><b> 年 月</b></p><p><b> 目錄</b>&
3、lt;/p><p><b> 1.緒論1</b></p><p> 1.1課程設計性質(zhì)及目的1</p><p> 1.2設計工作簡介2</p><p> 1.3三維CAD軟件SolidWorks簡介2</p><p><b> 2任務分析3</b></p
4、><p> 2.1課程設計任務3</p><p> 2.1.1課程設計的內(nèi)容3</p><p> 2.1.2具體零件參數(shù)化設計的基本要求3</p><p> 2.2參數(shù)化建模零件結(jié)構(gòu)與參數(shù)構(gòu)成特點3</p><p><b> 2.3實現(xiàn)方案4</b></p><
5、p> 3課題內(nèi)容的實現(xiàn)6</p><p><b> 4結(jié)語26</b></p><p><b> 5參考文獻27</b></p><p><b> 緒論</b></p><p> CAD是Computer Aided Design 的簡稱,即計算機輔助設計
6、,是由計算機完成產(chǎn)品設計中的計算、分析、模擬、制圖、編制技術(shù)文件等工作,由計算機輔助設計人員完成產(chǎn)品的全部設計過程,最后輸出滿意的設計結(jié)果和產(chǎn)品圖紙的一種機械設計方法。它是最近幾十年來迅速發(fā)展起來并得到廣泛應用的多學科綜合性的新。1973年,國際信息處理聯(lián)合會給CAD 下了一個更廣義的解釋 “CAD 是將人和機器混編在解題專業(yè)中的一種技術(shù),從而使人和機器的最好特性聯(lián)系起來”CAD 技術(shù)的應用適應了當前產(chǎn)品需提高設計質(zhì)量,快速更新?lián)Q代的需
7、求。</p><p> Visual Basic for Applications(VBA)是一種Visual Basic的一種宏語言,主要能用來擴展Windows的應用程式功能,特別是Microsoft Office軟件。也可說是一種應用程式視覺化的Basic Script。</p><p> CAD技術(shù)的發(fā)展極大地改變了人們的設計手段和方法,更為重要的是CAD技術(shù)的廣泛應用顯著提高
8、了設計的效率和質(zhì)量。CAD技術(shù)是企業(yè)技術(shù)創(chuàng)新、市場開拓的強有力的技術(shù)工具和手段。CAD技術(shù)的發(fā)展和推廣不僅受到國家和企業(yè)的重視,更為廣大工程技術(shù)人員關(guān)心。 此次課程設計的過程:首先利用CAD繪制圖形并確定點圖;然后,確定參數(shù)和尺寸參數(shù)表并列出編程點表;最后,利用VBA進行編程并調(diào)試程序。利用VBA軟件進行設計目的在于,將繪制圖形和軟件編程的知識聯(lián)系起來,加深所學知識的理解。同時了解編程技術(shù)的發(fā)展趨勢,掌握零</p><
9、;p> 件的編程方法,感受現(xiàn)代CAD技術(shù)的先進性。</p><p> 此次課程設計是高等院校機械專業(yè)類各專業(yè)實踐性很強的,重要的課程設計。針對各用人單位對大學畢業(yè)生人才技能需要,對于工科專業(yè)的大學生,在培養(yǎng)過程中學生應該自主加強自己的實踐動手能力。該課程設計其主要的研究對象有兩個:一個是關(guān)于繪制二維圖,另一個是關(guān)于軟件編程。</p><p> 通過本課程設計的學習,使學生了解或
10、掌握VBA語言對Autocad二次開發(fā)的相關(guān)知識,訓練或培養(yǎng)運用VBA語言進行程序設計與開發(fā)的技能,為今后繼續(xù)對程序設計的學習奠定基礎。</p><p> 1.1課程設計性質(zhì)及目的</p><p> 本次設計是在我們學完了大學的全部基礎課、技術(shù)基礎課以及專業(yè)課之后而進行。此次的設計是對大學期間所學各課程及相關(guān)的應用繪圖軟件的一次深入的綜合性的總復習,也是一次理論聯(lián)系實際的訓練。其目的在
11、于:</p><p> (1)鞏固我們在大學里所學的知識,也是對以前所學知識的綜合性的檢驗;</p><p> (2)加強我們查閱資料的能力,熟悉有關(guān)資料;</p><p> (3)樹立正確的設計思想,掌握設計方法,培養(yǎng)我們的實際工作能力。</p><p> 本次設計的主要內(nèi)容為:首先運用AutoCAD軟件繪制法蘭盤的二維零件圖,然后
12、運用VBA語言對其進行編程,實現(xiàn)法蘭盤二維圖形的繪制。</p><p><b> 1.2設計工作簡介</b></p><p> 基于VBA的參數(shù)化編程允許用戶對AutoCAD進行二次開發(fā),由用戶輸入(或選擇)參數(shù)值,程序自動繪制相應的圖形。其編程的一般步驟是先由用戶輸入一個基準點,然后根據(jù)基準點計算出其它各點的位置,調(diào)用AutoCAD命令進行繪圖,最后還要對繪制的
13、圖形進行編輯修改,達到最終的效果,具體來說,二維、三維參數(shù)化編程主要分為下面幾個步驟:</p><p> ?。?)繪制圖形并確定點圖;</p><p> ?。?)確定參數(shù)和尺寸參數(shù)表;</p><p> ?。?)列出編程點表;</p><p><b> (4)初步編程;</b></p><p>
14、<b> ?。?)調(diào)試。</b></p><p> 1.3三維CAD軟件SolidWorks簡介</p><p> SolidWorks軟件是世界上第一個基于Windows開發(fā)的三維CAD系統(tǒng),由于技術(shù)創(chuàng)新符合CAD技術(shù)的發(fā)展潮流和趨勢,SolidWorks公司于兩年間成為CAD/CAM產(chǎn)業(yè)中獲利最高的公司。良好的財務狀況和用戶支持使得SolidWorks每年都有
15、數(shù)十乃至數(shù)百項的技術(shù)創(chuàng)新,公司也獲得了很多榮譽。該系統(tǒng)在1995-1999年獲得全球微機平臺CAD系統(tǒng)評比第一名;從1995年至今,已經(jīng)累計獲得十七項國際大獎,其中僅從1999年起,美國權(quán)威的CAD專業(yè)雜志CADENCE連續(xù)4年授予SolidWorks最佳編輯獎,以表彰SolidWorks的創(chuàng)新、活力和簡明。至此,SolidWorks所遵循的易用、穩(wěn)定和創(chuàng)新三大原則得到了全面的落實和證明,使用它,設計師大大縮短了設計時間,產(chǎn)品快速、高效
16、地投向了市場。</p><p> Solidworks軟件功能強大,組件繁多。 Solidworks 功能強大、易學易用和技術(shù)創(chuàng)新是SolidWorks 的三大特點,使得SolidWorks 成為領先的、主流的三維CAD解決方案。SolidWorks 能夠提供不同的設計方案、減少設計過程中的錯誤以及提高產(chǎn)品質(zhì)量。SolidWorks 不僅提供如此強大的功能,同時對每個工程師和設計者來說,操作簡單方便、易學易用。
17、</p><p> 對于熟悉微軟的Windows系統(tǒng)的用戶,基本上就可以用SolidWorks 來搞設計了。SolidWorks獨有的拖拽功能使用戶在比較短的時間內(nèi)完成大型裝配設計。SolidWorks資源管理器是同Windows資源管理器一樣的CAD文件管理器,用它可以方便地管理CAD文件。使用SolidWorks ,用戶能在比較短的時間內(nèi)完成更多的工作,能夠更快地將高質(zhì)量的產(chǎn)品投放市場。</p>
18、<p><b> 2任務分析</b></p><p><b> 2.1課程設計任務</b></p><p> 本課程設計任務就是利用通用二維CAD軟件AutoCAD 2004,建立典型零件參數(shù)化模型,基于Access數(shù)據(jù)庫及ADO技術(shù)實現(xiàn)AutoCAD環(huán)境下零件系列化模型的建立。</p><p> 2
19、.1.1課程設計的內(nèi)容</p><p> 參數(shù)化設計是CAD技術(shù)應用中解決系列化產(chǎn)品設計的常用技術(shù)手段,通用機械設計軟件AutoCAD支持利用VBA(Visual Basic for Application)技術(shù)對其進行二次開發(fā)。本課程設計利用通用二維CAD軟件AutoCAD 2004,建立典型零件參數(shù)化模型,基于Access數(shù)據(jù)庫及ADO技術(shù)實現(xiàn)AutoCAD環(huán)境下零件系列化模型的建立。完成該課程設計,有利于
20、學生理解典型設計環(huán)境下參數(shù)化建模的構(gòu)建原理及數(shù)據(jù)庫開發(fā),有利于學生掌握參數(shù)化設計的原理、實現(xiàn)方法與手段。</p><p> 2.1.2具體零件參數(shù)化設計的基本要求</p><p> 按照隨課程設計任務書下達的典型系列零件技術(shù)資料,在AutoCAD環(huán)境下完成給定零件參數(shù)化模型的構(gòu)建并實現(xiàn)參數(shù)驅(qū)動:</p><p> 查閱資料,熟悉參數(shù)化繪圖的研究現(xiàn)狀,了解各種建
21、模環(huán)境下的開發(fā)工具;</p><p> 結(jié)合課程學習中對AutoCAD二次開發(fā)的介紹,學習基于VBA的開發(fā)技術(shù)以及ADO數(shù)據(jù)庫開發(fā)原理,掌握AutoCAD環(huán)境下參數(shù)化繪圖的步驟;</p><p> 研究與分析給定典型零件的結(jié)構(gòu)特點,明確零件參數(shù)化模型的結(jié)構(gòu)參數(shù)構(gòu)成、相互關(guān)聯(lián)關(guān)系,繪制點圖及點表;</p><p> 利用VBA技術(shù),以ADO數(shù)據(jù)庫開發(fā)技術(shù)為基礎,
22、編程實現(xiàn)圖層設置以及典型零件的參數(shù)化繪圖,實現(xiàn)AutoCAD環(huán)境下的直接參數(shù)修改與驅(qū)動。</p><p> 2.2參數(shù)化建模零件結(jié)構(gòu)與參數(shù)構(gòu)成特點</p><p> 零件結(jié)構(gòu)具有對稱性,符合這種特點的圖形,在編程中只需繪出一個單元圖,其余通過鏡像、復制、循環(huán)語句即可繪出,這在編程中也是很重要的,它可以大大降低編程的工作量,提高程序的質(zhì)量。</p><p> 參
23、數(shù)構(gòu)成的特點是其中有些參數(shù)是獨立的,需要由用戶交互式輸入,有些參數(shù)是不獨立的,可能與某些獨立參數(shù)相關(guān),只需保留獨立參數(shù),不獨立參數(shù)通過計算得到即可;而且通常標準件在手冊上給出了圖形各個尺寸參數(shù)的表格,技術(shù)人員需要根據(jù)表格中的參數(shù)及數(shù)據(jù),將其輸入使得計算機或CAD軟件能夠應用它們。此外,有些參數(shù)比較多,像化工上用的法蘭或螺釘標準件,編程的參數(shù)太多,使得其工作量增加很多,有些參數(shù)對于設計人員來說是不重要的,此時將其適當簡化是應該的,比如倒角
24、半徑、螺紋內(nèi)外直徑差、一些非常小的無關(guān)尺寸,當然一定是不重要的尺寸可以簡化,重要的尺寸決不能采用這種方法,由此達到盡可能簡化參數(shù)的數(shù)量,降低編程的工作量。當然也要注意圖形的簡化,有些圖形真實的結(jié)果是非常復雜的,甚至有時用編程方法繪制相當麻煩,比如螺栓的頭部圓角,法蘭的各個側(cè)面的倒角,此時應該將圖形的圓角或倒角忽略,適當?shù)暮雎栽趨?shù)化編程中是允許的,只要標注正確即可。最后要注意重新命名:在設計手冊常用件、標準件的參數(shù)化尺寸表中,通常有些不
25、同參數(shù)名稱是一樣的,例如D、d、R、r,這些參數(shù)指代的不是同一內(nèi)容,此時需要重新命名這些變量,比如用D1、D2、R1、</p><p><b> 2.3實現(xiàn)方案</b></p><p> ?。?)繪制圖形并確定點圖</p><p> ①交互繪制:拿到一個圖形,首先要進行分析,這是必不可少的步驟。先要交互將圖形繪制出來。</p>
26、<p> ?、诖_定基點和其它點名:基點就是用戶繪圖的插入點,要根據(jù)實際情況確定,例如圓的基準點一般選擇圓心,螺釘類圖形通常選其結(jié)合面的中心點等。用文字命令將點名寫到交互繪制圖形上,例如0、1、2…n以便后面編程用到時候方便。</p><p> ③復雜圖形:如果圖形復雜,應該找出其相似的部分,單獨編成函數(shù),這樣可以減少程序的代碼量。</p><p> ?、芴攸c分析:對稱性、重復
27、性、循環(huán)性是某些編程圖形的特點,符合這種特點的圖形,在編程中只需繪出一個單元圖,其余通過鏡像、復制、循環(huán)語句即可繪出,這在編程中也是很重要的,它可以大大降低編程的工作量,提高程序的質(zhì)量。</p><p> ?。?)確定參數(shù)和尺寸參數(shù)表</p><p> ①獨立參數(shù):參數(shù)化編程必須有參數(shù),注意有些參數(shù)是獨立的,需要由用戶交互式輸入,有些參數(shù)是不獨立的,可能與某些獨立參數(shù)相關(guān),只需保留獨立參
28、數(shù),不獨立參數(shù)通過計算得到即可;</p><p> ?、诔叽鐓?shù)表:此外通常標準件在手冊上給出了圖形各個尺寸參數(shù)的表格,技術(shù)人員需要根據(jù)表格中的參數(shù)及數(shù)據(jù),將其輸入使得計算機或CAD軟件能夠應用它們。</p><p> ?、蹍?shù)取舍:有些參數(shù)比較多,像化工上用的法蘭或螺釘標準件,編程的參數(shù)太多,使得其工作量增加很多,有些參數(shù)對于設計人員來說是不重要的,此時將其適當簡化是應該的,比如倒角半徑
29、、螺紋內(nèi)外直徑差、一些非常小的無關(guān)尺寸,當然一定是不重要的尺寸可以簡化,重要的尺寸決不能采用這種方法,由此達到盡可能簡化參數(shù)的數(shù)量,降低編程的工作量。</p><p> ?、軋D形簡化:有些圖形真實的結(jié)果是非常復雜的,甚至有時用編程方法繪制相當麻煩,比如螺栓的頭部圓角,法蘭的各個側(cè)面的倒角,此時應該將圖形的圓角或倒角忽略,適當?shù)暮雎栽趨?shù)化編程中是允許的,只要標注正確即可。</p><p>
30、 ?、葜匦旅涸谠O計手冊常用件、標準件的參數(shù)化尺寸表中,通常有些不同參數(shù)名稱是一樣的,例如D、d、R、r,這些參數(shù)指代的不是同一內(nèi)容,此時需要重新命名這些變量,比如用D1、D2、R1、R2等名稱重新命名,因為程序中這些變量不分大小寫,所以尺寸參數(shù)表和手冊中的標準參數(shù)表的變量名稱有時是不一樣的,編程者務必注意這樣的事情。</p><p><b> (3)列出編程點表</b></p&g
31、t;<p> 基準點和參數(shù)確定后,下面就需要列表計算其它各點的坐標位置,所有這些點都是根據(jù)基點和各個已知參數(shù)計算出來的,注意為了編程過程中不亂并便于檢查程序,應該將其以文本表格形式列出,其具體形式請參見后面實例中的編程點表。</p><p><b> ?。?)初步編程</b></p><p> 有了點圖、尺寸參數(shù)表、編程點表,就可以用進入Visual
32、 Basic編輯器,開始編程。點擊AutoCAD環(huán)境中的【工具】|【宏】|【Visual Basic 編輯器】菜單,進入VBA編輯環(huán)境??梢栽赩BA環(huán)境中插入窗體,設計VB風格的界面。將上述點圖、尺寸參數(shù)表、編程點表作為重要依據(jù),進行點和參數(shù)語句的編程,有時為了輸入數(shù)據(jù)的簡單,先提前賦值給某些變量,或調(diào)用數(shù)據(jù)庫中的參數(shù),直至最后能夠用程序繪制出該圖形。這里一定要熟悉在VBA環(huán)境中調(diào)用CAD命令的格式,避免出錯。</p>&
33、lt;p><b> ?。?)調(diào)試</b></p><p> 任何一位編程人員也不敢保證他所編的程序一點錯誤也沒有,出錯是在所難免的,這就需要調(diào)試,試運行程序。設置斷點、跟蹤變量都是調(diào)試程序的助手。此外還有可能需要在程序中加入尺寸參數(shù)表數(shù)據(jù),再進一步調(diào)試,這一步調(diào)通意味著程序運行可以實現(xiàn)多組數(shù)據(jù)繪圖。如果有必要,AutoCAD可對源代碼進行工程級加密的功能,保護編程者的勞動。</
34、p><p> 注意:三維參數(shù)化編程除了要遵循上述主要步驟之外,還需要注意以下幾點:</p><p> ?、倬幊讨杏嬎泓c的時候,盡量不要變換坐標系,除非萬不得已不動;</p><p> ?、诎才藕每臻g點的位置,注意其變化;</p><p> ?、郾M量多用三維旋轉(zhuǎn)Rotate3d、移動Move等命令。</p><p><
35、;b> 3課題內(nèi)容的實現(xiàn)</b></p><p> 在化工管道中,法蘭連接的使用十分廣泛,法蘭連接是化工制圖中常用圖形。環(huán)連接面整體鋼制管法蘭的剖面圖見圖1,該圖是左右對稱的結(jié)構(gòu),可以先繪制右側(cè)部分,然后使用鏡像命令復制出左側(cè)部分。其點圖、尺寸參數(shù)表、點表如下所示:</p><p> 圖1 環(huán)連接面整體鋼制管法蘭</p><p><b&
36、gt; 圖2 法蘭點圖</b></p><p> 表1環(huán)連接面整體鋼制管法蘭尺寸參數(shù)表</p><p> 我們以p0點為該圖形的起點(插入點),xx,S0,SL,l,n,f, p,d,k,dd,e,c為參數(shù),確定p0~p17各點的坐標為:</p><p><b> 表2 法蘭點表</b></p><p&g
37、t; 接下來,就可以進行基于VBA的參數(shù)化編程。</p><p> (1)為了使用方便,首先在D盤根目錄下構(gòu)建名為“falanpan.mdb”的Access數(shù)據(jù)庫,在庫中創(chuàng)建一個名為“csb”的表格,存放各個參數(shù)數(shù)據(jù),構(gòu)建各個字段(注意順序不能改變,否則后面的程序按字段順序提取數(shù)據(jù)時會出錯)。如圖3所示,然后將表1中各個參數(shù)輸入到數(shù)據(jù)庫中(具體步驟請參考Access資料)。</p><p&
38、gt; 圖3 構(gòu)建數(shù)據(jù)庫字段</p><p> ?。?)啟動AutoCAD,點擊【工具】|【宏】|【Visual Basic 編輯器】菜單,進入VBA編輯環(huán)境。在右側(cè)“工程”項中點擊鼠標右鍵,選擇【插入】|【用戶窗體】在VBA環(huán)境中插入一個用戶窗體。接下來,在出現(xiàn)的“工具箱”中,單擊鼠標右鍵,選擇“附加控件”,向工具箱中添加“Microsoft ADO Data Control 6.0(SP4)(OLEDB)”
39、控件,以備用ADO方式訪問參數(shù)庫,如圖5所示。</p><p> 圖4 在VBA環(huán)境中插入用戶窗體</p><p> 圖5 向工具箱添加ADO控件</p><p> (3)向用戶窗體添加該Adodc控件,并將其“Visible”屬性設為“False”以隱藏該控件。同時添加一個列表框、幾個標簽控件和幾個文本框控件,為文本框命名與標簽對應的名字(參見圖6以及后面的
40、ListBox1_Click函數(shù)),添加圖像控件和兩個按鈕控件,并調(diào)整位置,然后向圖像控件引入法蘭圖片,設置窗體和按鈕“Caption”屬性,如圖6所示。</p><p> 圖6 窗體控件示意圖</p><p> ?。?)雙擊用戶窗體,進入代碼界面,首先在代碼的最上端聲明通用變量:</p><p> Dim Falanpan_Con As ADODB.Conne
41、ction</p><p> Dim Falanpan_Rec As ADODB.Recordset</p><p> 其中,F(xiàn)alanpan_Con和Falanpan_Rec,分別作為數(shù)據(jù)庫對象和數(shù)據(jù)集對象。選擇窗體的“Initialize”響應函數(shù),該函數(shù)負責連接數(shù)據(jù)庫,向列表框添加數(shù)據(jù)庫中法蘭盤的各參數(shù)數(shù)據(jù)。Initialize函數(shù)代碼如下:</p><p&g
42、t; Private Sub UserForm_Initialize()</p><p> '以ADO方式打開數(shù)據(jù)庫</p><p> Set Falanpan_Con = New ADODB.Connection</p><p> Set Falanpan_Rec = New ADODB.Recordset</p><p>
43、 Dim SQL As String</p><p> SQL = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\falanpan.mdb" '數(shù)據(jù)庫</p><p> 的路徑不同則這里需要修改</p><p> Falanpan_Con.Open SQL</p>
44、<p> Falanpan Rec.Open “csb”, Falanpan Com, adOpenDynamic, adLockBatchOptimistic</p><p> '計算打開的數(shù)據(jù)表中有幾條記錄</p><p> On Error Resume Next</p><p> Dim count1 As Integer</
45、p><p> count1 = 0</p><p> Falanpan_Rec.MoveFirst</p><p> Do While Not Falanpan_Rec.EOF</p><p> count1 = count1 + 1</p><p> Falanpan_Rec.MoveNext</p>
46、;<p><b> Loop</b></p><p> '數(shù)據(jù)庫的指針指向第一條記錄</p><p> Falanpan_Rec.MoveFirst</p><p><b> '向列表框添加記錄</b></p><p> ListBox1.ColumnCoun
47、t = 6</p><p> ListBox1.AddItem</p><p> ListBox1.List(0, 0) = "型號"</p><p> ListBox1.List(0, 1) = "D"</p><p> ListBox1.List(0, 2) = "d"&
48、lt;/p><p> ListBox1.List(0, 3) = "K"</p><p> ListBox1.List(0, 4) = "L"</p><p> ListBox1.List(0, 5) = "n"</p><p> For i = 1 To count1</
49、p><p> ListBox1.AddItem Falanpan_Rec(0)</p><p> ListBox1.List(i, 0) = Falanpan_Rec(1)</p><p> ListBox1.List(i, 1) = Falanpan_Rec(2)</p><p> ListBox1.List(i, 2) = Falan
50、pan_Rec(3)</p><p> ListBox1.List(i, 3) = Falanpan_Rec(4)</p><p> ListBox1.List(i, 4) = Falanpan_Rec(5)</p><p> ListBox1.List(i, 5) = Falanpan_Rec(6)</p><p> Falanpa
51、n_Rec.MoveNext</p><p><b> Next</b></p><p><b> '初始選擇確定按鈕</b></p><p> CommandButton1.SetFocus</p><p> '默認選擇第一條記錄</p><p>
52、 ListBox1.Selected(1) = True</p><p><b> End Sub</b></p><p> (5)在窗體上雙擊列表框,編寫列表框的點擊響應函數(shù),實現(xiàn)選擇不同類型法蘭盤時,文本框顯示數(shù)據(jù)的改變,如下所示:</p><p> Private Sub ListBox1_Click() </p>&
53、lt;p> '點擊listbox框的首行,不能繪圖</p><p> If ListBox1.ListIndex = 0 Then</p><p> CommandButton1.Enabled = False</p><p><b> Exit Sub</b></p><p><b>
54、 Else</b></p><p> CommandButton1.Enabled = True</p><p><b> End If</b></p><p> On Error Resume Next</p><p> Falanpan_Rec.MoveFirst</p><p
55、> For i = 1 To ListBox1.ListIndex - 1 '注意:首行已經(jīng)用于顯示字段名,所以,下標為1為第一個記錄</p><p> Falanpan_Rec.MoveNext</p><p><b> Next</b></p><p> TxtD.Text = Falanpan_Rec(2) '
56、;falanpan_rec(0)和(1)分別為ID號和型號</p><p> Txtd2.Text = Falanpan_Rec(3)</p><p> TxtK.Text = Falanpan_Rec(4)</p><p> TxtL.Text = Falanpan_Rec(5)</p><p> Txtn.Text = Falan
57、pan_Rec(6)</p><p> Txtth.Text = Falanpan_Rec(7)</p><p> Txtp.Text = Falanpan_Rec(8)</p><p> Txte.Text = Falanpan_Rec(9)</p><p> Txtf.Text = Falanpan_Rec(10)</p&g
58、t;<p> Txtc.Text = Falanpan_Rec(11)</p><p> Txtn2.Text = Falanpan_Rec(12)</p><p> Txts0.Text = Falanpan_Rec(13)</p><p> Txts1.Text = Falanpan_Rec(14)</p><p>
59、 Txtxx.Text = Falanpan_Rec(15)</p><p><b> End Sub</b></p><p> (6)回到窗體界面,雙擊“確定”按鈕,出現(xiàn)代碼窗口。在這個函數(shù)中,要分別創(chuàng)建粗實線層、中心線層、剖面線層并設置其顏色、線型和線寬并標注數(shù)據(jù)。在繪圖過程中,首先提示輸入基點,然后根據(jù)點表2計算法蘭盤右半側(cè)的各點坐標;接下來調(diào)用繪圖命令繪
60、制圖形。在繪制過程中,用到了繪制直線命令和鏡像命令。剖面線的繪制要先繪制邊界直線,然后在邊界直線圍成的區(qū)域內(nèi)調(diào)用打剖面線命令繪制剖面線。</p><p> Private Sub CommandButton1_Click() '繪制法蘭盤</p><p> '隱藏窗體,以顯示繪圖區(qū)</p><p><b> Me.Hide</b
61、></p><p><b> '設定粗實線層顏色</b></p><p> Dim CSXLayObj As AcadLayer</p><p> Set CSXLayObj = ThisDrawing.Layers.Add("粗實線層")</p><p> CSXLayObj.
62、color = acWhite</p><p> '設定粗實線層的線型</p><p> Dim entObj As AcadLineType</p><p> Dim found1 As Boolean</p><p> found1 = False</p><p> For Each entObj
63、 In ThisDrawing.Linetypes</p><p> If StrComp(entObj.Name, "continuous", 1) = 0 Then</p><p> found1 = True</p><p><b> Exit For</b></p><p><b&
64、gt; End If</b></p><p><b> Next</b></p><p> '如果沒有加載粗實線線型,則從線型文件acad.lin中加載</p><p> If Not (found1) Then</p><p> ThisDrawing.Linetypes.Load &qu
65、ot;continuous", "acad.lin"</p><p><b> End If</b></p><p> CSXLayObj.Linetype = "continuous"</p><p> '設定粗實線層的線寬</p><p> CSXLa
66、yObj.Lineweight = acLnWt030</p><p> Dim currLayer As AcadLayer '用于保存當前圖層的對象變量</p><p> Dim newLayer As AcadLayer '保存新當前圖層的對象變量</p><p> Set currLayer = ThisDrawing.ActiveLa
67、yer</p><p> Set newLayer = ThisDrawing.Layers("粗實線層")</p><p> ThisDrawing.ActiveLayer = newLayer</p><p><b> '輸入插入點</b></p><p> Dim insertP
68、nt As Variant</p><p> On Error GoTo GetPointWrong</p><p> insertPnt = ThisDrawing.Utility.GetPoint(, "請輸入插入點:")</p><p><b> '計算各點坐標</b></p><p&
69、gt; Dim pnt1(0 To 2) As Double</p><p> Dim xx As Double</p><p> xx = CDbl(Txtxx.Text) 'CDbl為將文本數(shù)據(jù)轉(zhuǎn)換成雙精度數(shù)據(jù)函數(shù)</p><p> pnt1(0) = insertPnt(0)</p><p> pnt1(1) = in
70、sertPnt(1) - xx</p><p> pnt1(2) = insertPnt(2) '平面繪圖中,Z坐標為0</p><p> Dim pnt2(0 To 2) As Double</p><p> pnt2(0) = insertPnt(0) + 0.5 * CDbl(Txtn2.Text) - (CDbl(Txts1.Text) - C
71、Dbl(Txts0.Text))</p><p> pnt2(1) = insertPnt(1)</p><p> pnt2(2) = insertPnt(2)</p><p> Dim Pnt3(0 To 2) As Double</p><p> Pnt3(0) = pnt2(0)</p><p> Pn
72、t3(1) = pnt2(1) - (CDbl(Txtxx.Text) - CDbl(Txtc.Text) - CDbl(Txte.Text)) / 3</p><p> Pnt3(2) = insertPnt(2)</p><p> Dim Pnt4(0 To 2) As Double</p><p> Pnt4(0) = insertPnt(0) + 0.
73、5 * CDbl(Txtn2.Text)</p><p> Pnt4(1) = insertPnt(1) - (CDbl(Txtxx.Text) - CDbl(Txtc.Text) - CDbl(Txte.Text))</p><p> Pnt4(2) = insertPnt(2)</p><p> Dim Pnt5(0 To 2) As Double<
74、/p><p> Pnt5(0) = Pnt4(0) + (CDbl(Txtd.Text) - CDbl(Txtn2.Text)) / 2</p><p> Pnt5(1) = Pnt4(1)</p><p> Pnt5(2) = insertPnt(2)</p><p> Dim Pnt6(0 To 2) As Double</p&
75、gt;<p> Pnt6(0) = Pnt5(0)</p><p> Pnt6(1) = Pnt5(1) - CDbl(Txtc.Text)</p><p> Pnt6(2) = insertPnt(2)</p><p> Dim Pnt7(0 To 2) As Double</p><p> Pnt7(0) = Pn
76、t6(0) - (CDbl(Txtd.Text) - CDbl(Txtd2.Text)) / 2</p><p> Pnt7(1) = Pnt6(1)</p><p> Pnt7(2) = insertPnt(2)</p><p> Dim Pnt8(0 To 2) As Double</p><p> Pnt8(0) = Pnt7(
77、0)</p><p> Pnt8(1) = Pnt7(1) - CDbl(Txte.Text)</p><p> Pnt8(2) = insertPnt(2)</p><p> Dim Pnt9(0 To 2) As Double</p><p> Pnt9(0) = insertPnt(0) + 0.5 * CDbl(Txtn2.T
78、ext) - CDbl(Txts1.Text)</p><p> Pnt9(1) = insertPnt(1)</p><p> Pnt9(2) = insertPnt(2)</p><p> Dim Pnt10(0 To 2) As Double</p><p> Pnt10(0) = Pnt9(0)</p><
79、p> Pnt10(1) = Pnt9(1) - CDbl(Txtxx.Text)</p><p> Pnt10(2) = insertPnt(2)</p><p> Dim Pnt11(0 To 2) As Double</p><p> Pnt11(0) = Pnt5(0) - (CDbl(Txtd.Text) - CDbl(Txtk.Text) +
80、 CDbl(Txtl.Text)) / 2</p><p> Pnt11(1) = Pnt5(1)</p><p> Pnt11(2) = insertPnt(2)</p><p> Dim Pnt12(0 To 2) As Double</p><p> Pnt12(0) = Pnt11(0)</p><p>
81、; Pnt12(1) = Pnt11(1) - CDbl(Txtc.Text)</p><p> Pnt12(2) = insertPnt(2)</p><p> Dim Pnt13(0 To 2) As Double</p><p> Pnt13(0) = Pnt11(0) + CDbl(Txtl.Text)</p><p> P
82、nt13(1) = Pnt11(1)</p><p> Pnt13(2) = insertPnt(2)</p><p> Dim Pnt14(0 To 2) As Double</p><p> Pnt14(0) = Pnt12(0) + CDbl(Txtl.Text)</p><p> Pnt14(1) = Pnt12(1)<
83、/p><p> Pnt14(2) = insertPnt(2)</p><p> Dim Pnt15(0 To 2) As Double</p><p> Pnt15(0) = pnt1(0) + (CDbl(Txtp.Text) - CDbl(Txtf.Text)) / 2</p><p> Pnt15(1) = pnt1(1)<
84、/p><p> Pnt15(2) = insertPnt(2)</p><p> Dim Pnt16(0 To 2) As Double</p><p> Pnt16(0) = Pnt15(0) + 0.5 * CDbl(Txtf.Text)</p><p> Pnt16(1) = Pnt15(1) + CDbl(Txtf.Text)&l
85、t;/p><p> Pnt16(2) = insertPnt(2)</p><p> Dim Pnt17(0 To 2) As Double</p><p> Pnt17(0) = Pnt15(0) + CDbl(Txtf.Text)</p><p> Pnt17(1) = Pnt15(1)</p><p> P
86、nt17(2) = insertPnt(2)</p><p> Dim Pnt18(0 To 2) As Double</p><p> Pnt18(0) = 2 * insertPnt(0) - Pnt9(0)</p><p> Pnt18(1) = insertPnt(1)</p><p> Pnt18(2) = insertPn
87、t(2)</p><p> Dim Pnt19(0 To 2) As Double</p><p> Pnt19(0) = 2 * insertPnt(0) - pnt2(0)</p><p> Pnt19(1) = insertPnt(1)</p><p> Pnt19(2) = insertPnt(2)</p>&l
88、t;p> Dim Pnt20(0 To 2) As Double</p><p> Pnt20(0) = 2 * insertPnt(0) - Pnt3(0)</p><p> Pnt20(1) = Pnt3(1)</p><p> Pnt20(2) = insertPnt(2)</p><p> Dim Pnt21(0 To
89、 2) As Double</p><p> Pnt21(0) = 2 * insertPnt(0) - Pnt4(0)</p><p> Pnt21(1) = Pnt4(1)</p><p> Pnt21(2) = insertPnt(2)</p><p> Dim Pnt22(0 To 2) As Double</p>
90、<p> Pnt22(0) = 2 * insertPnt(0) - Pnt11(0)</p><p> Pnt22(1) = Pnt11(1)</p><p> Pnt22(2) = insertPnt(2)</p><p> Dim Pnt23(0 To 2) As Double</p><p> Pnt23(0)
91、 = 2 * insertPnt(0) - Pnt13(0)</p><p> Pnt23(1) = Pnt13(1)</p><p> Pnt23(2) = insertPnt(2)</p><p> Dim Pnt24(0 To 2) As Double</p><p> Pnt24(0) = 2 * insertPnt(0) -
92、 Pnt5(0)</p><p> Pnt24(1) = Pnt5(1)</p><p> Pnt24(2) = insertPnt(2)</p><p> Dim Pnt25(0 To 2) As Double</p><p> Pnt25(0) = 2 * insertPnt(0) - Pnt6(0)</p><
93、;p> Pnt25(1) = Pnt6(1)</p><p> Pnt25(2) = insertPnt(2)</p><p> Dim Pnt26(0 To 2) As Double</p><p> Pnt26(0) = 2 * insertPnt(0) - Pnt14(0)</p><p> Pnt26(1) = Pnt
94、14(1)</p><p> Pnt26(2) = insertPnt(2)</p><p> Dim Pnt27(0 To 2) As Double</p><p> Pnt27(0) = 2 * insertPnt(0) - Pnt12(0)</p><p> Pnt27(1) = Pnt12(1)</p><
95、p> Pnt27(2) = insertPnt(2)</p><p> Dim Pnt28(0 To 2) As Double</p><p> Pnt28(0) = 2 * insertPnt(0) - Pnt7(0)</p><p> Pnt28(1) = Pnt7(1)</p><p> Pnt28(2) = inser
96、tPnt(2)</p><p> Dim Pnt29(0 To 2) As Double</p><p> Pnt29(0) = 2 * insertPnt(0) - Pnt8(0)</p><p> Pnt29(1) = Pnt8(1)</p><p> Pnt29(2) = insertPnt(2)</p><
97、p> Dim Pnt30(0 To 2) As Double</p><p> Pnt30(0) = 2 * insertPnt(0) - Pnt17(0)</p><p> Pnt30(1) = Pnt17(1)</p><p> Pnt30(2) = insertPnt(2)</p><p> Dim Pnt31(0 To
98、 2) As Double</p><p> Pnt31(0) = 2 * insertPnt(0) - Pnt16(0)</p><p> Pnt31(1) = Pnt16(1)</p><p> Pnt31(2) = insertPnt(2)</p><p> Dim Pnt32(0 To 2) As Double</p&g
99、t;<p> Pnt32(0) = 2 * insertPnt(0) - Pnt15(0)</p><p> Pnt32(1) = Pnt15(1)</p><p> Pnt32(2) = insertPnt(2)</p><p> Dim Pnt33(0 To 2) As Double</p><p> Pnt33(
100、0) = 2 * insertPnt(0) - Pnt10(0)</p><p> Pnt33(1) = Pnt10(1)</p><p> Pnt33(2) = insertPnt(2)</p><p> Dim Pnt34(0 To 2) As Double</p><p> Pnt34(0) = Pnt18(0)</p&g
101、t;<p> Pnt34(1) = Pnt21(1)</p><p> Pnt34(2) = insertPnt(2)</p><p> '繪制半個法蘭盤中不是剖面線邊界的直線</p><p> Dim linObj(0 To 4) As AcadLine</p><p> Set linObj(0) = Th
102、isDrawing.ModelSpace.AddLine(insertPnt, Pnt9)</p><p> Set linObj(1) = ThisDrawing.ModelSpace.AddLine(Pnt11, Pnt13)</p><p> Set linObj(2) = ThisDrawing.ModelSpace.AddLine(Pnt12, Pnt14)</p>
103、;<p> Set linObj(3) = ThisDrawing.ModelSpace.AddLine(Pnt15, Pnt17)</p><p> Set linObj(4) = ThisDrawing.ModelSpace.AddLine(Pnt10, pnt1)</p><p> '繪制半個法蘭盤中是剖面線邊界的直線</p><p&g
104、t; Dim outerLoop(0 To 11) As AcadEntity '注意:對象數(shù)量要嚴格和邊界直線數(shù)一致</p><p> Set outerLoop(0) = ThisDrawing.ModelSpace.AddLine(Pnt9, pnt2)</p><p> Set outerLoop(1) = ThisDrawing.ModelSpace.AddLine
105、(pnt2, Pnt3)</p><p> Set outerLoop(2) = ThisDrawing.ModelSpace.AddLine(Pnt3, Pnt4)</p><p> Set outerLoop(3) = ThisDrawing.ModelSpace.AddLine(Pnt4, Pnt11)</p><p> Set outerLoop(4)
106、 = ThisDrawing.ModelSpace.AddLine(Pnt11, Pnt12)</p><p> Set outerLoop(5) = ThisDrawing.ModelSpace.AddLine(Pnt12, Pnt7)</p><p> Set outerLoop(6) = ThisDrawing.ModelSpace.AddLine(Pnt7, Pnt8)<
107、/p><p> Set outerLoop(7) = ThisDrawing.ModelSpace.AddLine(Pnt8, Pnt17)</p><p> Set outerLoop(8) = ThisDrawing.ModelSpace.AddLine(Pnt17, Pnt16)</p><p> Set outerLoop(9) = ThisDrawing
108、.ModelSpace.AddLine(Pnt16, Pnt15)</p><p> Set outerLoop(10) = ThisDrawing.ModelSpace.AddLine(Pnt15, Pnt10)</p><p> Set outerLoop(11) = ThisDrawing.ModelSpace.AddLine(Pnt10, Pnt9)</p>&l
109、t;p> Dim outerLoop2(0 To 3) As AcadEntity '注意:對象數(shù)量要嚴格和邊界直線數(shù)一致</p><p> Set outerLoop2(0) = ThisDrawing.ModelSpace.AddLine(Pnt13, Pnt5)</p><p> Set outerLoop2(1) = ThisDrawing.ModelSpace
110、.AddLine(Pnt5, Pnt6)</p><p> Set outerLoop2(2) = ThisDrawing.ModelSpace.AddLine(Pnt6, Pnt14)</p><p> Set outerLoop2(3) = ThisDrawing.ModelSpace.AddLine(Pnt14, Pnt13)</p><p><b&
111、gt; '設定剖面線層顏色</b></p><p> Dim hatchLayObj As AcadLayer</p><p> Set hatchLayObj = ThisDrawing.Layers.Add("剖面線層")</p><p> hatchLayObj.color = acYellow</p>
112、;<p> Set newLayer = ThisDrawing.Layers("剖面線層")</p><p> ThisDrawing.ActiveLayer = newLayer</p><p> '設定剖面線層的線型</p><p> Dim entObj1 As AcadLineType</p>
113、<p> Dim found As Boolean</p><p> found = False</p><p> For Each entObj1 In ThisDrawing.Linetypes</p><p> If StrComp(entObj1.Name, "continuous", 1) = 0 Then</
114、p><p> found = True</p><p><b> Exit For</b></p><p><b> End If</b></p><p><b> Next</b></p><p> '如果沒有加載剖面線線型,則從線型文件
115、acad.lin中加載</p><p> If Not (found) Then</p><p> ThisDrawing.Linetypes.Load "continuous", "acad.lin"</p><p><b> End If</b></p><p> ha
116、tchLayObj.Linetype = "continuous"</p><p> Dim hatchObj As AcadHatch '聲明剖面線對象變量</p><p> Dim patternName As String '保存剖面線模式名稱的對象變量</p><p> Dim patternType As Long
117、 '保存剖面線模式類型的對象變量</p><p> Dim assocVar As Boolean '判斷剖面線與輪廓是否結(jié)合</p><p><b> '定義剖面線模式</b></p><p> patternName = "Ansi31"</p><p>
118、patternType = acHatchPatternTypePreDefined</p><p> assocVar = True '與邊界結(jié)合</p><p><b> '創(chuàng)建剖面線對象</b></p><p> Set hatchObj = ThisDrawing.ModelSpace.AddHatch(patte
119、rnType, patternName, assocVar)</p><p> '將外輪廓線和剖面線關(guān)聯(lián)起來,并計算,使剖面線與邊界吻合,完成打右側(cè)的剖面線</p><p> hatchObj.AppendOuterLoop (outerLoop)</p><p> hatchObj.Evaluate</p><p> hat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 零件的計算機輔助設計課程整體教學設計
- cadcam課程設計--餐盤外形 零件的計算機輔助設計與制造
- 計算機輔助設計與制造課程設計
- cad_cam課程設計--漏斗零件的計算機輔助設計與制造
- 計算機輔助設計
- 電路的計算機輔助設計及仿真課程設計
- 電路課程設計---電路的計算機輔助設計及仿真
- 計算機輔助設計試題
- 淺談計算機輔助設計
- 餐盒計算機輔助設計
- 《autocad計算機輔助設計》課程標準
- 工程零件結(jié)構(gòu)及鑄造工藝計算機輔助設計.pdf
- 計算機輔助設計實習報告
- 計算機輔助設計有答案
- 計算機輔助設計譯文.docx
- 計算機輔助設計開題報告
- 計算機輔助設計論文要求
- 計算機輔助設計譯文.docx
- 計算機輔助設計譯文.docx
- 計算機輔助設計與制造
評論
0/150
提交評論