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