【正文】
,再利用OLE技術(shù)(即上面的引用),讓VB與SolidWorks取得聯(lián)系。打開對應(yīng)的模板文件,并利用查詢得數(shù)據(jù)修改對應(yīng)尺寸,最后重建模,完成。 GB數(shù)據(jù)庫 數(shù)據(jù)庫采用的GB標(biāo)準(zhǔn),它是系統(tǒng)數(shù)據(jù)存儲和管理的中心。對于《機(jī)械設(shè)計手冊》上的螺紋數(shù)據(jù)表,它為了簡約表達(dá)數(shù)據(jù)間復(fù)雜關(guān)系的需要,其表格都不會是簡單的二維表格,而程序的查詢則要求使用二維形表格,這就要求我們?nèi)w納、并將其拆分歸納后,把GB數(shù)據(jù)導(dǎo)入到自己建立的數(shù)據(jù)庫中。本次設(shè)計由于時間較緊,并且本人初次接觸,了解不夠深入,因此只是簡單的歸納了一下,將五種螺紋聯(lián)接件:螺栓,螺母,螺柱,螺釘,墊圈。每種取一典型零件代表建立了一個數(shù)據(jù)庫。在建立好的窗體界面中,為了更加直觀的顯示相應(yīng)模型數(shù)據(jù)的具體含義,同時也更加美觀和形象,使用適當(dāng)?shù)膱D形圖象進(jìn)行說明。這部分內(nèi)容是獨立于程序主體結(jié)構(gòu)的,以文件的形式存儲在特定的目錄下,系統(tǒng)自動調(diào)用??偨Y(jié)系統(tǒng)通過OLE技術(shù),和SolidWorks通信,操作SolidWorks打開指定的模板零件文件,并按照系統(tǒng)傳遞的參數(shù)來修改零件文件的尺寸,最后重建模,生成新的零件文件。本次螺紋聯(lián)接標(biāo)準(zhǔn)件設(shè)計總體包括以下三大部分:①. 用戶界面和系統(tǒng)主體,包括標(biāo)準(zhǔn)應(yīng)用程序和SolidWorks菜單;②. 標(biāo)準(zhǔn)件GB數(shù)據(jù)庫,包括五種典型螺紋聯(lián)接的GB數(shù)據(jù)庫;③. 標(biāo)準(zhǔn)件模板零件文件庫,包括了每個類型的標(biāo)準(zhǔn)零件的模板零件。第四章 建立系統(tǒng)的用戶界面和主體程序 使用VB開發(fā)出窗體界面,生成標(biāo)準(zhǔn)應(yīng)用程序和SolidWorks插件,再編寫DLL程序?qū)€模塊的界面掛在SolidWorks軟件的主菜單上,使兩者有機(jī)的結(jié)合在一起。在本次設(shè)計中,由于五大類標(biāo)準(zhǔn)件的尺寸大體都是相同的,比如螺紋規(guī)格,螺紋長度,拉伸螺栓和螺母的六角形頭部等特征。因此程序的界面布置也大體相似,體現(xiàn)了整體的統(tǒng)一性。在界面設(shè)計過程中,應(yīng)盡可能遵循以下幾個原則:⑴界面應(yīng)直觀,簡便而且美觀;⑵提供盡量完善的保護(hù)措施,即各種出錯處理,引導(dǎo)用戶輸入規(guī)范的信息;⑶應(yīng)盡可能滿足不同用戶的操作習(xí)慣; 例如對螺紋規(guī)格這一標(biāo)準(zhǔn)值采用一個下拉列表框,當(dāng)窗體載入時,自動將數(shù)據(jù)庫中的對應(yīng)螺紋規(guī)格值M連接到下拉列表,然后由用戶從中選取,而不是自己輸入。這樣做不但簡化了操作,而且還保證了用戶輸入的信息完全符合國家標(biāo)準(zhǔn)。圖41 用戶參數(shù)輸入界面 使用V B開發(fā)出標(biāo)準(zhǔn)EXE的界面程序,還不夠完善,我們還需要進(jìn)一步為SolidWorks開發(fā)菜單插件,即DLL程序,生成SolidWorks插件,將各模塊的界面掛在SolidWorks軟件的主菜單上,讓使用更加的方便。DLL(Dynamic Link Library動態(tài)鏈接程序庫)與EXE程序功能上基本沒有區(qū)別,但是兩者在實質(zhì)上是有區(qū)別的。DLL的作用在于為應(yīng)用程序提供擴(kuò)展功能。應(yīng)用程序想要調(diào)用DLL文件,就需要與其進(jìn)行“動態(tài)鏈接” ;從編程的角度來說,應(yīng)用程序需要知道DLL文件導(dǎo)出的API函數(shù)方可調(diào)用。因此可知,DLL文件本身并不能運行,需要應(yīng)用程序去調(diào)用。因此DLL文件運行時必須插入到應(yīng)用程序的內(nèi)存模塊當(dāng)中,也就是要想運行DLL就必須要用SolidWorks來加載DLL. 加載DLL插件開發(fā)菜單主要是通過使用SldWorks對象的Addmenu和Addmenuitem方法來在SolidWorks工作環(huán)境中添加菜單和下拉子菜單及功能模塊的調(diào)用;通過使用SldWorks對象的Addtoolbar和AddToolbarCommand方法來完成在SoliWorks工作環(huán)境中添加工具條和完成對應(yīng)標(biāo)準(zhǔn)件功能模塊的調(diào)用。下面給出DLL的建立方法和實現(xiàn)菜單功能的代碼: 新建DLL工程 引用SolidWorks2006庫文件打開VB,新建一個Active DLL工程。進(jìn)入到VB編程界面以后,首先必須引用三個類文件,只有引用以后,才能調(diào)用到必要的API函數(shù)。它們分別是:SolidWorks 2006 exposed type libraries for add_in use(SolidWorks插件庫);SolidWorks 2006 type library(SolidWorks庫文件);SolidWorks 2006 Constant type library(SolidWorks常數(shù)庫)下一步需要設(shè)置工程的兼容性和啟動項,: 設(shè)置工程啟動程序位置 設(shè)置工程兼容性設(shè)置版本兼容這一項為“工程兼容”,是為了避免當(dāng)每次重新編譯DLL的時候,都會在注冊表中產(chǎn)生一個新的CLSID號這種情況的出現(xiàn)。而啟動程序的路徑也必須設(shè)置為每臺計算機(jī)的SolidWorks軟件的安裝目錄下。將建立好的標(biāo)準(zhǔn)EXE程序的窗體文件模塊添加到該Active DLL工程中。 添加窗體 添加類模塊然后為該工程添加一個類模塊,再在該類模塊中添加如下代碼:39。Make sure that a reference to the type library exists39。Tell VB that you are going to provide functionality for the SwAddin interface Implements 39。 Dim iSldWorks As Dim icookie As Long 39。implementation methods of the swaddin interface Private Function swaddin_connectToSW(ByVal ThisSW As Object, ByVal Cookie As Long) As Boolean Dim bRet As Boolean 39。store reference to SW session Set iSldWorks = ThisSW 39。store cookie from SW 與SolidWorks建立連接 icookie = Cookie 39。Inform SW about the object that contains the callbacks 從SW得到cookie bRet = (, Me, icookie) 39。Add a menu item on the frame when no documents are present 定義菜單 bRet = (, Me, icookie) 39。Add a menu item on the frame when no documents are present bRet = (swDocNONE, 螺紋聯(lián)接(amp。L), 3) 39。沒有文擋的時候顯示的菜單,使用AddMenuItem2方法,其中,LS_Item,LS_ItemUpdata,是兩個函數(shù)。 bRet = (swDocNONE, icookie, 螺栓庫(amp。S)@螺紋聯(lián)接(amp。L), 1, LS_Item, LS_ItemUpate, 六角螺母) 39。打開或是新建零件文檔的時候顯示的菜單, bRet = (swDocPART, iCoolie, 螺栓庫(amp。S)@螺紋聯(lián)接(amp。L), 1, LS_Item, LS_ItemUpdata, 六角螺母) swaddin_connectToSW = True End FunctionPrivate Function SwAddin_DisconnectFromSW() As BooleanDim bRet As Boolean39。Remove any UI that was added earlier刪除先前添加的菜單,bRet = (swDocNONE, 螺紋聯(lián)接(amp。L), )bRet = (swDocPART, 螺紋聯(lián)接(amp。L), )Set iSldWorks = NothingSwAddin_DisconnectFromSW = True39。LS_Item函數(shù),是打開窗體入口,比如,加載螺栓標(biāo)準(zhǔn)件的第一個窗體:frmLS_SltPublic Sub LS_Item() End Sub39。LS_ItemUpdata函數(shù),用于控制菜單的狀態(tài),以下定義一個Long型的LS_MnuSts公共變量,在系統(tǒng)加載的時候,使LS_MnuSts=1,加載了frmLS_Slt后 , 使LS_MnuSts = 2, 當(dāng)frmLS_Slt正常退出后, 使LS_MnuSts = 1, 這樣就可以使同一模塊不能重復(fù)加載, 以避免同一模塊前后窗體的數(shù)據(jù)不一致或是前后干擾等。Public Function LS_ItemUpdata() As Long39。Return the state information for the menu item39。0Disabled and unchecked39。1Enabled and unchecked(default when updata routine does not exist)39。2Disabled and checked39。3Enabled and checkedLS_ItemUpdata = LS_MnuStsEnd Function上面產(chǎn)生的DLL文件還不能讓SolidWorkd直接識別,必須在外界做相應(yīng)的處理,才能在SolidWorks環(huán)境中生效,而生成的DLL文件轉(zhuǎn)化成SolidWorks插件有下列兩種方法:直接打開和寫注冊表。1. 直接運用SolidWorks打開的方法生成SolidWorks插件在SolidWorks軟件環(huán)境中,依次點擊:文件——打開,選擇相關(guān)的文件路徑(如:D:\文件名),并在文件類型中選擇“Add—Ins(*.DLL)”,選擇DLL的文件名如(),然后單擊“打開”按鈕,這樣相關(guān)的工具欄和菜單就加入到SollidWorks環(huán)境中,以后要啟動相關(guān)的DLL文件,就可以直接在“工具”、“插件”中選擇便能加載了。2. 操作注冊表生成SolidWorks插件這種方法較復(fù)雜,而且要求編程者對注冊表較為熟悉,介紹如下。① 注冊DLL文件:在Windows界面下,點擊:開始——運行,并輸入Regsvr32 “D:\. (根據(jù)路徑的不同,后面的參數(shù)可能發(fā)生變化),然后“確定”。系統(tǒng)顯示DLL文件注冊成功。② 查找SWDLL 相關(guān)的注冊信息:在Windows界面下面,點擊開始——運行,并輸入“REGEDIT”,進(jìn)入注冊表程序。選中“我的電腦”,點擊“編輯”“查找”,在查找對話框內(nèi)輸入VB文件項目的類模塊名字比如“SWDLL”,查找對應(yīng)的項目。③ 設(shè)置插件信息:復(fù)制AppID的數(shù)據(jù)。然后選擇【HKEY—LOCAL—MACHINE】,【SOFTWARE】,【SolidWorks】,【AddIns】,新建【項】,項名稱為AppID的數(shù)據(jù)(粘貼),然后新建字符串“Description”和“Title”,它們的數(shù)據(jù)可以根據(jù)自己的要求輸入,如“SW例子程序”和“SolidWorks開發(fā)程序”,然后設(shè)置“默認(rèn)”的數(shù)據(jù)為1,表示SolidWorks啟動時自動加載此程序。重新啟動SolidWorks后,程序自動加載相應(yīng)的DLL程序,如果“默認(rèn)”的數(shù)據(jù)為0,就需要在“工具”“插件”中啟動此插件。注意:在制作安裝程序時,需要把注冊表相關(guān)的設(shè)置一同打包到安裝程序內(nèi),也就是說安裝程序必須注冊DLL文件,同時把上面設(shè)置的注冊信息加入到注冊表中。最后,將建立好的插件程序保存好,就可以在SolidWorks中加載了,: 在SolidWorks中加載插件主體程序中模板文件的選擇與重建該部分是整個系統(tǒng)的中樞神經(jīng),其主要功能是有效的完成用戶界面模塊,數(shù)據(jù)驅(qū)動模塊和SolidWorks之間的連接,將用戶提供的信息通過數(shù)據(jù)庫驅(qū)動模塊在ACCESS數(shù)據(jù)庫中進(jìn)行正確查詢,提取有用的數(shù)據(jù),并將這些數(shù)據(jù)傳輸給SolidWorks,使之完成參數(shù)化標(biāo)準(zhǔn)件的生成。每一個零件對象的參數(shù)都是十分復(fù)雜的,而且數(shù)量也很多。要想對每一個參數(shù)都進(jìn)行驅(qū)動是十分困難的。因此必須要對數(shù)據(jù)進(jìn)行歸納,找出主參數(shù)。在設(shè)計對象中,雖然參數(shù)眾多,但是獨立變化的參數(shù)一般只有幾個,稱之為主參數(shù)或者主約束,其他的,可以由圖形結(jié)構(gòu)特征確定或者與主參數(shù)有確定關(guān)系的參數(shù)被稱為次約束。本次設(shè)計所采用的參數(shù)化設(shè)計,其核心是一種基于以上所述的參數(shù)驅(qū)動機(jī)制。在該方法中,當(dāng)把參數(shù)化模型確定下來以后,為了實現(xiàn)界面關(guān)鍵參數(shù)(主參數(shù))對參數(shù)化模型的控制,就必須建立界面參數(shù)和參數(shù)化模型中的底層參數(shù)(次約束)之間邏輯上或者數(shù)值上的關(guān)系,稱之為參數(shù)驅(qū)動機(jī)制。參數(shù)化設(shè)計的兩種具體方法主要有程序驅(qū)動法和尺寸驅(qū)動法。本次采用的尺寸驅(qū)動法是在保持零件結(jié)構(gòu)不變的情況下,將特定的尺寸視為變量,給予不同的尺寸值,便能獲得一系列結(jié)構(gòu)。外型相同而尺寸不同的相似零件,它允許用戶在定義一個典型零件時,不必考慮零件中幾何元素的準(zhǔn)確位置,而只需保證其拓?fù)浣Y(jié)構(gòu)正確,同時進(jìn)行必要的尺寸參數(shù)標(biāo)注,通過尺寸參數(shù)值的變化來生成結(jié)構(gòu)相同而參數(shù)不同的零件族,它在零部件的重新生成與修改方面顯示出極大的方便性。因此,