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

时间:2022-01-31 05:41:48

通过参数遍历函数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);
}

运行结果:

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