在组件下打开零部件的同名工程图,如无同名工程图则新建工程图。如选择的文件为组件则插入材料明细表。
1、命令图标可不添加。
2、图标存放位置:https://www.gofarlic.com\Program Files\PTC\Creo 7.0.7.0\Common Files\text\resource(根据CREO安装位置下修改)。
extern "C" int user_initialize(){ ProError status; uiCmdCmdId cmd_drw; ProFileName MsgFile; ProStringToWstring(MsgFile, "Message.txt"); status = ProCmdActionAdd("cmd_create_drw", (uiCmdCmdActFn)Draw, uiCmdPrioDefault, AccessDefault, PRO_B_TRUE, PRO_B_TRUE, &cmd_drw); status = ProCmdIconSet(cmd_drw, "auto_drawing_large.png");//命令图标,32*32或16*16像素 status = ProCmdDesignate(cmd_drw, "createdrw", "open or creat drw", "open or creat drw", MsgFile); return status;}可使用ProSelect或ProSelbufferSelectionsGet获取选择的零部件。
ProError status;ProSelection* sels;int nb_sel; status = ProSelect("prt_or_asm", 10, NULL, NULL, NULL, NULL, &sels, &nb_sel);if (status != PRO_TK_NO_ERROR){ return(status);}ProMdlFiletypeLoad仅将工程图读取到内存中,并不打开窗口。可通过ProObjectwindowMdlnameCreate创建窗口。
status = ProSelectionModelitemGet(sels[i], &asmcomp); ProMdl Model = asmcomp.owner;ProMdl Drw_model;ProMdldata mdldata; ProMdlDataGet(Model, &mdldata); ProMdlDirectoryPathGet(Model, path);//获取零部件路径ProWstringConcatenate(mdldata.name, path, PRO_VALUE_UNUSED);ProWstringConcatenate(_T(".drw"), path, PRO_VALUE_UNUSED);status = ProMdlFiletypeLoad(path, PRO_MDLFILE_UNUSED, PRO_B_FALSE, &Drw_model);//读取工程图ProMdlFiletypeLoad返回错误是就需新建工程图。ProDrawingFromTmpltCreate可根据 模板 创建新的工程图。
ProError status;ProModel Model;ProPath template_path = _T("...");//模板文件位置 ProMdlMdlnameGet(asmcomp.owner, Model.name);ProMdlExtensionGet(asmcomp.owner, Model.type); ProDrawing draw;ProDwgcreateErrs err; status = ProDrawingFromTmpltCreate(Model.name, template_path, &Model, PRODWGCREATE_DISPLAY_DRAWING, &draw, &err);//根据模板建立工程图if (status != PRO_TK_NO_ERROR){ AfxMessageBox(_T("图纸生成失败!")); return(status);}当选择的为组件是则需插入材料明细表。
if (asmcomp.type == PRO_ASSEMBLY){ ProDwgtable table; ProPoint3d point = { 559.52,213.54,0 };//插入坐标位置 status = ProDwgtableByOriginRetrieve(draw, _T("表名称"), _T("表存放位置"), 0, point, (ProSolid)asmcomp.owner, NULL, &table);//插入材料明细表, if (status != PRO_TK_NO_ERROR) { AfxMessageBox(_T("表格插入失败!")); return(status); }}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删