孟志強
(公安部第一研究所, 北京100048)
隨著數字化設計、現代制造技術的發展,CAD(計算機輔助設計)、CAM(計算機輔助制造)、CAE(計算機輔助工程)技術得到了迅速普及和極大發展。 Creo 是PTC 公司推出的CAD/CAM/CAE 設計軟件,提供了目前最全面、集成度最高的產品開發環境, 在工業設計和機械設計領域得以廣泛的應用。 除此之外, 市面上還有諸多其他CAD/CAM/CAE 軟 件, 比 如UG、CATIA、SOLIDWORKS、MasterCAM 等等。各設計部門、加工廠家采用的設計軟件不盡相同, 各單位間直接采用3D 模型進行溝通交流還存在模型格式統一的現實困難, 目前階段還是不可避免的需要通過二維工程圖紙進行交流。
PDF 是Portable Document Format 的縮寫, 即可移植文檔格式,是一種獨立于應用程序、硬件、操作系統的方式呈現文檔的文件格式。 每個PDF 文件包含固定布局的平面文檔的完整描述,包括文本、字形、圖形以及其它需要顯示的信息。 而PDF 文件可以不依賴操作系統以及顯示終端,可方便閱讀、打印和存儲。 而且PDF 文件進行權限設置以后,可以很好的保證文件的完整性,防止他人隨意篡改。因此將工程圖紙轉化為PDF 文件,既可以保護知識產權,又可以方便使用不同設計軟件的設計人員、生產人員、管理人員之間交流交互,尤其是當設計部門異地指導加工生產時。 而且傳統對圖紙進行存檔保存需要采取曬印藍圖的方式,既費時也費力,而采用PDF 文件的形式進行電子化保存備份,則更為方便快捷。
Creo 軟件自帶的將工程圖以保存副本的方式轉化成PDF 格式文件的方法,僅僅能實現單張工程圖的轉換,而以筆者所在設計部門進行的設計開發工作, 一套設備圖紙少則兩三百張,多則上千張,采用此種方法過于麻煩費事。為此本文中筆者利用Creo 提供的二次開發工具Creo Parametric TOOLKIT 進行二次開發,設計一款程序快速便捷地將Creo 工程圖轉化為PDF 文檔。
Creo Parametric TOOLKIT 是PTC 公司為Creo Parametric 定制的開發工具包, 使用面向對象的C 語言編程,提供了用于Creo 設計軟件底層資源調用的函數庫和頭文件,使客戶具有根據自己的具體需求定制擴展Creo Parametric 功能的能力。
本文使用的CAD 設計平臺為Creo 5.0, 采用與Creo 5.0 契合度較高的Visual Studio 2015 進行程序開發。 通過建立MFC DLL 項目,包含TOOLKIT 提供的頭文件,添加TOOLKIT 提供的庫文件, 配置項目屬性的附加依賴項以及忽略特定庫等, 采用同步模式進行二次開發, 設計程序,編寫代碼,實現主體功能。
如圖1 所示,為實現Creo 工程圖快速轉化為PDF 文檔,本程序設計思路如下:打開一個模型,進行模型屬性判定,如果是零件(.prt 格式文件),則打開零件同名圖紙,輸出零件同名PDF,存入指定文件夾,結束程序;如果是組件(.asm 格式文件),則對該組件進行遍歷,如果組件中各子零組件(子零件和子組件)還未輸出同名PDF,則加載各子零組件同名圖紙,輸出各子零組件同名PDF,存入指定文件夾,再進行標示,表示已輸出同名PDF;當整個組件完成遍歷時,結束程序,從而實現一鍵將組件模型關聯的所有的工程圖快速轉換為PDF 文檔。

圖1 程序流程圖
利用TOOLKIT 提供的函數ProMenubarMenuAdd 可以在Creo 菜單欄中新增菜單項、 利用函數ProCmdActionAdd 設置新增菜單項的動作響應、 利用ProMenubarmenuPushbuttonAdd 在新增菜單項下添加子菜單項,并且在ZhuanPDF.txt 文檔中進行菜單欄顯示設置, 具體相關函數使用如下所示。

如圖2a 所示為Creo 初始啟動時菜單欄選項卡情況,圖2b 為啟動了二次開發的輔助應用程序后的菜單欄選項卡情況,系統會生成一個TOOLKIT 的選項卡,在其“工具”菜單欄之下,生成設計的“批量轉PDF”子菜單;而為了應用方便,可以在Creo 快速啟動欄中,增添TOOLKIT 命令的按鈕,可自行編輯按鈕圖像,如圖2c 所示,可以更方便快捷地調用二次開發加載的應用程序。

圖2a Creo 初始菜單

圖2c 設置快速啟動項
由圖1 程序流程圖可見, 程序主體由一個遍歷過程來實現,通過遍歷Creo 當前打開的模型,依次對遍歷訪問的子零組件進行相應的操作。 對模型進行遍歷可通過TOOLKIT 提供的遍歷函數ProSolidFeatVisit 來實現,其中參數User_action_parameter_tiqu 為遍歷主函數體,而參數UserAsmCompFilter 為過濾函數,用以設置遍歷條件,具體函數形式如下所示。
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);
通過調用函數ProMdlDataGet 獲得模型的名字、類型、存儲路徑、版本號等信息,從而得到需要轉化為PDF的工程圖紙名稱, 如下所示p_asm 為模型句柄,mdldata為ProMdldata 結構體,變量name 存儲模型名字。
ProMdlDataGet(p_asm,&mdldata);
CString name = mdldata.name;
而通過函數ProMdlLoad 來加載當前模型句柄指向部件的同名圖紙,做好輸出同名PDF 文檔的準備。
status=ProMdlLoad(wfile,type,booltrue,&draw);
通過函數ProPDFoptionsIntpropertySet 和ProPDFoptionsBoolpropertySet 進行PDF 輸出的參數諸如輸出層、線型、 顏色、 字體、 分辨率等等的設置; 然后通過函數ProPDFExport 輸出PDF 文檔到指定的位置。
ProPDFoptionsAlloc(&options);
ProPDFoptionsIntpropertySet (options,

如圖3a 所示,為展示效果以某部件A18615L_1_4_1_3.ASM 為例, 從模型樹中可以看出, 該組件為三級結構。 通過運行二次開發的程序,按照遍歷順序,依次從上往下輸出組件以及各子零組件工程圖的同名PDF 文檔,如圖3b 所示。

圖3a 模型樹

圖3b 輸出PDF
筆者以Visual Studio 2015 為開發環境, 利用Creo 自帶的API 開發包TOOLKIT,對Creo 進行二次開發,生成輔助應用程序。 通過對打開的模型進行遍歷,實現一鍵快速準確的將工程圖紙批量轉化為PDF 文檔,通過實際使用證明了該方法的有效性及準確性,可以大大提高工作效率。