通过参数遍历函数ProParameterVisit获取模型的所有参数,然后将编辑框中输入的参数与之比较,相等则找到对应模型,显示到列表控件中。
代码如下:
//动作函数 ProError UserSearchMdlParamVisitAct(ProParameter *param,ProError status,ProAppData data) { vector<ProParameter> *pf=(vector<ProParameter>*)data; pf->push_back(*param); return PRO_TK_NO_ERROR; } void CSearchMdl::OnBnClickedBtnSearchMdlByParam() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); ProError status; ProName name; ProStringToWstring(name,"D:\\demo\\test"); 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; } m_MdlList.DeleteAllItems(); ProMdl mdl; int size=0,num=0; ProArraySizeGet((ProArray)file_list,&size); for (int i=0;i<size;i++) { 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)UserSearchMdlParamVisitAct,&dims); ProName mdl_name; for (unsigned j=0;j<dims.size();j++) { //获得参数的值 status=ProParameterValueGet(&dims[j],&proval); if (PRO_TK_NO_ERROR!=status) { return; } CString ParamName; CStringW ParamValue; int temp=0; ParamName.Format(_T("%ws"),dims[j].id); //根据参数的不同类型转换成CString switch(proval.type) { //实数 case PRO_PARAM_DOUBLE: temp=proval.value.d_val; ParamValue.Format(_T("%d"),temp); break; //整数 case PRO_PARAM_INTEGER: ParamValue.Format(_T("%d"),proval.value.i_val); break; //字符串 case PRO_PARAM_STRING: ParamValue.Format(_T("%ws"),proval.value.s_val); default: break; } if (m_strParamName==ParamName) { if (m_strParamValue==ParamValue) { status=ProMdlNameGet(mdl,mdl_name); m_MdlList.InsertItem(0,mdl_name); num++; break; } else{ continue; } } else{ continue; } } } if (0==num) { AfxMessageBox(_T("不存在含有该参数的模型!")); } ProArrayFree((ProArray*)&file_list); ProArrayFree((ProArray*)&dir_list); } 运行结果:
