張作勝,朱振國,陳傳勝
(安徽職業技術學院 機械工程學院,安徽 合肥 230011)
Ribbon是一種以面板及標簽頁為架構的用戶界面(user interface),最早出現在 Microsoft Office2007中。這種界面與傳統菜單式界面相比,整合了菜單和工具欄,將功能有組織地進行布局。Ribbon除了讓用戶更容易找到常用的、重要的功能外,還有外觀漂亮、功能直觀、操作簡潔方便等優點。
Siemens UG NX軟件是面向產品全生命周期的大型軟件,從UG NX9.0起,該軟件也開始使用Ribbon界面,相比之前的伸縮下拉菜單或工具條圖標,橫鋪式的菜單更直觀且與觸摸操作兼容性更好。
為了滿足不同類型用戶對UG NX軟件的個性化定制需求,UG NX軟件提供了多種高效的開發工具實現在其平臺上的二次開發,二次開發的主要內容涉及用戶界面開發及功能開發2個方面[1]。菜單和Ribbon工具條是用戶界面的重要組成部分,也是構建模塊框架進行二次開發工作的基礎,大多數二次開發的應用模塊都要通過菜單或工具條與UG平臺集成,方便用戶調用[2]。
基于UG/Open平臺的二次開發,已有眾多文獻論述,如白海濱等基于NX二次開發的三維彈簧快速設計方法[3]、唐博文等基于STEP的電子束數模特征識別與再建CAD二次開發系統[4]和趙仁兵等基于UnigraphicsNX二次開發功能的批量后置軟件[5]等,這些都側重于二次開發程序的功能設計,對于用戶界面開發尤其是Ribbon工具條鮮有論述。
以下基于UG NX12開發平臺,應用UG/Open技術框架下的Menuscript編程語言,研究UG NX二次開發中Ribbon工具條的定制與設計技術,對于開發具有良好UI界面的二次開發程序有重要意義。
在UG NX12中新建或打開一個部件,此時軟件默認處于建模環境。功能區在繪圖區上方,包括主頁、裝配、曲線和視圖等選項卡,每個選項卡包含一組或幾組面板,每個面板上一般又包含多個工具按鈕,UG NX的Ribbon界面如圖1所示。

圖1 UG NX12 Ribbon界面
UG NX Ribbon界面分為3個層級,分別為選項卡(Tab)、面板(Panel)和元素(Button或 Combo等)[6],可以將這3個層級類比成一級、二級與三級菜單。
(1)選項卡。多個作用相近的命令組合成為一個選項卡,也可稱為分類。例如在UG NX的Ribbon界面中,視圖相關的命令就放在“視圖”這個頁面中。在形式上,“選項卡”表現為Ribbon面板上的一個Tab頁面。
(2)面板。“選項卡”的下一個層級是“面板”,也是若干個命令的組合,只是同一面板內的命令聯系會更緊密。“選項卡”包含“面板”,“面板”又包含下一個層級的“元素”。如圖1中“可見性”即為一個面板,其中包含“顯示隱藏”和“圖層”等多個功能相近的命令按鈕。
(3)元素。“元素”是最基本的命令,一般指命令按鈕,它們被不同的“面板”所包含,主要完成具體的交互任務。
UG/Open二次開發平臺提供的界面開發工具主要有Block UIStyler和Menuscript兩種方式。其中Block UIStyler(塊UI樣式編輯器)是NX6.0版本之后提供的工具,代替之前的UIStyler,具有可視化功能,可幫助用戶快速構建與NX用戶界面一致的對話框[7]。而Menuscript技術主要用來定制NX二次開發程序的菜單[8],除此之外,Menuscript技術還可以定制工具條和Ribbon工具條,其腳本文件擴展名分別為:*.tbr和*.rtb。
1.2.1 Menuscript技術環境搭建
利用UGII_VENDOR_DIR環境變量指定二次開發程序及其菜單的放置位置,以基于NX平臺二次開發的澆注系統為例,將環境變量指向D:GatingsystemTools,該目錄下建有startup和application兩個子目錄。
Ribbon界面的客戶化文件和菜單或工具條*.men、*.trb文件一樣,可以放置在application目錄、startup目錄或applicationprofiles目錄下,放在不同位置有如下區別。
(1)startup目錄:如果放置在這個文件夾下面,NX啟動后會立即顯示該Ribbon界面工具條,即Ribbon工具條會在NX啟動后,立即全部展現。
(2)application目錄:只有在特定的模塊下,Ribbon工具條才會顯示,通常可以通過定義men文件或通過API函數UF_UI_create_ribbon進行定義。
(3)applicationprofiles目錄:可以參考NX安裝目錄UGIImenusprofiles中對應的模塊目錄文件夾,可根據軟件當前模塊自動加載和卸載Ribbon工具條。比如Ribbon工具條文件放在UG_APP_MODELING目錄下,只會在建模環境下才會加載。
1.2.2 Ribbon工具條編程語法
使用Menuscript技術創建菜單、工具條和Ribbon工具條的編程語法略有不同,此處著重探討Ribbon工具條的編程設計方法。在前期完成NX二次開發程序澆注系統的菜單編程的基礎上,得到菜單文件JZ_main.men。該文件放置在startup目錄,位圖等相關資源放入application目錄下,其簡單Ribbon工具條代碼如下:

