批量生成工程图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
批量生成工程图
具有如下功能:
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 { 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,"D:\\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 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,"D:\\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