Creo二次开发:创建工程图,生成球标和明细表

    xiaoxiao2026-06-16  1

    首先需要在Creo中创建一个自己的工程图模板,在模板中插入表格,并且设置表格的重复区域。创建工程图时就自动生成明细表了。

    代码如下:

    //创建工程图 int CPart2DDlg::UserDrawingCreate() {     ProError err;     ProMdl soild_mdl;     ProMdlType mdl_tpye;     ProMdldata data;     ProModel model;     ProFileName msgfil;     ProName predefined_template,name;     ProDrawing created_drawing=NULL;     ProDwgcreateOptions options=(ProDwgcreateOptions)0;     ProDwgcreateErrs errors;     ProStringToWstring(msgfil,"msg_ugdrawing.txt");     err=ProMdlCurrentGet(&soild_mdl);     if(err!=PRO_TK_NO_ERROR)         return err;     err=ProMdlTypeGet(soild_mdl,&mdl_tpye);     if(err!=PRO_TK_NO_ERROR||mdl_tpye!=PRO_MDL_PART&&mdl_tpye!=PRO_MDL_ASSEMBLY)         return PRO_TK_INVALID_TYPE;     err=ProMdlDataGet(soild_mdl,&data);     wcscpy_s(model.name,data.name);     wcscpy_s(model.type,data.type);     ProStringToWstring(predefined_template,"drw_template");     err = ProMessageDisplay (msgfil, "USER Enter new drawing name: ");     err = ProMessageStringRead (PRO_NAME_SIZE, name);     if (err != PRO_TK_NO_ERROR)         return (err);     err=ProDrawingFromTmpltCreate(name,predefined_template,&model,options,&created_drawing,&errors);     if (err!=PRO_TK_NO_ERROR||err!=PRO_TK_DWGCREATE_ERRORS)     {         return err;     }     return PRO_TK_NO_ERROR; } void CPart2DDlg::OnBnClickedBtnDrawingCreate() {     // TODO: 在此添加控件通知处理程序代码     UserDrawingCreate(); }

    //创建球标 ProError UserTableVisitAct(ProDwgtable* p_table,ProError err,ProAppData tables) {     err=ProArrayObjectAdd((ProArray*)tables,PRO_VALUE_UNUSED,1,p_table);     return PRO_TK_NO_ERROR; } ProError UserTableVisitFilt(ProDwgtable* p_table,ProAppData tables) {     return PRO_TK_NO_ERROR; } void UserBomBalloonCreate() {     ProMdl mdl;     ProMdlCurrentGet(&mdl);     ProArray tables=NULL;     ProArrayAlloc(0,sizeof(ProDwgtable),1,&tables);     ProDrawingTableVisit((ProDrawing)mdl,(ProDwgtableVisitAction)UserTableVisitAct,(ProDwgtableFilterAction)UserTableVisitFilt,(ProAppData)&tables);     int n;     ProArraySizeGet(tables,&n);     if (n==0)     {         AfxMessageBox(_T("遍历失败!"));     }     for (int i=0;i<n;i++)     {         ProDwgtable table;         table=((ProDwgtable*)tables)[i];         ProError err=ProBomballoonAllCreate((ProDrawing)mdl,&table,-1);     } } void CPart2DDlg::OnBnClickedBtnBomballoonCreate() {     // TODO: 在此添加控件通知处理程序代码     UserBomBalloonCreate(); }

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-1310593.html
    最新回复(0)