【Creo5.0二次开发参数化】参数遍历,参数值获取

主要函数

官方文档可查看具体使用方法

ProParameterVisit
ProMdlCurrentGet
 ProMdlToModelitem
  ProParameterValueGet

代码

访问动作函数

ProParameterVisit 函数会遍历访问模型的参数,通过过滤函数进行跳过筛选,通过动作函数进行想要的操作。

//参数访问动作函数定义

ProError ParameterActionFn(ProParameter *param,ProError status ,ProAppData app_data ) {
    
    
    //获取app_data 的地址
    ProArray* p_array;
    p_array = (ProArray*)(ProParameter**)app_data;
    //给数组赋值,添加
    ProArrayObjectAdd(p_array, -1, 1, param);
    return PRO_TK_NO_ERROR;
}


入口函数

void ParamsGet() {
    
    
    ProError status;
    ProParameter *p_data;
    ProStringToWstring(msgfil, (char*)MSGFIL);
    ProCharLine sdf;
    ParametersGet(&p_data);
    //遍历获取参数值
    ProParamvalue pvalue;
    int n;
    ProArraySizeGet(p_data, &n);
    for (int i= 0;i<n;i++)
    {
    
       
        AfxMessageBox((p_data+i)->id);
        ProParameterValueGet(p_data + i, &pvalue);
        status = ProMessageDisplay(msgfil, (char*)"TEST String: %0s", pvalue.value.s_val);
        AfxMessageBox(pvalue.value.s_val);
        
    }
    
    //修改参数的值
  
    ProWstringToString(sdf, L"ok");
    ProStringToWstring(pvalue.value.s_val, sdf);
    ProParameterValueSet(p_data + 3, &pvalue);
   

}

从当前模型获取参数列表

ProError ParametersGet(ProParameter** p_data) {
    
    
    ProMdl model;
    ProModelitem modelitem;
   // 获取当前模型
    ProError status;
    status=   ProMdlCurrentGet(&model);
    if(status!= PRO_TK_NO_ERROR){
    
    
        AfxMessageBox(_T("当前不存在模型"));
        return status;
    }
    ProMdlToModelitem(model, &modelitem);
    //分配内存?什么时候
    ProArrayAlloc(0, sizeof(ProParameter), 1, (ProArray*)p_data);
    //调用访问函数,获取参数
    status= ProParameterVisit(&modelitem, NULL, ParameterActionFn, p_data);
    return status;
}

猜你喜欢

转载自blog.csdn.net/qq_43886548/article/details/127666157