许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Creo二次开发:批量生成工程图的方法

Creo二次开发:批量生成工程图的方法

阅读数 31
点赞 0
article_banner

具有如下功能:

1)在列表中列出装配体下所有的零件,选择多个需要生成工程图的零件2)然后对选中的零件生成工程图

3)在每一个工程图中添加表,列出工程图对应模型的参数信息(名称,类型,值等)

代码如下:

//动作函数

  ProError UserFeatVisitAct(ProFeature* p_feature,ProError status,ProAppData data  )

  {

      ProArrayObjectAdd((ProArray*)data,PRO_VALUE_UNUSED,1,p_feature);

      return PRO_TK_NO_ERROR;

  }

  void CDrawingGenerate::UserLoadAllPartInAsm(ProMdl mdl)

  {

      ProError status;

      ProArray array;

      status=ProArrayAlloc(0,sizeof(ProFeature),1,&array);
if   (PRO_TK_NO_ERROR!=status)

      {

          AfxMessageBox(_T("内存错误!"));

          return;

      }

      //遍历特征

      status=ProSolidFeatVisit((ProSolid)mdl,(ProFeatureVisitAction)UserFeatVisitAct,NULL,(ProAppData)&array);

      if (PRO_TK_NO_ERROR!=status)

      {

          AfxMessageBox(_T("遍历失败!"));

          return;

      }

      int array_size;

      status=ProArraySizeGet(array,&array_size);

      if (0==array_size)

      {

          AfxMessageBox(_T("no feature was found!"));

          return;

      }

      //循环筛选特征

      for (int i=0;i<array_size;i++)

      {

          ProFeature feature;

          feature=((ProFeature*)array)[i];

          int num=feature.id;

          ProMdl mdl_prt;

          ProName name;

          ProFeattype p_type;

          status=ProFeatureTypeGet(&feature,&p_type);

          //1000--PRO_MDL_COMPONENT,筛选出PART即可

          if (1000==p_type)

          {

              status=ProAsmcompMdlGet((ProAsmcomp*)&feature,&mdl_prt);

              status=ProMdlNameGet(mdl_prt,name);

              CString m_strID;

              m_strID.Format(_T("%d"),num);


              m_PartList.InsertItem(0,name);

              m_PartList.SetItemText(0,1,m_strID);


              UserLoadAllPartInAsm(mdl_prt);

          }

      }

      ProArrayFree(&array);

  }


  void CDrawingGenerate::OnBnClickedBtnOpenAssembly()

  {

      // TODO: 在此添加控件通知处理程序代码

      ProError err;

      ProMdl mdl;

      ProFamilyName name;

      ProStringToWstring(name,"https://www.gofarlic.com\\demo\\parts\\bottle.asm");


      err=ProMdlRetrieve(name,PRO_MDL_ASSEMBLY,&mdl);

      if (PRO_TK_NO_ERROR!=err)

      {

          return;

      }

      ProMdlDisplay(mdl);


      UserLoadAllPartInAsm(mdl);


      int pid ;

      ProWindowCurrentGet(&pid);

      ProWindowActivate(pid);

  }

  //遍历参数的动作函数

  ProError UserParamVisitAct(ProParameter *param,ProError status,ProAppData data)

  {
vector  <ProParameter> *pf=(vector<ProParameter>*)data;

      pf->push_back(*param);


      return PRO_TK_NO_ERROR;

  }

  //向表格添加数据

  ProError TableTextAdd(ProDwgtable* table,int col,int row,char* text  )

  {

      ProError status;

      ProWstring* lines;

      ProLine first_line;

      //准备要填写的内容

      status=ProArrayAlloc(1,sizeof(ProWstring),1,(ProArray*)&lines);

      ProStringToWstring(first_line,text);

      lines[0]=(ProWstring)first_line;

      //将内容填入表格

      status=ProDwgtableTextEnter(table,col,row,lines);


      status=ProArrayFree((ProArray*)&lines);

      return status;

  }

  int CDrawingGenerate::UserDrawingAllCreate()

  {

      ProError status;

      ProName name;

      ProStringToWstring(name,"https://www.gofarlic.com\\demo\\parts");

      ProPath *file_list,*dir_list;

      status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&file_list);

      status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&dir_list);

      status=ProFilesList(name,L"*.prt",PRO_FILE_LIST_LATEST,&file_list,&dir_list);

      if (PRO_TK_NO_ERROR!=status)

      {

          return status;

      }

      ProMdl mdl;

      int size =0;

      ProArraySizeGet((ProArray)file_list,&size);

      for (int i=0;i<size;i++)

      {

          status=ProMdlLoad(file_list[i],PRO_MDL_PART,PRO_B_FALSE,&mdl);

          ProMdlDisplay(mdl);

          //遍历参数

          ProParamvalue proval;

          ProModelitem item;

          status=ProMdlToModelitem(mdl,&item);

          vector<ProParameter> dims;

          status=ProParameterVisit(&item,NULL,(ProParameterAction)UserParamVisitAct,&dims);

          if (PRO_TK_NO_ERROR!=status)

          {

              return status;

          }

          //生成工程图

          ProMdlType mdl_type;

          ProMdldata data;

          ProModel model  ;

          ProFileName msgfile;

          ProName predefined_template,name;

          ProDrawing created_drawing=NULL;

          ProDwgcreateOptions options=(ProDwgcreateOptions)0;

          ProDwgcreateErrs errors;


          ProStringToWstring(msgfile,"msg_drawing.txt");


          status=ProMdlTypeGet(mdl,&mdl_type);

          if (PRO_TK_NO_ERROR!=status||PRO_MDL_PART!=mdl_type)

          {

              return PRO_TK_INVALID_TYPE;

          }

          status=ProMdlDataGet(mdl,&data);

          wcscpy_s(model.name,data.name);

          wcscpy_s(model. type  ,data.type);


          ProStringToWstring(predefined_template,"c_drawing");

          status=ProMessageDisplay(msgfile,"User enter new drawing name:");

          status=ProMessageStringRead(PRO_NAME_SIZE,name);

          if (PRO_TK_NO_ERROR!=status)

          {

              return status;

          }

          status=ProDrawingFromTmpltCreate(name,predefined_template,&model,options,&created_drawing,&errors);

          if (PRO_TK_NO_ERROR!=status/*||PRO_TK_DWGCREATE_ERRORS!=status*/)

          {

              return status;

          }


          //创建表格

          ProDwgtabledata tdata;

          ProDwgtable table;
double   init_heights[]={1,1,0};

          double widths[]={15,15,15};

          ProHorzJust adjusts[]={PROHORZJUST_CENTER,PROHORZJUST_CENTER,PROHORZJUST_CENTER};

          double pos[]={400.0,200.0,0.0};

          int n_rows;

          ProCharLine char_name,char_value,char_type;


          status=ProDwgtabledataAlloc(&tdata);

          //设置表格起点

          status=ProDwgtabledataOriginSet(tdata,pos);

          status=ProDwgtabledataSizetypeSet(tdata,PRODWGTABLESIZE_CHARACTERS);

          //设置表格列属性

          status=ProDwgtabledataColumnsSet(tdata,3,widths,adjusts);

          //设置表格行属性

          status=ProDwgtabledataRowsSet(tdata,1,init_heights);

          //创建表格

          status=ProDrawingTableCreate(created_drawing,tdata,PRO_B_FALSE,&table);

          //向表格添加数据

          status=TableTextAdd(&table,1,1,"Param Name");

          status=TableTextAdd(&table,2,1,"Value");

          status=TableTextAdd(&table,3,1,"Type");


          for (unsigned int j=0;j<dims.size();j++)

          {

              status=ProParameterValueGet(&dims[j],&proval);


              status=ProDwgtableRowsCount(&table,&n_rows);

              //在表格的末尾添加一行

              status=ProDwgtableRowAdd(&table,n_rows,PRO_B_FALSE,1);

              //在新行中添加参数名称、数值和类型

              ProWstringToString(char_name,dims[j].id);

              status=TableTextAdd(&table,1,n_rows+1,char_name);

              switch(proval.type)

              {

              case PRO_PARAM_DOUBLE:

                  sprintf_s(char_value,"%f",proval.value.d_val);

                  break;

              case PRO_PARAM_INTEGER:

                  sprintf_s(char_value,"%d",proval.value.i_val);

                  break;

              case PRO_PARAM_STRING:

                  sprintf_s(char_value,"%ws",proval.value.s_val);

              default:

                  break;

              }

              status=TableTextAdd(&table,2,n_rows+1,char_value);

              sprintf_s(char_type,"%d",proval.type);

              status=TableTextAdd(&table,3,n_rows+1,char_type);

          }

          //更新表格显示

          status=ProDrawingTablesUpdate(created_drawing);

      }

      status=ProArrayFree((ProArray*)&file_list);

      status=ProArrayFree((ProArray*)&dir_list);

      return PRO_TK_NO_ERROR;

  }


  void CDrawingGenerate::OnBnClickedBtnDrawingCreate()

  {

      // TODO: 在此添加控件通知处理程序代码

      UserDrawingAllCreate();

  }


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空