林澤生
摘要:利用Inventor強(qiáng)大的二次開發(fā)功能,基于軟件自帶的VBA二次開發(fā)環(huán)境研究了批量使用插入約束裝配相同零件或者子部件的“自動(dòng)放置”裝配命令,分析命令開發(fā)所設(shè)計(jì)的主要API接口,設(shè)計(jì)了該命令開發(fā)的程序框圖,提供了該命令二次開發(fā)的部分關(guān)鍵代碼。使用“自定放置”裝配命令能大大提高設(shè)計(jì)人員的裝配效率,也擴(kuò)展了Inventor軟件的裝配功能。
關(guān)鍵詞:VBA;API;二次開發(fā);自動(dòng)放置
中圖分類號(hào):TP391
文獻(xiàn)標(biāo)識(shí)碼:A
DOI: 10.15913/j.cnki.kjycx.2019.08.056
1 引言
Inventor是美國Autodesk公司于1999年推出的一款可視化三維實(shí)體建模軟件,它的功能涵蓋了產(chǎn)品草圖設(shè)計(jì)、零件設(shè)計(jì)、零件裝配、分析計(jì)算、視圖表達(dá)、模具設(shè)計(jì)、工程圖設(shè)計(jì)等全過程[1],是一款非常適合用于機(jī)械設(shè)計(jì)的CAD軟件。Inventor在裝配環(huán)境中裝配標(biāo)準(zhǔn)件時(shí),會(huì)自動(dòng)彈出一個(gè)AutoDrop的工具欄,在這個(gè)工具欄上有一個(gè)命令叫“插入多個(gè)”,這個(gè)命令能自動(dòng)識(shí)別配合平面上所有相同大小的圓邊,一次性完成多個(gè)標(biāo)準(zhǔn)件的放置與裝配,大大提高了裝配效率。但是這個(gè)“插人多個(gè)”的命令僅適用于標(biāo)準(zhǔn)件庫中的部分標(biāo)準(zhǔn)件。在化工設(shè)備的3D模型裝配過程中,時(shí)常會(huì)遇到管板上需要與大量的管零件裝配在一起,當(dāng)管板上的孔分布并不規(guī)則時(shí),陣列命令并不能發(fā)揮太大的作用。開發(fā)一個(gè)類似“多個(gè)插入”命令的“自動(dòng)放置”裝配命令,能夠提高大量重復(fù)插入裝配的裝配效率,減少設(shè)計(jì)者的重復(fù)勞動(dòng),讓設(shè)計(jì)者將更多的精力放在設(shè)計(jì)上。
2 自動(dòng)放置命令開發(fā)整體思路
VBA是一個(gè)功能強(qiáng)大的開發(fā)工具,由Microsoft提供并將其開發(fā)環(huán)境集成到Inventor中,VBA作為Inventor的一部分提供,無需額外費(fèi)用。VBA運(yùn)行在與Inventor相同的處理空間中,具有效率高等優(yōu)點(diǎn),還可將程序存成多里的.ivb文件,供其他Inventor場合調(diào)用[2]?;贗nventor和VBA的特點(diǎn),本文選用Inventor-VBA來開發(fā)自動(dòng)放置命令。
根據(jù)模型裝配需要,結(jié)合Inventor的操作習(xí)慣,自動(dòng)放置命令啟動(dòng)后用戶需要進(jìn)行以下交互操作:①選擇需要被復(fù)制并裝配的零部件;②選擇需要被復(fù)制并裝配的零件或者子部件的一條圓形邊;③選擇需要裝配多個(gè)零部件的某一平面上的一條圓形邊。命令執(zhí)行完成后應(yīng)能達(dá)到以下效果:第二個(gè)選擇的圓形邊所在的平面上所有相同直接的圓形邊都有一個(gè)零部件與之用“插入”的裝配約束裝配在一起。自動(dòng)放置命令的設(shè)計(jì)流程如圖1所示。
3 自動(dòng)放置命令開發(fā)關(guān)鍵過程
3.1 用戶交互操作選擇程序
自動(dòng)放置命令需要通過人機(jī)交互確定被復(fù)制的零部件、被復(fù)制零件部用于插入約束的圓邊以及被插入零件的圓邊。在Inventor的編程接口(API)中,Pick方法允許用戶選擇單個(gè)元素。交互選擇的第一個(gè)對(duì)象是被復(fù)制的零部件,其選擇過濾器枚舉為kPartEdgeCircularFilter。交互選擇的第二個(gè)和第三個(gè)對(duì)象是零件上的圓邊,其選擇過濾器枚舉為kPartEdgeCircularFilter.
3.2 尋找被插入零件配合平面上符合要求的圓邊
實(shí)現(xiàn)自動(dòng)放置命令自動(dòng)放置功能的重點(diǎn)之一是尋找被插入零件配合平面上所有符合要求的圓邊。在人機(jī)交互過程中,用戶只選擇了被插入零件上的一個(gè)圓邊,我們將與用于選擇的圓邊在同一平面上且直徑相等的所有圓邊視為符合要求的圓邊。一條圓邊是由一個(gè)平面和一個(gè)圓柱面相交形成的,因此需要先判斷與用戶選擇的圓邊相關(guān)的兩個(gè)面哪一個(gè)是平面。然后在平面上遍歷所有的邊,凡是圓邊且半徑與用戶所選圓邊的半徑相等,則視為符合要求的圓邊。值得注意的是,由于模型精度問題,API獲取的圓邊半徑值有一定的誤差,如果直接判斷兩條圓邊半徑是否相等,會(huì)導(dǎo)致存重建模型存在極小誤差的圓邊被錯(cuò)誤判斷,因此在判斷圓邊半徑是否相等時(shí)需要給定一定的誤差范圍。
3.3 復(fù)制目標(biāo)零部件
復(fù)制目標(biāo)零部件并讓“自定放置”裝配命令兼容零件和部件是整個(gè)程序開發(fā)的難點(diǎn)所在。目標(biāo)零部件可能是零件也可能是部件,雖然它們?cè)贏PI中的選擇過濾器枚舉都是kAssemblyOccurrenceFilter,但是在復(fù)制零部件的時(shí)候其方式有所區(qū)別。目標(biāo)零部件的復(fù)制主要采用API中的AddByC omponentDefinition方法,使用該方法時(shí),需要明確被復(fù)制的對(duì)象和放置的位置。如果復(fù)制目標(biāo)是零件,則復(fù)制對(duì)象為Occ2BCopied.Definition;如果復(fù)制目標(biāo)是部件,則其復(fù)制的對(duì)象為Occ2BCopied.ParentOccurrence.Definition。因?yàn)閺?fù)制的零部件最終會(huì)被約束到對(duì)應(yīng)的圓邊上,因此該方法中的放置位置只是命令執(zhí)行過程中的轉(zhuǎn)位置,可以創(chuàng)建一個(gè)空的矩陣作為其位置。
3.4 確定目標(biāo)零部件的配合圓邊
確定目標(biāo)零部件的配合圓邊要在新復(fù)制的零部件上找到與用戶在被復(fù)制對(duì)象上選擇的圓邊一致的圓邊。InventorAPI中的邊對(duì)象有一個(gè)名為TransientKey的屬性,其句法為Edge.TransientKeyo As Long。這一屬性與源文件綁定在一起,不會(huì)因?yàn)樵诓考斜欢啻我枚淖儭?/p>
當(dāng)目標(biāo)零部件為部件時(shí),必須先找到新復(fù)制部件中用戶選擇的圓邊所在的零件,才能比較零件邊的TransientKey屬性值是否相等。
3.5 創(chuàng)建插入約束
創(chuàng)建插入約束采用的是Inv entor API中的AddlnsertConstraint方法。在遍歷被裝配平面上所有邊時(shí),每找到一條符合要求的邊便復(fù)制一次目標(biāo)零部件,同時(shí)將新復(fù)制的目標(biāo)零部件插入到符合要求的圓邊上。修改AxesOpposed的布爾值可以改變插入約束的方向,改變Distance的值可以修改插入約束的偏移距離。創(chuàng)建插入約束的部分關(guān)鍵代碼如下:
Dim olnsert As InsertConstraint
Set olnsert - oAssyDoc.ComponentDefinition.Constraints.AddlnsertConstraint( Edge_lnsert, EdgeOnFace, True,O)
3.6 裝配實(shí)例
化工設(shè)備設(shè)計(jì)過程中,管零件與管板的裝配工作量大,下面基于這種裝配條件,檢驗(yàn)自動(dòng)放置命令的正確性和可靠性。如圖2所示,裝配體中有1個(gè)管板零件和1根管,管板上有99個(gè)孔,現(xiàn)需要在管板的每個(gè)孔上插入一根管。在VBA編輯器中創(chuàng)建一個(gè)宏,將自動(dòng)放置命令的代碼輸入,確認(rèn)代碼中插入約束方向的布爾值以及偏移距離與需求一致。運(yùn)行“自動(dòng)放置”的宏,提示欄出現(xiàn)“請(qǐng)選擇要復(fù)制的零部件”的文字提示,選擇管零件;提示欄接著出現(xiàn)“請(qǐng)選擇復(fù)制零件的配合圓邊”的文字提示,選擇管零件一圓邊;提示欄接著出現(xiàn)“請(qǐng)選擇被插入零件的配合圓邊”的文字提示,選擇管板上的任意圓邊;之后軟件自動(dòng)快速地復(fù)制管零件并將管零件插入到管板上的99個(gè)孔上,這個(gè)過程耗費(fèi)時(shí)間不到Is,最終結(jié)果如圖3所示。通過驗(yàn)證,自動(dòng)放置命令能高效地實(shí)現(xiàn)相同零件的批量插入約束。
4 結(jié)語
本文基于Inventor-VBA二次開發(fā)了自動(dòng)放置命令,使用戶能在裝配環(huán)境中使用類似與標(biāo)準(zhǔn)件裝配中“插入多個(gè)”命令的功能,能夠解決相同零部件批量插入裝配效率低的問題,大大提高三維數(shù)字模型的裝配效率,擴(kuò)展了Inventor軟件的裝配功能。本文完整地分析了自動(dòng)放置命令的開發(fā)思路和開發(fā)流程,對(duì)Inventor二次開發(fā)人員有一定的參考作用。
參考文獻(xiàn):
[1]朱殿燁.基于SolidWorks Animator的掘進(jìn)機(jī)升降油缸閥塊運(yùn)動(dòng)干涉分析[J].煤礦機(jī)械,2012 (5).
[2]張?jiān)骑w,白雪松.lnventor裝配環(huán)境下基于VBA和驅(qū)動(dòng)約束的運(yùn)動(dòng)仿真[J].上海應(yīng)用技術(shù)學(xué)院學(xué)報(bào),2008(3): 76-78.