啟動UG NX12,新建或打開一個部件,進入建模環境,可看到澆注系統選項卡已經出現在NX界面,如圖2所示。

圖2 澆注系統簡單Ribbon工具條
從圖2可看出,該Ribbon界面只有選項卡和元素2個層級,可以使用GROUP關鍵字添加面板這一層級。其具體用法是,在需要放置在同一面板的命令按鈕代碼之前和之后分別添加“BEGIN_GROUP XX”和“END_GROUP”,其中“XX”代表該面板名稱。圖3所示是添加了GROUP關鍵字的Ribbon界面。

圖3 添加了GROUP關鍵字的Ribbon工具條
除了GROUP關鍵字外,UG/Menuscript還為Ribbon工具條提供了用于自定義UI樣式的關鍵字,部分摘錄如表1所示。

表1 部分自定義Ribbon工具條的關鍵字

續 表
可以直接在*.rtb文件中使用GROUP、CASCADE、COLLAPSED等關鍵字,一般情況下,設計者更傾向于把不同風格的UI制作成不同格式的文件,如*.ddb文件(可變換圖標的下拉式按鈕)、*.csb文件(不會變換圖標的下拉式按鈕)、*.gly(galley庫樣式)文件以及*.grb文件(group文件)等。
現在已經完成澆注系統的NX二次開發,為進一步實現圖4所示的Ribbon界面,設計步驟如下。
(1)新建一個 Ribbon工具條文件(rbn_jzxi‐tongcs.rtb)放在UG_APP_MODELING目錄下,以保證在建模環境下才出現此澆注系統Ribbon界面。其代碼如下:


(2)在UG_APP_MODELING目錄下創建rib‐bon_group1_jz.grb文件,其部分關鍵代碼如下:
BUTTON JZ_LENG_Z//創建Z形冷料穴命令按鈕
RIBBON_STYLELARGE_IMAGE_WITHOUT_TEXT//指明其形式為不帶文字大圖標

圖4 澆注系統Ribbon界面
BUTTON JZ_LENG_ZHUI//創建錐形冷料穴命令按鈕
RIBBON_STYLELARGE_IMAGE_WITHOUT_TEXT//指明其形式為不帶文字大圖標
BUTTON JZ_LENG_HUAN//創建環形冷料穴命令按鈕
RIBBON_STYLELARGE_IMAGE_WITHOUT_TEXT//指明其形式為不帶文字大圖標
(3)繼續創建ribbon_gallery1_jz.gly庫文件,其部分關鍵代碼如下:
COLUMN_IN_RIBBON 2//指明RIBBON界面出現2列
COLUMN_IN_POPUP 2//指明POPUP時出現2列
GALLERY_STYLE SMALL_IMAGE_AND_TEXT//指明其形式為帶文字小圖標BEGIN_GALLERY分流道//開始創建分流道庫
BUTTON JZ_YUAN//創建圓形分流道命令按鈕
BUTTON JZ_TI//創建梯形分流道命令按鈕
BUTTON JZ_U//創建U形分流道命令按鈕
BUTTON JZ_BAN//創建半圓形分流道命令按鈕
BUTTON JZ_JU//創建矩形分流道命令按鈕
END_GALLERY//分流道庫創建結束
(4)再建ribbon_group2_jz.grb文件,其部分關鍵代碼如下:
BUTTON JZ_CE//創建側澆口命令按鈕
RIBBON_STYLE LARGE_IMAGE_AND_TEXT//指明其形式為帶文字大圖標
BUTTON JZ_FAN//創建扇形澆口命令按鈕
RIBBON_STYLE SMALL_IMAGE_AND_TEXT//指明其形式為帶文字小圖標
BUTTON JZ_POINT//創建點澆口命令按鈕
RIBBON_STYLE SMALL_IMAGE_AND_TEXT//指明其形式為帶文字小圖標
BUTTON JZ_QIAN//創建潛伏式澆口命令按鈕
RIBBON_STYLE SMALL_IMAGE_AND_TEXT//指明其形式為帶文字小圖標
(5)最后創建ribbon_cascade_jz.csb文件,其部分關鍵代碼如下:

通過對UG/Open二次開發平臺Menuscript技術設計Ribbon風格界面的分析和探討,介紹了Ribbon界面實現的方法、步驟,并通過基于NX二次開發的澆注系統Ribbon界面的設計,實現了不同風格樣式的Ribbon界面。以上提出的Ribbon界面UI設計方法適用于各種基于UG NX二次開發的Ribbon工具條定制,對NX二次開發技術人員具有一定的參考意義。