文獻標識碼: A
文章編號: 0258-7998(2012)09-0125-03
隨著計算機技術的發(fā)展,軟件系統(tǒng)越來越復雜。這種變化在計算機輔助設計/制造(CAD/CAM)領域表現(xiàn)得尤為明顯,以往大而全的CAD/CAM軟件越來越顯得力不從心。眾多CAD/CAM軟件開發(fā)者轉而開始對這類軟件的基礎和共性進行研究,,希望提供可進行二次開發(fā)的CAD/CAM平臺支撐系統(tǒng)[1],使用戶能在該支撐系統(tǒng)上進行二次開發(fā),,實現(xiàn)所需的特殊功能,,定制出用戶所在特殊領域的專用CAD/CAM軟件。目前,,為用戶提供功能強大,、使用靈活的二次開發(fā)接口,已經(jīng)成為對CAD/CAM軟件的普遍要求,。二次開發(fā)也成為發(fā)揮CAD/CAM軟件功能的重要途徑之一[2],。TiGEMS是采用特征造型技術的三維幾何造型軟件[3],而特征造型技術也是當前CAD軟件主流實現(xiàn)技術[4]。如何在二次開發(fā)接口中體現(xiàn)特征造型思想的特色和優(yōu)點,是本文要探討的主要問題,。
二次開發(fā)接口的實現(xiàn)方式多種多樣,,目前流行的有通用文件格式實現(xiàn)的接口[5]、組件技術實現(xiàn)的接口[6],、數(shù)據(jù)庫技術實現(xiàn)的接口[7]以及動態(tài)鏈接庫技術實現(xiàn)的接口,。不同的實現(xiàn)技術各有其優(yōu)缺點,并且隨軟件技術的發(fā)展,,二次開發(fā)接口技術也在發(fā)展變化中,。當前很多CAD/CAM軟件系統(tǒng)都同時實現(xiàn)了多種接口方式,以滿足不同用戶的不同需求,。不論使用何種技術,,能夠將接口編程技術與宿主軟件完美結合,在接口中體現(xiàn)宿主軟件的特色和優(yōu)點才是關鍵,。并在三維幾何造型系統(tǒng)TiGEMS中,選用動態(tài)庫技術實現(xiàn)TiGEMS的二次開發(fā)接口的原因在于:(1)動態(tài)庫技術有利于在接口中體現(xiàn)TiGEMS的特征造型思想,,保持了各類用戶對TiGEMS技術和使用特征的認知一致性;(2)用戶有自定義特征的需求,,在考察多種實現(xiàn)方式后認為,,動態(tài)庫技術為實現(xiàn)該需求的最好方式;(3)動態(tài)鏈接庫技術發(fā)展時間長,,技術成熟,掌握該種編程技術的程序員較多,,適宜為工程技術人員做二次開發(fā)用,; (4)使用基于動態(tài)庫技術編寫的用戶程序執(zhí)行效率高、速度快,,能夠充分滿足用戶的各種需求,。
1 設計目標及原則
1.1 設計目標
設計目標用于規(guī)定設計的大方向和基本功能描述,在設計中起總括和綱領的作用,,設計目標應該在設計方案中被逐一細化并最終得到實現(xiàn),。
(1)設計良好的三維幾何造型系統(tǒng)的二次開發(fā)接口應該能夠向用戶展示系統(tǒng)的設計思想,引導用戶正確,、快速地掌握三維幾何造型系統(tǒng)的特點,;使接口開發(fā)用戶對系統(tǒng)的感知與直接操作三維幾何造型系統(tǒng)的感知一致。用戶可以無障礙地從直接操作轉到二次開發(fā)上來,。
(2)用戶通過接口開發(fā)模塊能以插件形式載入三維幾何造型系統(tǒng)中,,也能以獨立程序的形式與三維幾何造型系統(tǒng)共同運行。用戶可根據(jù)自己的需求和喜好在用戶界面加入自己的設計元素,,因此接口應該實現(xiàn)動態(tài)的用戶界面(UI)管理功能,,方便用戶根據(jù)自己的需要定制操作界面,甚至重新構造用戶操作界面[8]。
(3) 二次開發(fā)接口應該具有良好的可擴展性,。二次開發(fā)接口不但要求實現(xiàn)用戶直接操作的所有功能,,還應該實現(xiàn)更底層的數(shù)據(jù)定義和微操作功能,以及更高層的批量操作和集合操作功能,。用戶能夠通過二次開發(fā)賦予三維幾何造型系統(tǒng)更強大或更專業(yè)的功能,。
1.2 設計原則
設計原則規(guī)定了在二次開發(fā)接口設計過程中需要遵守的規(guī)則和方法。遵守設計規(guī)則可以保證最終代碼的質量,、效率和穩(wěn)定性,,并為今后工作的可延續(xù)性提供方便。
(1) 屏蔽不必要的細節(jié),。進行二次開發(fā)的用戶多數(shù)是工程技術人員,,不太可能精通專業(yè)的程序開發(fā)技術。他們要求的二次開發(fā)接口在功能強大的同時又要易學好用,。因此封裝細節(jié)信息,,簡化操作過程非常必要。
(2) 嚴格封裝內部對象和方法,。二次開發(fā)程序對CAD軟件功能的調用和對變量的存取,,都要通過二次開發(fā)接口進行,嚴禁越過接口函數(shù)直接存取變量對象或者調用內部方法,。
(3) 保證接口的魯棒性和獨立性,。用戶往往會以設計人員沒有想到的方式調用二次開發(fā)接口,因此必須保證接口函數(shù)的魯棒性,,不能在屏蔽細節(jié)的同時埋下隱患,。每個接口函數(shù)實現(xiàn)的功能要單一、明確[9],。
(4) 充分考慮接口可擴充性,。二次開發(fā)接口程序架構應該是開放性的,可平滑擴展,,能根據(jù)應用需求的增加將新的功能加入到接口中去,,同時不影響已經(jīng)實現(xiàn)的接口功能[9]。
2 TiGEMS二次開發(fā)接口的設計方案
TiGEMS是多文檔/視圖結構的應用程序,共實現(xiàn)了零件,、裝配,、渲染、有限元和工程圖5種文檔類型,。用戶可以同時打開多種類型的多個文檔,,但在同一時刻只能編輯一個文檔,即當前活動文檔,。TiGEMS使用特征樹組織和管理特征并表示它們之間的相互關系,。特征就是TiGEMS的核心數(shù)據(jù),特征樹即TiGEMS的核心數(shù)據(jù)組織方式: (1)二次開發(fā)接口應開放特征和特征樹的操作方法,讓用戶能夠編程實現(xiàn)對TiGEMS文檔的操作;(2)實現(xiàn)用戶定義特征功能,,擴展特征外延,;(3)能夠對多個用戶插件進行有效管理,最后可修改用戶界面,實現(xiàn)動態(tài)UI,。
2.1 接口功能模塊綜述
TiGEMS的二次開發(fā)接口可分為插件管理模塊,、UI控制模塊、用戶特征管理模塊和用戶接口模塊,,如圖1所示,。
為了使得TiGEMS支持二次開發(fā),首先對TiGEMS的核心進行修改:增加了插件管理,、UI控制和用戶特征管理3個模塊,,然后在TiGEMS核心之外創(chuàng)建用戶接口模塊,封裝所有TiGEMS功能調用,,并向用戶提供函數(shù)調用和對象定義的頭文件和庫文件,。
2.2 插件管理模塊
TiGEMS允許用戶通過二次開發(fā)接口編寫插件,插件可以調用所有二次開發(fā)接口提供的功能,,但是不能獨立運行,,必須載入TiGEMS中才能使用。插件管理模塊作為常住TiGEMS核心的一個功能模塊,,提供了載入,、管理、卸載用戶插件的功能,。
由于TiGEMS的不同文檔類型使用不同的類實現(xiàn),,具有不同的屬性和操作方法,所以某個插件在某種文檔中的功能對另一種文檔并不適用,。因此,要將插件和文檔對應起來,,同類文檔的插件可以共享,,不同類文檔的插件必須相互隔離。
插件管理模塊管理用戶插件,,根據(jù)用戶需求將用戶插件載入或者卸載,,同時隔離對應不同文檔類型的插件模塊,避免沖突和混亂,。
2.3 UI控制模塊
UI控制模塊可根據(jù)用戶載入插件中定義的界面信息構造用戶界面,以及在卸載插件時恢復以前的用戶界面,。當用戶在不同文檔類型中切換時,UI控制模塊還需根據(jù)當前活動文檔的不同重新構造用戶界面,。
2.4 用戶特征管理模塊
用戶特征管理模塊專門用來管理用戶自定義的特征,,由于用戶定義的特征需要被TiGEMS的核心處理和識別[10],因此TiGEMS核心不可避免地要對用戶定義的特征處理函數(shù)進行調用,這極大增加了TiGEMS的潛在不穩(wěn)定性,。為了最大可能地避免這種風險,,用戶特征管理模塊統(tǒng)一負責用戶定義特征的注冊和TiGEMS核心對用戶特征的調用,嚴格限制用戶特征的行為,。
2.5 用戶接口模塊
所有接口函數(shù)都封裝在動態(tài)鏈接庫文件中,與API函數(shù)聲明,、對象定義頭文件一起提供給用戶。用戶編寫好的插件程序也以動態(tài)鏈接庫的形式載入TiGEMS,。
接口函數(shù)部分根據(jù)功能的不同可以分為通用特征操作函數(shù),、UI控制函數(shù)、用戶特征操作函數(shù),、插件管理函數(shù)及其他雜項函數(shù),。
通用特征即TiGEMS已經(jīng)定義好的特征,這些特征的操作函數(shù)包括特征創(chuàng)建函數(shù)、特征修改函數(shù),、特征刪除函數(shù),、特征復制函數(shù)、特征查詢函數(shù),、特征重構函數(shù)和特征加入函數(shù),。
UI控制函數(shù)專門用來創(chuàng)建和修改用戶菜單、工具條,、按鈕及浮動面板等用戶界面元素,,同時還可以添加更改窗口布局,整體顯示風格等,。UI控制接口函數(shù)通過調用處于TiGEMS核心的UI控制模塊起作用,。
用戶特征操作函數(shù)可向TiGEMS注冊、修改及刪除用戶自定義的特征類,。
插件管理函數(shù)為用戶提供在自主開發(fā)程序中管理TiGEMS二次開發(fā)接口插件的功能,當然也可以在插件中管理其他插件,,進行插件的載入、卸載等操作,。插件甚至可以通過管理接口函數(shù)實現(xiàn)卸載自身的操作,。
其他雜項函數(shù)包括對象操作函數(shù)和輔助功能函數(shù)及文件操作函數(shù)。其中文件操作函數(shù)可用來打開,、保存和關閉TiGEMS創(chuàng)建的特定格式,,因為保密或者其他原因不能將格式開放給用戶的文件。
3 TiGEMS二次開發(fā)接口的實現(xiàn)
TiGEMS二次開發(fā)接口的代碼實現(xiàn)在Windows平臺下VC++6.0中完成,具體工作可以分為TiGEMS核心代碼修改和接口函數(shù)封裝兩大部分,。TiGEMS二次開發(fā)接口代碼實現(xiàn)的關健主要集中在TiGEMS核心代碼的修改,。插件管理、UI控制和用戶特征管理都涉及到了對TiGEMS核心代碼的修改,。
3.1 插件管理
TiGEMS是多文檔/視圖結構的程序,,同類文檔的用戶插件是共享的,,但是不同類文檔的用戶插件互相隔離。實現(xiàn)插件的載入/卸載以及初始化都有一套專用的接口函數(shù),,并且插件管理模塊在載入插件的同時將當前活動文檔的類型作為插件的類型保存起來,,為以后可能發(fā)生的文檔切換等操作保存必要的信息。插件管理模塊使用一個結構數(shù)組m_moduleList來管理所有被載入的用戶插件,,這個數(shù)組的每個組元對應一個插件,,存放插件的名稱、句柄,、類型以及插件內部相關信息,。其他模塊通過識別插件的類型來判斷該插件是否屬于當前的活動文檔。
3.2 UI控制
所有用戶插件造成的用戶界面的動態(tài)變化都由UI控制模塊進行統(tǒng)一的調度和控制,。用戶插件中會攜帶有關用戶界面的修改信息,,在載入初始化時向UI控制模塊提出界面請求,UI控制模塊使用一個結構數(shù)來保存每個插件對用戶界面的更改要求,。每遇到一個新插件的界面更改要求,,UI控制模塊都會先進行條件預判斷,全部或部分允許該用戶插件對用戶界面的改變,。之后UI控制模塊就不再干預界面與插件之間的交互,。直到有插件載入、卸載以及文檔切換時,,UI控制模塊才會干預用戶界面的生成,。
UI控制模塊的另一個重要功能是在非同類文檔切換時保證用戶界面隨之改變,對于可以與MFC文檔類關聯(lián),隨文檔的切換而切換的界面元素(如菜單等),,UI控制模塊無需干預,。但對于無法隨文檔切換而切換的界面元素(如命令窗口等),UI控制器需要捕捉文檔切換消息,,在消息處理中完成界面元素的重新構造,。
3.3 用戶定義特征管理
用戶特征實現(xiàn)的關鍵在于如何定義以及TiGEMS如何識別并處理用戶特征。為了讓用戶能在插件中創(chuàng)建特征定義,,需要繼承特征基類C_FeatureDef和c_FeatureStep的定義,。考慮到用戶特征的特殊性,,在GEMSAPI模塊中繼承這兩個類,定義了兩個新的用戶特征基類C_UserFeatureDef和C_UserFeatureStep,增加了表征用戶特征的變量,,并規(guī)定所有用戶特征必須繼承這兩個特征基類,。這樣就解決了用戶特征定義的問題,同時用戶特征識別問題也因為用戶特征繼承自TiGEMS通用特征基類而得到解決,,TiGEMS可以從特征基類中的m_property變量中獲取所需的特征信息,。用戶特征在使用前需要先向用戶特征管理模塊注冊,,只有不存在重名和其他沖突的用戶定義特征類才被允許注冊。用戶特征管理模塊使用一個結構數(shù)組m_userFeature來管理用戶特征,。TiGEMS對用戶特征的任何調用都要通過用戶特征管理模塊間接執(zhí)行,。這樣做的好處在于提高了TiGEMS的穩(wěn)定性,而且用戶特征管理模塊可以及時攔截某些可能出錯的調用,,如用戶插件已卸載,,但TiGEMS卻要調用該插件中用戶特征處理函數(shù)等。TiGEMS核心代碼中所有需要判斷特征類型并調用對應處理的模塊,,都要加入對用戶特征判斷的代碼,,以及通過用戶特征管理模塊調用用戶特征處理的代碼,以便實現(xiàn)TiGEMS對新加用戶特征的響應,。
為用戶提供二次開發(fā)接口,,滿足各種專業(yè)用戶的不同需求是提高三維造型軟件使用范圍和生命力的一個重要途徑。TiGEMS作為一個成功的國產CAD軟件,,實現(xiàn)了二次開發(fā)接口,,其功能得到進一步完善,應用范圍得到了擴展,,使用方式也變得更加豐富,。
參考文獻
[1] SABIN M. CAD system component [J]. Computer-Aided Design, 1996,28(3):183-192.
[2] 趙衛(wèi)東, 柳先輝, 衛(wèi)剛. CAD軟件二次開發(fā)平臺實現(xiàn)技術[J]. 計算機輔助設計與圖形學學報, 2003,15(4):512- 516.
[3] 袁奕. 特征造型在GEMS5.0中的實現(xiàn)[D]. 北京: 清華大學,1998.
[4] 葉修梓,彭維,何利力. 從工業(yè)界的角度看CAD 技術的研究主題與發(fā)展方向[J]. 計算機輔助設計與圖形學學報,2003,15(10):1194-1199.
[5] 陳為. 基于AutoCAD 二次開發(fā)的研究[J]. 計算機工程與應用,1997,33(1):39-43.
[6] 陸薇,劉強,,周琛,等.基于組件的開放式CAD系統(tǒng)模型[J].軟件學報, 1998,9(9):651-655.
[7] 趙付青,,余冬梅,張聚禮. CAD智能工程數(shù)據(jù)庫實現(xiàn)方法的研究與應用[J]. 計算機工程與應用 ,2003,39(2):215-219.
[8] 吳余華,,童水光,,許躍敏. 國外CAD/CAM系統(tǒng)二次開發(fā)關鍵技術的研究[J]. 計算機輔助設計與制造,1996,15(8):11-12.
[9] 王云鵬,雷毅,潘翔,等. CAXA電子圖版的二次開發(fā)技術[J].計算機輔助設計與圖形學學報,2002,14(2):189-192.
[10] 宋玉銀, 蔡復之, 張伯鵬,等. 基于特征設計的CAD系統(tǒng)[J]. 計算機輔助設計與圖形學學報, 1998,10(2):145-151.