李大琳(吉林大學(xué)珠海學(xué)院廣東519041)
孫 巖(江城電器安裝有限公司310000)
Unigraphics(UG)軟件是一套以機(jī)械產(chǎn)品為主的CAD/CAE/CAM一體化軟件,是通用的設(shè)計(jì)與制造平臺,專業(yè)針對性較差。那么根據(jù)具體需求,進(jìn)行相應(yīng)的二次開發(fā)十分必要。
UG的二次開發(fā)接口是多語言支持、全開放的編程接口,雖然這讓用戶能夠像UG的研發(fā)人員一樣開發(fā)自己的UG功能,但是問題是:接口太多、太復(fù)雜了。如何迅速找到可用的開發(fā)接口和正確的語法邏輯完成開發(fā),又成為UG二次開發(fā)者的新難題。
好在UG提供了Journaling技術(shù),用戶將自己的操作記錄并生成代碼,然后在此基礎(chǔ)上修改代碼來作為自己的二次開發(fā)代碼使用。
Journaling是一種軟件自動(dòng)化技術(shù),具有該技術(shù)的軟件中最著名的就是Microsoft的宏(Macro)。用戶在使用軟件時(shí)避免重復(fù)相同的動(dòng)作,把常用的動(dòng)作寫成宏,工作時(shí),利用宏來自動(dòng)運(yùn)行,以實(shí)現(xiàn)自動(dòng)化。
Journaling的實(shí)現(xiàn)也是通過錄制,把前次的建模等相關(guān)操作記錄成日志文件,下次再使用時(shí),直接執(zhí)行該文件即可完成建模。
然而UG的使用者幾乎不會每次都建相同的模型。而且UG的特點(diǎn)是參數(shù)化建模,如果只是按照“錄制->重放”的思路來使用Journaling,就無法參數(shù)化。
因此,Journaling的一般思路是“錄制->生成代碼文件->修改代碼文件->生成單獨(dú)的DLL文件和UG命令”。這樣Journaling代碼就成為UG菜單上一個(gè)獨(dú)立的、參數(shù)化的命令。
筆者認(rèn)為,Journaling的意義在于為初學(xué)者和雖然建模經(jīng)驗(yàn)豐富、但是編程經(jīng)驗(yàn)不足的人提供了示范作用和快速獲得代碼的途徑。例如下面這段代碼:
Dim point1 As Point(1)
p o i n t 1 = b l o c k F e a t u r e B u i l d e r 1.O r i g i n P o i n t(2)
b l o c k F e a t u r e B u i l d e r 1.O r i g i n P o i n t = p o i n t 1(3)
Dim originPoint1 As Point3d = New Point3d(0.0, 0.0, 0.0)(4)
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, "100", "100","200")(5)
blockFeatureBuilder1.SetBooleanOperationAndTarget(Features.Feature.BooleanType.Create, nullBody) (6)
這是繪制一條直線,直線的起點(diǎn)是(0,0,0),終點(diǎn)是(100,100,200),代碼首先用點(diǎn)point1來獲得系統(tǒng)當(dāng)前初始點(diǎn)。然后用點(diǎn)originPoint1作為直線的起點(diǎn),最后通過方法SetOriginAndLengths()設(shè)置直線的起點(diǎn)和長度。這段代碼中的Point3d和blockFeatureBuilder數(shù)據(jù)類型都是NX Open API對象模型中定義的變量。
對于使用者,Journaling并不是什么復(fù)雜的操作。把復(fù)雜的問題簡單化是一款優(yōu)秀軟件最基本的特征。但是Journaling生成的代碼中有大量的冗余代碼,上例中的代碼行(1)、(2)、(3)就是冗余的。
這三句獲得了當(dāng)前系統(tǒng)原點(diǎn)位置,但是繪制一條直線,只要知道起點(diǎn)和終點(diǎn)或者起點(diǎn)和長度就足夠了。因此,做好Journaling代碼優(yōu)化,建立高質(zhì)量代碼就是Journaling二次開發(fā)的關(guān)鍵。
要實(shí)現(xiàn)這個(gè)目標(biāo)是一個(gè)長期的過程,初學(xué)者可以分兩個(gè)階段實(shí)現(xiàn):
1.正確性,可以使用UG的“日志回放”功能作為調(diào)試器。調(diào)試通過后,再進(jìn)行DLL文件開發(fā)。實(shí)踐證明這是一個(gè)高效的方法。
2.提高質(zhì)量,這是一個(gè)需要長時(shí)間磨練的過程。國內(nèi)當(dāng)前UG二次開發(fā)主要還是沿用UG Open接口,是C語言開發(fā)。很難找到很好的關(guān)于Journaling技術(shù)的開發(fā)資料。為大家推薦下面這個(gè)網(wǎng)站:
http://www.nxjournaling.com/。這是一個(gè)Journaling技術(shù)交流論壇。
基于上述,前面的代碼可以優(yōu)化成以下形式:
Dim originPoint1 As Point3d = New Point3d(-0.0, -0.0, -0.0)
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, 100, 100, 100)
Journaling是UG提供的一種自動(dòng)生成代碼的軟件自動(dòng)化技術(shù)。是開發(fā)者學(xué)習(xí)UG二次開發(fā)的最好教材,然而,國內(nèi)深入討論Journaling技術(shù)的資料不多。希望本文能為UG開發(fā)者拋磚引玉,重視起Journaling的代碼示范作用。