
摘 "要:為工程設計人員能夠擺脫繁瑣的Creo工程圖轉檔工作,把更多的時間和精力用在具體設計上,提高設計能力和水平,該文通過Creo3.0二次開發接口Pro/Toolkit與VS2012集成,開發工程圖自動轉檔程序,同時也詳細給出開發配置,實現原理、主要編程代碼和實例應用。
關鍵詞:工程圖;Pro/ToolKit;二次開發;批量轉檔;程序開發
中圖分類號:TP317.4 " " "文獻標志碼:A " " " " "文章編號:2095-2945(2023)20-0133-05
Abstract: In order for engineering designers to get rid of the tedious Creo engineering drawing shift work, spend more time and energy on concrete design, and improve the design ability and level, this paper develops the engineering drawing automatic shift program through the integration of Creo3.0 secondary development interface Pro/Toolkit and VS2012. At the same time, it also provides the development configuration in detail to realize the principle, main programming code and example application.
Keywords: engineering drawing; Pro/ToolKit; secondary development; batch conversion; program development
Creo作為一種功能強大的CAD/CAM軟件,在電子結構設計中得到廣泛應用,但作為通用軟件,在滿足個性化需求方面就有些欠缺,因此,進行Creo定制化的研究十分必要。對使用Creo使用者來說,定制化研究不但能滿足使用者個性化的使用要求,還能提高工作效率、減少出錯率,避免一些重復性的勞動,是一項非常值得去做的工作。從互聯網最近幾年來發表的文章看,Creo定制化的研究越來越受到Creo使用者的重視,相關定制化研究成果也越來越多。
本文就Creo工程圖轉檔進行了定制化的研究和開發。目前,國內傳統制造業加工車間仍然采用二維圖紙加工,所以工程設計人員完成產品三維設計后,需要出滿足車間加工的二維圖,但由于Creo直接出的二維工程圖不能被AutoCAD等傳統二維平面CAD軟件打開,使得Creo二維工程圖轉檔非常必要,再者每個產品的工程圖都不是幾張或者十幾張,每次工程圖轉檔顯得費時、費力、容易遺漏,為了避免重復勞動、節省時間、提高效率,進行Creo工程圖轉檔功能的開發有很高的實用價值。
為此,Creo軟件提供了豐富的二次開發接口,為解決Creo擴展應用提供了途徑。本文利用Creo提供的二次開發接口:Pro/ToolKit和VS2012(Microsoft Visual Studio 2012)集成開發環境,開發出了Creo工程圖自動轉檔程序,簡化了Creo工程圖轉檔的操作,實現了批量自動轉化功能。
1 "開發環境及配置
1.1 "開發環境
操作系統:Microsoft Windows 7 SP1。
開發軟件:Microsoft Visual Studio 2012。
Creo3.0二次開發工具:Pro/ToolKit。
1.2 "開發配置
包含文件的設置(Include Directories)
…\protoolkit\includes\
包含庫文件的設置(Library Directories)
…\protoolkit\x86_win64\obj\
項目設置-附加庫的設置(Additional Dependencies)
protk_dllmd.lib mpr.lib netapi32.lib psapi.lib wsock32.lib ucore.lib udata.lib odbc32.lib
忽略的默認庫(Ignore Specific Default Libraries)
libcmtd.libmsvcrt.liblibcmt.lib
預處理器定義(Preprocessor Definitions)-增加字符串
PRO_USE_VAR_ARGS
字符設置(Character Set)
Use Unicode Character Set
1.3 "MFC和同步模式[1]
Pro/Toolkit應用程序同步模式中的共享動態鏈接庫模式(DLL)。
1.4 "開始函數和結束函數[2]
extern \"C\" intuser_initialize(intargc,char *argv[],char *version)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//添加用戶代碼:實現過程代碼;
…
}//開始函數
extern \"C\" void user_terminate()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); return;
}//結束函數
1.5 "注冊文件編寫和加載運行
注冊文件protk.dat,編寫如下內容。
name " " " 轉檔//加載程序名稱
exec_file " "x:\xx\drwtocad\drwtocad.dll//執行文件絕對路徑
text_dir " " x:\xx\drwtocad\text//菜單文件
startup " " "dll "http://執行模式
delay_start " 1 "http://是否延遲啟動 否
allow_stop " true "http://允許停止運行 否
end
通過菜單“工具-輔助應用程序”啟動“轉檔”,完成程序加載運行。
2 "實現方法和主要編程代碼
2.1 "實現方法
利用VS中MFC對話框技術建立程序交互界面,設置必要的需要進行交互的工具對象,比如轉檔文件列表控件,轉檔的文件路徑按鈕、轉檔后的文件路徑按鈕、圖紙簽署開關、階段標識選擇和更改文件名等。
首先設置需要轉檔文件的路徑,利用函數ProFilesList(),獲取此路徑下的所有*.drw文件,得到文件清單。
然后按文件清單把轉檔文件(*.drw)利用函數ProMdlLoad()加載到Creo軟件會話內存中,根據轉檔前的配置:路徑設置、是否進行電子簽名,是否添加圖紙的階段標識、是否進行圖紙的重命名——圖號+名稱文件名,是否按圖紙幅面大小進行分類存放等進行轉檔。
最后利用Pro2dExport()導出DWG文件、ProPDFExport()導出PDF文件。
2.2 "主要編程代碼
DWG文件轉檔函數:Pro2dExport(),PDF文件轉檔函數:ProPDFExport()。
Pro2dExport(ProImportExportFile format,ProPath filename,ProMdl model,Pro2dExportdata data),
format //轉檔后的文檔格式,這是個枚舉類型的數據(例如轉DWG格式:PRO_DWG_FILE);
filename //轉檔后文件的名稱(不能為中文)和絕對路徑;
model " //需要轉檔的DRW文件;
data " "http://轉檔輸出構造器,可以設置為NULL;
ProPDFExport(ProMdl model,ProPath output_file,ProPDFOptions options),
model " " "http://需要轉檔的DRW文件;
output_file " " "http://導出PDF的文件路徑加文件名;
options " " //導出PDF的配置選項,常用配置選項:PRO_PDFOPT_RASTER_DPI,設置導出PDF分辨率,取值范圍100~600,默認值300;PRO_PDFOPT_CO LOR_DEPTH設置導出文件頁面顏色;PRO_PDFOPT _SHEETS設置導出文件的頁面,默認是導出所有頁面;PRO_PDFOPT_LAUNCH_VIEWER導出PDF文件是否默認打開等;
Options配置選項是整形值的通過函數ProPDFoptionsIntpropertySet(),進行設置,配置選項是布爾型值的通過函數ProPDFoptionsBoolpropertySet()進行設置,配置選項是字符串值的通過函數ProPDFoptionsStringpropertySet ()進行設置,配置選項是雙精度值的通過函數ProPDFoptionsDoublepropertySet()進行設置。這4個函數都是3個參數:,第一個參數是options集合,第二個參數是options具體某個選項,第三個參數是第二參數的具體值。
遍歷文件函數:ProFilesList。獲取指定目錄下的文件清單,根據設置的過濾器(文件擴展名)。ProFilesList (ProPath directory_path,ProLine filter,ProFileListOptlisting_option,ProPath **p_file_name_array,ProPath **p_subdir_name_array)。
directory_path//需要遍歷文件的文件路徑 "filter,//文件過濾器(文件擴展名,比如*.drw、*.prt、*.asm等);listing_option//設置遍歷文件是所有版本或者最新版本:PRO_FILE_LIST_ALL或者 PRO_FILE_LIS T_LATEST;**p_file_name_array //指定目錄下文件數組;**p_subdir_name_array//指定目錄下子目錄文件數組。
模型加載函數:ProMdlFiletypeLoad()。把指定路徑中的模型文件加載到內存中,用于后續對模型文件進行操作。ProMdlFiletypeLoad(ProPath full_path,ProMdlfileType type,ProBoolean ask_user_about_reps,ProMdl* p_handle );
ProPath full_path 需要打開的模型文件的全路徑,包括文件名;
ProMdlfileType type 模型文件的類型,比如工程圖文件:PRO_MDLFILE_DRAWING,零件模型:PRO_MDLFILE_PART。
ProBoolean ask_user_about_reps 是否簡化模型顯示;
ProMdl* p_handle 模型句柄
GetDrwParaStringValue(ProMdl mdl,wchar_t* name, wchar_t* stringValue):自定義函數,獲取工程圖的名稱和圖號等信息,內部主要使用的函數如下:
ProMdlToModelitem(mdl,amp;owner);//模型句柄轉化為模型項;
ProParameterInit(amp;owner,name,amp;param);使用參數名稱name初始化模型項參數數據;
ProParameterValueGet(amp;param,amp;paravalue);根據模型項參數獲取參數值。
示例代碼(截取):GetDrwParaStringValue(ProMdl mdl,wchar_t* name,wchar_t* stringValue)
{
ProError status;
ProMdldata mdldata;
ProModelitem owner;
ProParameter param;
ProParamvalue paravalue;
status = ProMdlDataGet(mdl,amp;mdldata);
status = ProMdlToModelitem(mdl,amp;owner);
status = ProParameterInit(amp;owner,name,amp;para m);
if (status!=PRO_TK_NO_ERROR)
{
paravalue.type= PRO_PARAM_STRING;
ProStringToWstring(paravalue.value.s_val, \"\");
status = ProParameterCreate(amp;owner,nam e,amp;paravalue,amp;param);
}
status = ProParameterValueGet(amp;param, amp;paravalue);
ProWstringCopy(paravalue.value.s_val, " " " "stringValue,PRO_VALUE_UNUSED);
return PRO_TK_NO_ERROR;
}
GetQianShu(void);從文件(qianshu.txt)中獲取簽署人員姓名,并寫入工程圖中。從qianshu.txt文件按行讀取簽署人員名字,數據類型從CString轉化為wchar_t,以寬字符串創建Creo文本注釋,按圖紙幅面簽署位置把文本注釋寫在該位置,完成簽署從文本文件到工程圖文件的轉變。
示例代碼(截取):GetQianShu(void)
{
GetModuleFileName(::GetModuleHandle(_T(\"tk_tools.dll\")),sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
nPos = sPath.ReverseFind('\\');
sPath = sPath.Left(nPos);
m_file_path=sPath+CString(\"\\text\\\")+CString(\"qianshu.txt \");
…………………
file.ReadString(strLine);
sheJi.SetWindowText(strLine);
………………
UpdateData(1);
file.Close();
}
GetJieDuanBiaoShi(void);獲取階段標識并寫入工程圖中。階段標識的創建是讀取用戶對階段標識的選取操作,根據選擇進行相應階段文件創建,并寫入工程圖相應位置,實現方式與獲取簽署文件人員姓名類似。示例代碼(截取):GetJieDuanBiaoShi(void)。
{
……………
if (!jieDuan_check.GetCheck())
{
return 0;
}
switch (jieDuan_bs)
{
case 0:
status = ProWstringCopy(SJIEDUAN,wstr_Bs,PRO_VALUE_UNUSED);
break;
case 1:
status = ProWstringCopy(AJIEDUAN,wstr_Bs,PRO_VALUE_UNUSED);
break;
case 2:
status = ProWstringCopy(BJIEDUAN,wstr_Bs,PRO_VALUE_UNUSED);
break;
default:
ProStringToWstring(wstr_emp,str_emp);
status = ProWstringCopy(wstr_emp,wstr_Bs,PRO_VALUE_UNUSED);
break;
}
………………
}
工程圖按圖號+圖紙名稱轉檔成DWG或者PDF,是通過DrwToDwgOrPDF()自定義函數實現的。首先根據Pro2dExport()或者ProPDFExport()進行格式轉化,按Creo默認配置進行格式轉化,然后使用CFile::Rename(oldPath,newPath)對轉化成功的文件進行重命名,實現工程圖文件按圖號+圖紙名稱的轉檔目的。
工程圖按幅面輸出是根據圖紙幅面大小建立幅面大小的文件夾,通過獲取工程圖文件幅面的大小,轉檔時按工程圖幅面大小放入相應的文件夾內。
2.3 "開發程序應用實例
按本文上述方法,開發的程序界面(圖1),該程序能夠顯示當前工作目錄下的工程圖文件,提取工程圖的圖號、名稱、頁數等。
3 "結束語
綜上所述,本文給出的Pro/Toolkit的工程圖批量轉檔程序,經過實踐證明,大大提高了設計人員工程圖轉檔的效率,滿足了電子圖紙轉檔格式的不同需求。此實現方法具有很好的可行性和實際應用價值,本實例對利用Creo其他應用開發具有借鑒作用。
參考文獻:
[1] 張舉,靳玉春.基于PRO/E的二次開發方法概述鑄造設備研究[J].2007(1):30.
[2] 賴朝安.Pro/ENGNEER二次開發的關鍵技術[J].機械設計與制造工程,2003,30(1):43-45.