郭欣宇,司海伯,苗 盈,鄺 樂(lè)
(無(wú)錫職業(yè)技術(shù)學(xué)院機(jī)械技術(shù)學(xué)院,江蘇無(wú)錫 214121)
汽車車燈通常由燈泡、反射鏡和配光鏡3 部分組成,其中反射鏡和配光鏡上分布著大量的配光紋,其作用是散射光線,使燈光亮度均勻[1]。配光紋種類很多,不同配光紋的配光效果不同。一般情況下一個(gè)車燈同時(shí)配置多種配光紋,常見(jiàn)的有金字塔配光紋、魚(yú)眼配光紋、柱狀配光紋等,如圖1所示。
圖1 車燈配光紋[3]
汽車車燈配光紋具有單元尺寸小、單元結(jié)構(gòu)類似、單元數(shù)量多和造型精度要求高等特點(diǎn)。配光紋單元一般分布在車燈曲面上,雖然各個(gè)配光紋單元結(jié)構(gòu)類似,但仍然需要逐個(gè)單元手工繪制,不能采用陣列方式來(lái)快速地完成,重復(fù)性工作量較大,通常占據(jù)整個(gè)車燈造型工作量的20%以上[2]。因此,如果能提高車燈配光紋的建模效率,將直接縮短汽車車燈新產(chǎn)品開(kāi)發(fā)周期并降低開(kāi)發(fā)成本。
NX 軟件是功能強(qiáng)大的CAD/CAM/CAE 集成軟件,廣泛應(yīng)用于各種工業(yè)產(chǎn)品的設(shè)計(jì)和制造。面向車燈配光紋建模等具體應(yīng)用時(shí),NX 為用戶提供了二次開(kāi)發(fā)接口,方便用戶進(jìn)行專用工具集的定制,使用戶能夠自行開(kāi)發(fā)適合特殊需求的、效率更高的CAD 功能[4]。廖敦明等[5]基于NX 9.0 平臺(tái)利用NX Open C++/NX Open API技術(shù),開(kāi)發(fā)了汽車管路自動(dòng)化胎具設(shè)計(jì)系統(tǒng),能夠?qū)崿F(xiàn)胎具標(biāo)準(zhǔn)件的自動(dòng)裝配,縮短了胎具設(shè)計(jì)周期,提高了胎具設(shè)計(jì)效率。錢(qián)柳剛等[6]通過(guò)深溝球軸承以及圓錐滾子軸承兩個(gè)實(shí)例,闡述了NX 二次開(kāi)發(fā)方法在軸承參數(shù)化快速設(shè)計(jì)中的應(yīng)用。葛成榮[7]基于KF(Knowledge Fusion)技術(shù),通過(guò)NX 二次開(kāi)發(fā)手段設(shè)計(jì)開(kāi)發(fā)出撥叉零件的智能設(shè)計(jì)建模模塊,有利于提高撥叉零件設(shè)計(jì)和建模的工作效率。黃曉明等[8]基于NX Open API 開(kāi)發(fā)了一個(gè)自動(dòng)化、集成化、高效率的電極設(shè)計(jì)系統(tǒng),不僅提高了電極設(shè)計(jì)的速度,而且使企業(yè)的電極管理更趨標(biāo)準(zhǔn)化。曹澍等[9]基于NX 軟件二次開(kāi)發(fā)功能,開(kāi)發(fā)了一款適用于弧面分度凸輪機(jī)構(gòu)快速建模的參數(shù)化設(shè)計(jì)系統(tǒng),縮短了弧面凸輪機(jī)構(gòu)的設(shè)計(jì)周期并減少了重復(fù)性工作量。黃陽(yáng)等[10]將NX 二次開(kāi)發(fā)技術(shù)應(yīng)用于減速器設(shè)計(jì),通過(guò)參數(shù)化設(shè)計(jì)簡(jiǎn)化了減速器的設(shè)計(jì)流程,減少了重復(fù)性設(shè)計(jì)工作。
本文針對(duì)汽車車燈圓點(diǎn)配光紋手工建模重復(fù)性工作量大、建模效率低的問(wèn)題,基于NX 二次開(kāi)發(fā)技術(shù)實(shí)現(xiàn)了圓點(diǎn)配光紋的自動(dòng)化快速建模,提高了車燈配光紋的建模效率,縮短了汽車車燈新產(chǎn)品的開(kāi)發(fā)周期并降低了開(kāi)發(fā)成本。
車燈配光紋種類不同,其建模方法也各不相同,一般來(lái)說(shuō),可以分為兩步:網(wǎng)格劃分和配光紋建模。網(wǎng)格劃分是指在車燈曲面上生成曲線,用來(lái)確定配光紋的位置和邊界。
已知一組原始曲面、組成網(wǎng)格的兩組曲線、圓點(diǎn)配光紋的直徑和高度、生成圓點(diǎn)配光紋的矢量方向,圓點(diǎn)配光單元的建模原理如下。
(1)求組成網(wǎng)格的兩組曲線的交點(diǎn),如圖2所示。
圖2 創(chuàng)建交點(diǎn)
(2)將原始曲面偏置距離hf=rad-ht得到偏置曲面,曲面偏置方向與給定的生成圓點(diǎn)配光紋的矢量方向相反,如圖3所示,其中rad表示圓點(diǎn)配光紋的半徑,ht表示圓點(diǎn)配光紋的高度,如圖4所示。
圖3 偏置曲面
圖4 圓點(diǎn)花紋的半徑和高度
(3)將交點(diǎn)投影到偏置曲面上得到投影點(diǎn),以投影點(diǎn)為圓心創(chuàng)建球面。
(4)以原始曲面為邊界,對(duì)球面進(jìn)行裁剪,最終得到圓點(diǎn)配光紋單元,如圖5所示。
圖5 圓點(diǎn)配光紋
以NX 10 為開(kāi)發(fā)平臺(tái),利用NX 二次開(kāi)發(fā)模塊開(kāi)發(fā)了汽車車燈圓點(diǎn)配光紋快速建模功能模塊,具體包括使用MenuScript編寫(xiě)菜單文件,使用Block UI Styler 制作人機(jī)交互對(duì)話框,使用NX OPEN API函數(shù)實(shí)現(xiàn)圓點(diǎn)配光紋的快速建模功能。
MenuScript 是一種NX 定義的具有一定語(yǔ)法規(guī)則的腳本語(yǔ)言,允許用戶對(duì)原有的菜單和工具條進(jìn)行編輯,也可以生成自定義的菜單和工具條[11]。
2.1.1 菜單文件制作
在用戶自定義的二次開(kāi)發(fā)路徑下新建startup文件夾,在該文件夾中新建擴(kuò)展名為.men 的腳本文件,輸入相應(yīng)的腳本代碼完成系統(tǒng)菜單的制作,啟動(dòng)NX 后自動(dòng)加載的菜單界面如圖6所示。
圖6 自定義菜單
車燈配光紋快速建模系統(tǒng)的菜單放置于“幫助”菜單之后,包含燈花、電鑄紋、條紋面和輔助功能4 個(gè)二級(jí)菜單,每個(gè)二級(jí)菜單又分別包含若干具體的功能命令,本文開(kāi)發(fā)的圓點(diǎn)配光紋位于燈花這個(gè)二級(jí)菜單下。菜單腳本文件的制作思路如下。
(1)首先聲明版本號(hào)VERSION 170,并添加編輯菜單的語(yǔ)句EDIT UG_GATEWAY_MAIN_MENUBAR。
(2)一級(jí)菜單的腳本代碼以語(yǔ)句AFTER UG_HELP 開(kāi)始,以語(yǔ)句END_OF_AFTER 結(jié)束,表示將車燈配光紋快速建模系統(tǒng)菜單放置在“幫助”菜單之后,其中UG_HELP 為“幫助”菜單的標(biāo)識(shí)符。使用關(guān)鍵詞CASCADE_BUTTON 和LABEL分別指定一級(jí)菜單的標(biāo)識(shí)符和標(biāo)簽。一級(jí)菜單的腳本代碼為:
(3)二級(jí)菜單的腳本代碼以語(yǔ)句MENU chedeng 開(kāi)始,以語(yǔ)句END_OF_MENU 結(jié)束,其中chedeng 是一級(jí)菜單的標(biāo)識(shí)符。同樣使用關(guān)鍵詞CASCADE_BUTTON 和LABEL分別指定二級(jí)菜單的標(biāo)識(shí)符和標(biāo)簽。二級(jí)菜單的腳本代碼為:
(4)三級(jí)菜單的腳本代碼同樣以關(guān)鍵詞MENU 開(kāi)始,以關(guān)鍵詞END_OF_MENU 結(jié)束。不同的是,三級(jí)菜單的標(biāo)識(shí)符使用關(guān)鍵詞BUTTON 來(lái)指定,并且需要使用關(guān)鍵詞BITMAP 指定圖標(biāo),這是因?yàn)槿?jí)菜單是具有特定功能的命令,不再包含任何子菜單。以本文開(kāi)發(fā)的圓點(diǎn)配光紋為例,相關(guān)的三級(jí)菜單的腳本代碼為:
2.1.2 Robbin工具條制作
在startup 文件夾下新建擴(kuò)展名為.rbn 的腳本文件,輸入相應(yīng)的腳本代碼完成Robbin 工具條的制作,啟動(dòng)NX 后自動(dòng)加載的Ribbon工具條如圖7所示。
圖7 自定義Ribbon工具條
在Robbin 腳本中缺省了用于指定標(biāo)簽的關(guān)鍵詞LABEL 和指定位圖的關(guān)鍵詞BITMAP,但是這不影響標(biāo)簽和圖標(biāo)的正常顯示,因?yàn)樵诓藛文_本文件中已經(jīng)指定了,所以Robbin 腳本文件代碼較為簡(jiǎn)潔清晰。以燈花這一組為例,Robbin腳本文件的部分代碼如下所示。
Block UI Styler 是NX 中制作人機(jī)交互界面對(duì)話框的可視化模塊[12],具有可視化功能,可以方便地制作具有NX 風(fēng)格的交互界面,該界面能與NX 集成,操作方便高效,有效降低二次開(kāi)發(fā)難度[13]。使用Block UI Styler 設(shè)計(jì)的圓點(diǎn)配光紋對(duì)話框如圖8 所示,該對(duì)話框共有4 個(gè)組和6 個(gè)控件。第1 個(gè)組為“曲面”,包含“選擇對(duì)象”控件,用于選擇曲面;第2 個(gè)組為“曲線”,包含2 個(gè)“曲線收集器”控件,分別用于選擇兩組曲線;第3 個(gè)組為“參數(shù)”,包含兩個(gè)“雙精度”控件,分別用于輸入圓點(diǎn)半徑參數(shù)和圓點(diǎn)高度參數(shù);第4 個(gè)組為“配光紋生成方向”,包含一個(gè)“反向”控件,用于指定圓點(diǎn)配光紋的生成方向。
圖8 圓點(diǎn)配光紋對(duì)話框
在用戶自定義的二次開(kāi)發(fā)路徑下新建application 文件夾,將對(duì)話框命名為yuandiandenghua 并保存到application 文件夾中,會(huì)產(chǎn)生yuandiandenghua.dlx、yuandiandenghua.hpp、yuandiandenghua.cpp 三個(gè)文件,分別是對(duì)話框圖形界面文件、對(duì)話框C++語(yǔ)言頭文件和對(duì)話框C++語(yǔ)言模板文件。
基于圓點(diǎn)配光紋手工建模的原理和思路,利用應(yīng)用程序接口(NX Open API)函數(shù)開(kāi)發(fā)圓點(diǎn)配光紋功能模塊的具體流程如下。
2.3.1 搭建應(yīng)用程序框架
打開(kāi)Visual Studio 2012,選擇NX10 NXOpen C++Wizard 模板,新建名為yuandiandenghua 的應(yīng)用程序框架,并刪除項(xiàng)目自動(dòng)生成的.cpp 文件和.hpp 文件,將創(chuàng)建對(duì)話框時(shí)保存在application文件夾中的yuandiandenghua.hpp 和yuandiandenghua.cpp文件添加到應(yīng)用程序框架中。
2.3.2 獲取用戶輸入
(1)使用選擇對(duì)象(SelectObject)控件,獲取用戶選擇的原始曲面,記為selectedFaces。需要注意的是,需要在initialize_cb()函數(shù)中使用Selection::MaskTriple (UF_solid_type,UF_solid_body_subtype,UF_UI_SEL_FEATURE_ANY_FACE)設(shè)置過(guò)濾,使用戶不能選擇除曲面之外的其他實(shí)體。
(2)使用2 個(gè)曲線收集器(CurveCollector)控件,分別獲取用戶選擇的第一組曲線和第二組曲線,分別記為firstCurves和secondCurves。
(3)使用2 個(gè)雙精度(DoubleBlock)控件,分別獲取用戶輸入的圓點(diǎn)半徑rad和圓點(diǎn)高度ht,并計(jì)算出偏置距離hf。
(4)使用反向(ReverseDirection)控件,獲取用戶選擇的圓點(diǎn)配光紋生成方向selectedVector。
2.3.3 圓點(diǎn)配光紋建模
(1)使用創(chuàng)建曲線交點(diǎn)函數(shù)UF_POINT_create_at_intersection_of_two_curves,獲得用戶選擇的兩組曲線的交點(diǎn)inter-Points(i,j)。
(2)使用創(chuàng)建偏置曲面函數(shù)UF_MODL_create_face_offset,將用戶選擇的曲面selectedFaces 沿指定矢量方向的反方向偏置距離hf,得到偏置曲面offsetFaces。
(3)使用創(chuàng)建投影曲線函數(shù)UF_CURVE_create_proj_curves1,將交點(diǎn)interPoints(i,j)沿曲面的法向投影到偏置曲面offsetFaces,得到投影點(diǎn)projPoints(i,j)。
(4)使用創(chuàng)建球函數(shù)UF_MODL_create_sphere1,以投影點(diǎn)projPoints(i,j)為球心,以圓點(diǎn)半徑rad為半徑,創(chuàng)建球體spheres。
(5)使用修剪體函數(shù)UF_MODL_trim_body,以用戶選擇的原始曲面selectedFaces 為邊界,以selectedVector 為矢量方向,對(duì)生成的球體spheres進(jìn)行修剪,所保留的部分即為圓點(diǎn)配光紋。
基于上述方法,完成汽車車燈配光紋快速建模系統(tǒng)中的圓點(diǎn)配光紋功能模塊,通過(guò)如圖6 所示的菜單命令或如圖7 所示的Robbin工具條,調(diào)用圓點(diǎn)配光紋功能,彈出如圖8所示的對(duì)話框界面。首先選擇如圖9 所示的曲面,接下來(lái)選擇第一組曲線和第二組曲線,然后輸入圓點(diǎn)半徑和圓點(diǎn)高度,指定配光紋的生成方向后單擊對(duì)話框中的“確定”按鈕,生成如圖10 所示的圓點(diǎn)配光紋。
圖9 選擇曲面
圖10 生成的圓點(diǎn)配光紋
實(shí)驗(yàn)發(fā)現(xiàn),完成100 個(gè)圓點(diǎn)配光紋的建模,一個(gè)熟練的造型工程師手工建模需要時(shí)間為100 min 左右。采用圓點(diǎn)配光紋自動(dòng)建模程序,用戶只需選擇原始曲面和兩組曲線、輸入圓點(diǎn)直徑和圓點(diǎn)高度、指定矢量方向,就能實(shí)現(xiàn)圓點(diǎn)配光紋的一次性成形,總耗時(shí)大約只需3 min。由此可見(jiàn),該程序?qū)A點(diǎn)配光紋建模效率的提高非常顯著。
為了解決汽車車燈圓點(diǎn)配光紋手工建模重復(fù)性工作量較大、建模效率不高的問(wèn)題,利用NX 10軟件平臺(tái)提供的二次開(kāi)發(fā)工具,開(kāi)發(fā)了圓點(diǎn)配光紋快速建模功能模塊。首先,使用菜單腳本工具(MenuScript)制作了用戶自定義菜單和Robbin 工具條,以方便功能模塊的調(diào)用。然后,通過(guò)用戶界面編輯器(Block UI Styler)制作了人機(jī)交互對(duì)話框,使圓點(diǎn)配光紋功能模塊的交互界面具有NX 統(tǒng)一風(fēng)格。最后,基于圓點(diǎn)配光紋手工建模的原理和思路,利用應(yīng)用程序接口(NX Open API)函數(shù)實(shí)現(xiàn)了圓點(diǎn)配光紋的自動(dòng)建模。實(shí)踐證明該程序能夠極大地提高圓點(diǎn)配光紋的建模效率,加快相關(guān)車燈產(chǎn)品的開(kāi)發(fā)進(jìn)程。