摘 "要:為工程設(shè)計人員能夠擺脫繁瑣的Creo工程圖轉(zhuǎn)檔工作,把更多的時間和精力用在具體設(shè)計上,提高設(shè)計能力和水平,該文通過Creo3.0二次開發(fā)接口Pro/Toolkit與VS2012集成,開發(fā)工程圖自動轉(zhuǎn)檔程序,同時也詳細(xì)給出開發(fā)配置,實現(xiàn)原理、主要編程代碼和實例應(yīng)用。
關(guān)鍵詞:工程圖;Pro/ToolKit;二次開發(fā);批量轉(zhuǎn)檔;程序開發(fā)
中圖分類號:TP317.4 " " "文獻(xiàn)標(biāo)志碼: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作為一種功能強(qiáng)大的CAD/CAM軟件,在電子結(jié)構(gòu)設(shè)計中得到廣泛應(yīng)用,但作為通用軟件,在滿足個性化需求方面就有些欠缺,因此,進(jìn)行Creo定制化的研究十分必要。對使用Creo使用者來說,定制化研究不但能滿足使用者個性化的使用要求,還能提高工作效率、減少出錯率,避免一些重復(fù)性的勞動,是一項非常值得去做的工作。從互聯(lián)網(wǎng)最近幾年來發(fā)表的文章看,Creo定制化的研究越來越受到Creo使用者的重視,相關(guān)定制化研究成果也越來越多。
本文就Creo工程圖轉(zhuǎn)檔進(jìn)行了定制化的研究和開發(fā)。目前,國內(nèi)傳統(tǒng)制造業(yè)加工車間仍然采用二維圖紙加工,所以工程設(shè)計人員完成產(chǎn)品三維設(shè)計后,需要出滿足車間加工的二維圖,但由于Creo直接出的二維工程圖不能被AutoCAD等傳統(tǒng)二維平面CAD軟件打開,使得Creo二維工程圖轉(zhuǎn)檔非常必要,再者每個產(chǎn)品的工程圖都不是幾張或者十幾張,每次工程圖轉(zhuǎn)檔顯得費(fèi)時、費(fèi)力、容易遺漏,為了避免重復(fù)勞動、節(jié)省時間、提高效率,進(jìn)行Creo工程圖轉(zhuǎn)檔功能的開發(fā)有很高的實用價值。
為此,Creo軟件提供了豐富的二次開發(fā)接口,為解決Creo擴(kuò)展應(yīng)用提供了途徑。本文利用Creo提供的二次開發(fā)接口:Pro/ToolKit和VS2012(Microsoft Visual Studio 2012)集成開發(fā)環(huán)境,開發(fā)出了Creo工程圖自動轉(zhuǎn)檔程序,簡化了Creo工程圖轉(zhuǎn)檔的操作,實現(xiàn)了批量自動轉(zhuǎn)化功能。
1 "開發(fā)環(huán)境及配置
1.1 "開發(fā)環(huán)境
操作系統(tǒng):Microsoft Windows 7 SP1。
開發(fā)軟件:Microsoft Visual Studio 2012。
Creo3.0二次開發(fā)工具:Pro/ToolKit。
1.2 "開發(fā)配置
包含文件的設(shè)置(Include Directories)
…\protoolkit\includes\
包含庫文件的設(shè)置(Library Directories)
…\protoolkit\x86_win64\obj\
項目設(shè)置-附加庫的設(shè)置(Additional Dependencies)
protk_dllmd.lib mpr.lib netapi32.lib psapi.lib wsock32.lib ucore.lib udata.lib odbc32.lib
忽略的默認(rèn)庫(Ignore Specific Default Libraries)
libcmtd.libmsvcrt.liblibcmt.lib
預(yù)處理器定義(Preprocessor Definitions)-增加字符串
PRO_USE_VAR_ARGS
字符設(shè)置(Character Set)
Use Unicode Character Set
1.3 "MFC和同步模式[1]
Pro/Toolkit應(yīng)用程序同步模式中的共享動態(tài)鏈接庫模式(DLL)。
1.4 "開始函數(shù)和結(jié)束函數(shù)[2]
extern \"C\" intuser_initialize(intargc,char *argv[],char *version)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//添加用戶代碼:實現(xiàn)過程代碼;
…
}//開始函數(shù)
extern \"C\" void user_terminate()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); return;
}//結(jié)束函數(shù)
1.5 "注冊文件編寫和加載運(yùn)行
注冊文件protk.dat,編寫如下內(nèi)容。
name " " " 轉(zhuǎn)檔//加載程序名稱
exec_file " "x:\xx\drwtocad\drwtocad.dll//執(zhí)行文件絕對路徑
text_dir " " x:\xx\drwtocad\text//菜單文件
startup " " "dll "http://執(zhí)行模式
delay_start " 1 "http://是否延遲啟動 否
allow_stop " true "http://允許停止運(yùn)行 否
end
通過菜單“工具-輔助應(yīng)用程序”啟動“轉(zhuǎn)檔”,完成程序加載運(yùn)行。
2 "實現(xiàn)方法和主要編程代碼
2.1 "實現(xiàn)方法
利用VS中MFC對話框技術(shù)建立程序交互界面,設(shè)置必要的需要進(jìn)行交互的工具對象,比如轉(zhuǎn)檔文件列表控件,轉(zhuǎn)檔的文件路徑按鈕、轉(zhuǎn)檔后的文件路徑按鈕、圖紙簽署開關(guān)、階段標(biāo)識選擇和更改文件名等。
首先設(shè)置需要轉(zhuǎn)檔文件的路徑,利用函數(shù)ProFilesList(),獲取此路徑下的所有*.drw文件,得到文件清單。
然后按文件清單把轉(zhuǎn)檔文件(*.drw)利用函數(shù)ProMdlLoad()加載到Creo軟件會話內(nèi)存中,根據(jù)轉(zhuǎn)檔前的配置:路徑設(shè)置、是否進(jìn)行電子簽名,是否添加圖紙的階段標(biāo)識、是否進(jìn)行圖紙的重命名——圖號+名稱文件名,是否按圖紙幅面大小進(jìn)行分類存放等進(jìn)行轉(zhuǎn)檔。
最后利用Pro2dExport()導(dǎo)出DWG文件、ProPDFExport()導(dǎo)出PDF文件。
2.2 "主要編程代碼
DWG文件轉(zhuǎn)檔函數(shù):Pro2dExport(),PDF文件轉(zhuǎn)檔函數(shù):ProPDFExport()。
Pro2dExport(ProImportExportFile format,ProPath filename,ProMdl model,Pro2dExportdata data),
format //轉(zhuǎn)檔后的文檔格式,這是個枚舉類型的數(shù)據(jù)(例如轉(zhuǎn)DWG格式:PRO_DWG_FILE);
filename //轉(zhuǎn)檔后文件的名稱(不能為中文)和絕對路徑;
model " //需要轉(zhuǎn)檔的DRW文件;
data " "http://轉(zhuǎn)檔輸出構(gòu)造器,可以設(shè)置為NULL;
ProPDFExport(ProMdl model,ProPath output_file,ProPDFOptions options),
model " " "http://需要轉(zhuǎn)檔的DRW文件;
output_file " " "http://導(dǎo)出PDF的文件路徑加文件名;
options " " //導(dǎo)出PDF的配置選項,常用配置選項:PRO_PDFOPT_RASTER_DPI,設(shè)置導(dǎo)出PDF分辨率,取值范圍100~600,默認(rèn)值300;PRO_PDFOPT_CO LOR_DEPTH設(shè)置導(dǎo)出文件頁面顏色;PRO_PDFOPT _SHEETS設(shè)置導(dǎo)出文件的頁面,默認(rèn)是導(dǎo)出所有頁面;PRO_PDFOPT_LAUNCH_VIEWER導(dǎo)出PDF文件是否默認(rèn)打開等;
Options配置選項是整形值的通過函數(shù)ProPDFoptionsIntpropertySet(),進(jìn)行設(shè)置,配置選項是布爾型值的通過函數(shù)ProPDFoptionsBoolpropertySet()進(jìn)行設(shè)置,配置選項是字符串值的通過函數(shù)ProPDFoptionsStringpropertySet ()進(jìn)行設(shè)置,配置選項是雙精度值的通過函數(shù)ProPDFoptionsDoublepropertySet()進(jìn)行設(shè)置。這4個函數(shù)都是3個參數(shù):,第一個參數(shù)是options集合,第二個參數(shù)是options具體某個選項,第三個參數(shù)是第二參數(shù)的具體值。
遍歷文件函數(shù):ProFilesList。獲取指定目錄下的文件清單,根據(jù)設(shè)置的過濾器(文件擴(kuò)展名)。ProFilesList (ProPath directory_path,ProLine filter,ProFileListOptlisting_option,ProPath **p_file_name_array,ProPath **p_subdir_name_array)。
directory_path//需要遍歷文件的文件路徑 "filter,//文件過濾器(文件擴(kuò)展名,比如*.drw、*.prt、*.asm等);listing_option//設(shè)置遍歷文件是所有版本或者最新版本:PRO_FILE_LIST_ALL或者 PRO_FILE_LIS T_LATEST;**p_file_name_array //指定目錄下文件數(shù)組;**p_subdir_name_array//指定目錄下子目錄文件數(shù)組。
模型加載函數(shù):ProMdlFiletypeLoad()。把指定路徑中的模型文件加載到內(nèi)存中,用于后續(xù)對模型文件進(jìn)行操作。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):自定義函數(shù),獲取工程圖的名稱和圖號等信息,內(nèi)部主要使用的函數(shù)如下:
ProMdlToModelitem(mdl,amp;owner);//模型句柄轉(zhuǎn)化為模型項;
ProParameterInit(amp;owner,name,amp;param);使用參數(shù)名稱name初始化模型項參數(shù)數(shù)據(jù);
ProParameterValueGet(amp;param,amp;paravalue);根據(jù)模型項參數(shù)獲取參數(shù)值。
示例代碼(截取):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文件按行讀取簽署人員名字,數(shù)據(jù)類型從CString轉(zhuǎn)化為wchar_t,以寬字符串創(chuàng)建Creo文本注釋,按圖紙幅面簽署位置把文本注釋寫在該位置,完成簽署從文本文件到工程圖文件的轉(zhuǎn)變。
示例代碼(截取):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);獲取階段標(biāo)識并寫入工程圖中。階段標(biāo)識的創(chuàng)建是讀取用戶對階段標(biāo)識的選取操作,根據(jù)選擇進(jìn)行相應(yīng)階段文件創(chuàng)建,并寫入工程圖相應(yīng)位置,實現(xiàn)方式與獲取簽署文件人員姓名類似。示例代碼(截?。篏etJieDuanBiaoShi(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;
}
………………
}
工程圖按圖號+圖紙名稱轉(zhuǎn)檔成DWG或者PDF,是通過DrwToDwgOrPDF()自定義函數(shù)實現(xiàn)的。首先根據(jù)Pro2dExport()或者ProPDFExport()進(jìn)行格式轉(zhuǎn)化,按Creo默認(rèn)配置進(jìn)行格式轉(zhuǎn)化,然后使用CFile::Rename(oldPath,newPath)對轉(zhuǎn)化成功的文件進(jìn)行重命名,實現(xiàn)工程圖文件按圖號+圖紙名稱的轉(zhuǎn)檔目的。
工程圖按幅面輸出是根據(jù)圖紙幅面大小建立幅面大小的文件夾,通過獲取工程圖文件幅面的大小,轉(zhuǎn)檔時按工程圖幅面大小放入相應(yīng)的文件夾內(nèi)。
2.3 "開發(fā)程序應(yīng)用實例
按本文上述方法,開發(fā)的程序界面(圖1),該程序能夠顯示當(dāng)前工作目錄下的工程圖文件,提取工程圖的圖號、名稱、頁數(shù)等。
3 "結(jié)束語
綜上所述,本文給出的Pro/Toolkit的工程圖批量轉(zhuǎn)檔程序,經(jīng)過實踐證明,大大提高了設(shè)計人員工程圖轉(zhuǎn)檔的效率,滿足了電子圖紙轉(zhuǎn)檔格式的不同需求。此實現(xiàn)方法具有很好的可行性和實際應(yīng)用價值,本實例對利用Creo其他應(yīng)用開發(fā)具有借鑒作用。
參考文獻(xiàn):
[1] 張舉,靳玉春.基于PRO/E的二次開發(fā)方法概述鑄造設(shè)備研究[J].2007(1):30.
[2] 賴朝安.Pro/ENGNEER二次開發(fā)的關(guān)鍵技術(shù)[J].機(jī)械設(shè)計與制造工程,2003,30(1):43-45.