Creo二次开发:根据参数在指定文件夹中查找模型

    xiaoxiao2026-04-02  6

    通过参数遍历函数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); } 运行结果:

         

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