孟志強(qiáng)
(公安部第一研究所, 北京100048)
隨著數(shù)字化設(shè)計、現(xiàn)代制造技術(shù)的發(fā)展,CAD(計算機(jī)輔助設(shè)計)、CAM(計算機(jī)輔助制造)、CAE(計算機(jī)輔助工程)技術(shù)得到了迅速普及和極大發(fā)展。 Creo 是PTC 公司推出的CAD/CAM/CAE 設(shè)計軟件,提供了目前最全面、集成度最高的產(chǎn)品開發(fā)環(huán)境, 在工業(yè)設(shè)計和機(jī)械設(shè)計領(lǐng)域得以廣泛的應(yīng)用。 除此之外, 市面上還有諸多其他CAD/CAM/CAE 軟 件, 比 如UG、CATIA、SOLIDWORKS、MasterCAM 等等。各設(shè)計部門、加工廠家采用的設(shè)計軟件不盡相同, 各單位間直接采用3D 模型進(jìn)行溝通交流還存在模型格式統(tǒng)一的現(xiàn)實困難, 目前階段還是不可避免的需要通過二維工程圖紙進(jìn)行交流。
PDF 是Portable Document Format 的縮寫, 即可移植文檔格式,是一種獨立于應(yīng)用程序、硬件、操作系統(tǒng)的方式呈現(xiàn)文檔的文件格式。 每個PDF 文件包含固定布局的平面文檔的完整描述,包括文本、字形、圖形以及其它需要顯示的信息。 而PDF 文件可以不依賴操作系統(tǒng)以及顯示終端,可方便閱讀、打印和存儲。 而且PDF 文件進(jìn)行權(quán)限設(shè)置以后,可以很好的保證文件的完整性,防止他人隨意篡改。因此將工程圖紙轉(zhuǎn)化為PDF 文件,既可以保護(hù)知識產(chǎn)權(quán),又可以方便使用不同設(shè)計軟件的設(shè)計人員、生產(chǎn)人員、管理人員之間交流交互,尤其是當(dāng)設(shè)計部門異地指導(dǎo)加工生產(chǎn)時。 而且傳統(tǒng)對圖紙進(jìn)行存檔保存需要采取曬印藍(lán)圖的方式,既費時也費力,而采用PDF 文件的形式進(jìn)行電子化保存?zhèn)浞?,則更為方便快捷。
Creo 軟件自帶的將工程圖以保存副本的方式轉(zhuǎn)化成PDF 格式文件的方法,僅僅能實現(xiàn)單張工程圖的轉(zhuǎn)換,而以筆者所在設(shè)計部門進(jìn)行的設(shè)計開發(fā)工作, 一套設(shè)備圖紙少則兩三百張,多則上千張,采用此種方法過于麻煩費事。為此本文中筆者利用Creo 提供的二次開發(fā)工具Creo Parametric TOOLKIT 進(jìn)行二次開發(fā),設(shè)計一款程序快速便捷地將Creo 工程圖轉(zhuǎn)化為PDF 文檔。
Creo Parametric TOOLKIT 是PTC 公司為Creo Parametric 定制的開發(fā)工具包, 使用面向?qū)ο蟮腃 語言編程,提供了用于Creo 設(shè)計軟件底層資源調(diào)用的函數(shù)庫和頭文件,使客戶具有根據(jù)自己的具體需求定制擴(kuò)展Creo Parametric 功能的能力。
本文使用的CAD 設(shè)計平臺為Creo 5.0, 采用與Creo 5.0 契合度較高的Visual Studio 2015 進(jìn)行程序開發(fā)。 通過建立MFC DLL 項目,包含TOOLKIT 提供的頭文件,添加TOOLKIT 提供的庫文件, 配置項目屬性的附加依賴項以及忽略特定庫等, 采用同步模式進(jìn)行二次開發(fā), 設(shè)計程序,編寫代碼,實現(xiàn)主體功能。
如圖1 所示,為實現(xiàn)Creo 工程圖快速轉(zhuǎn)化為PDF 文檔,本程序設(shè)計思路如下:打開一個模型,進(jìn)行模型屬性判定,如果是零件(.prt 格式文件),則打開零件同名圖紙,輸出零件同名PDF,存入指定文件夾,結(jié)束程序;如果是組件(.asm 格式文件),則對該組件進(jìn)行遍歷,如果組件中各子零組件(子零件和子組件)還未輸出同名PDF,則加載各子零組件同名圖紙,輸出各子零組件同名PDF,存入指定文件夾,再進(jìn)行標(biāo)示,表示已輸出同名PDF;當(dāng)整個組件完成遍歷時,結(jié)束程序,從而實現(xiàn)一鍵將組件模型關(guān)聯(lián)的所有的工程圖快速轉(zhuǎn)換為PDF 文檔。
圖1 程序流程圖
利用TOOLKIT 提供的函數(shù)ProMenubarMenuAdd 可以在Creo 菜單欄中新增菜單項、 利用函數(shù)ProCmdActionAdd 設(shè)置新增菜單項的動作響應(yīng)、 利用ProMenubarmenuPushbuttonAdd 在新增菜單項下添加子菜單項,并且在ZhuanPDF.txt 文檔中進(jìn)行菜單欄顯示設(shè)置, 具體相關(guān)函數(shù)使用如下所示。
如圖2a 所示為Creo 初始啟動時菜單欄選項卡情況,圖2b 為啟動了二次開發(fā)的輔助應(yīng)用程序后的菜單欄選項卡情況,系統(tǒng)會生成一個TOOLKIT 的選項卡,在其“工具”菜單欄之下,生成設(shè)計的“批量轉(zhuǎn)PDF”子菜單;而為了應(yīng)用方便,可以在Creo 快速啟動欄中,增添TOOLKIT 命令的按鈕,可自行編輯按鈕圖像,如圖2c 所示,可以更方便快捷地調(diào)用二次開發(fā)加載的應(yīng)用程序。
圖2a Creo 初始菜單
圖2c 設(shè)置快速啟動項
由圖1 程序流程圖可見, 程序主體由一個遍歷過程來實現(xiàn),通過遍歷Creo 當(dāng)前打開的模型,依次對遍歷訪問的子零組件進(jìn)行相應(yīng)的操作。 對模型進(jìn)行遍歷可通過TOOLKIT 提供的遍歷函數(shù)ProSolidFeatVisit 來實現(xiàn),其中參數(shù)User_action_parameter_tiqu 為遍歷主函數(shù)體,而參數(shù)UserAsmCompFilter 為過濾函數(shù),用以設(shè)置遍歷條件,具體函數(shù)形式如下所示。
ProSolidFeatVisit ((ProSolid)model,user_action_parameter_tiqu,UserAsmCompFilter,&appdata);
User_action_parameter_tiqu (ProFeature *feature,ProError status,ProAppData appdata);
UserAsmCompFilter ( ProFeature *feature,ProAppData app_data);
通過調(diào)用函數(shù)ProMdlDataGet 獲得模型的名字、類型、存儲路徑、版本號等信息,從而得到需要轉(zhuǎn)化為PDF的工程圖紙名稱, 如下所示p_asm 為模型句柄,mdldata為ProMdldata 結(jié)構(gòu)體,變量name 存儲模型名字。
ProMdlDataGet(p_asm,&mdldata);
CString name = mdldata.name;
而通過函數(shù)ProMdlLoad 來加載當(dāng)前模型句柄指向部件的同名圖紙,做好輸出同名PDF 文檔的準(zhǔn)備。
status=ProMdlLoad(wfile,type,booltrue,&draw);
通過函數(shù)ProPDFoptionsIntpropertySet 和ProPDFoptionsBoolpropertySet 進(jìn)行PDF 輸出的參數(shù)諸如輸出層、線型、 顏色、 字體、 分辨率等等的設(shè)置; 然后通過函數(shù)ProPDFExport 輸出PDF 文檔到指定的位置。
ProPDFoptionsAlloc(&options);
ProPDFoptionsIntpropertySet (options,
如圖3a 所示,為展示效果以某部件A18615L_1_4_1_3.ASM 為例, 從模型樹中可以看出, 該組件為三級結(jié)構(gòu)。 通過運行二次開發(fā)的程序,按照遍歷順序,依次從上往下輸出組件以及各子零組件工程圖的同名PDF 文檔,如圖3b 所示。
圖3a 模型樹
圖3b 輸出PDF
筆者以Visual Studio 2015 為開發(fā)環(huán)境, 利用Creo 自帶的API 開發(fā)包TOOLKIT,對Creo 進(jìn)行二次開發(fā),生成輔助應(yīng)用程序。 通過對打開的模型進(jìn)行遍歷,實現(xiàn)一鍵快速準(zhǔn)確的將工程圖紙批量轉(zhuǎn)化為PDF 文檔,通過實際使用證明了該方法的有效性及準(zhǔn)確性,可以大大提高工作效率。