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