Pro/TOOLKIT示例程序(九)参数ProParameter
2018-01-14 19:51
746 查看
在Pro/TOOLKIT中,类型ProParameter用来表示参数。
类型ProParamvalue用来表示参数的值。
typedef struct proparameter { ProType type; // 值为PRO_PARAMETER ProName id; // 参数名 ProParamowner owner; // 参数的所有者 } ProParameter;
类型ProParamvalue用来表示参数的值。
typedef struct Pro_Param_Value { ProParamvalueType type; // 参数类型 ProParamvalueValue value; // 参数值 } ProParamvalue; typedef enum param_value_types { PRO_PARAM_DOUBLE = 50, // 浮点型 PRO_PARAM_STRING = 51, // 字符串 PRO_PARAM_INTEGER = 52, // 整型 PRO_PARAM_BOOLEAN = 53, // 布尔类型 PRO_PARAM_NOTE_ID = 54, PRO_PARAM_VOID = 57 } ProParamvalueType; typedef union param_value_values { double d_val; // 浮点型的值 int i_val; // 整型的值 short l_val; // 布尔类型的值: 1为true;0为false ProLine s_val; // 字符串类型的值 } ProParamvalueValue;
获取模型下的所有参数
// 参数访问函数 ProError UserParamsVisitFunc(ProParameter *handle, ProError status, ProAppData data) { list<ProParameter>* pParamLst = (list<ProParameter>*)data; pParamLst->push_back(*handle); return PRO_TK_NO_ERROR; } // 获取模型下的所有参数 int GetModelAllParams(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ProError err; // 获取当前模型 ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem itemMdl; err = ProMdlToModelitem(mdlCurr, &itemMdl); // 遍历获取所有参数 list<ProParameter> lstParam; err = ProParameterVisit(&itemMdl, NULL, UserParamsVisitFunc, &lstParam); // 弹出对话框显示参数列表 CListParamsDlg dlg(lstParam); dlg.DoModal(); return 0; } // 往参数列表控件中填入数据 void CListParamsDlg::FillParamsListCtrl() { int nIndex = 0; list<ProParameter>::iterator iterParam = m_lstParam.begin(); for (; iterParam != m_lstParam.end(); ++iterParam) { ProParamvalue paramVal; ProParameterValueGet(&(*iterParam), ¶mVal); CString cstrParamName = iterParam->id; CString cstrParamType = L""; CString cstrParamValue = L""; switch (paramVal.type) { case PRO_PARAM_STRING: { cstrParamType = L"字符串"; cstrParamValue = paramVal.value.s_val; } break; case PRO_PARAM_INTEGER: { cstrParamType = L"整型"; cstrParamValue.Format(L"%d", paramVal.value.i_val); } break; case PRO_PARAM_DOUBLE: { cstrParamType = L"浮点型"; cstrParamValue.Format(L"%.2f", paramVal.value.d_val); } break; case PRO_PARAM_BOOLEAN: { cstrParamType = L"布尔类型"; if (paramVal.value.l_val == 1) { cstrParamValue = L"是"; } else { cstrParamValue = L"否"; } } break; default: continue; break; } nIndex++; CString cstrIndex; cstrIndex.Format(L"%d", nIndex); int nItem = m_paramsLstCtrl.InsertItem(m_paramsLstCtrl.GetItemCount(), cstrIndex, 0); // 参数名称 m_paramsLstCtrl.SetItemText(nItem, 1, cstrParamName); // 参数类型 m_paramsLstCtrl.SetItemText(nItem, 2, cstrParamType); // 参数值 m_paramsLstCtrl.SetItemText(nItem, 3, cstrParamValue); } }
添加参数
// 添加参数 int AddParamsToMdl(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { ProError err; // 获取当前模型 ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem itemMdl; err = ProMdlToModelitem(mdlCurr, &itemMdl); // 新增参数:字符串类型 ProParamvalue paramValString; CStringW cstrValue = L"我爱北京天安门"; err = ProParamvalueSet(¶mValString, cstrValue, PRO_PARAM_STRING); ProParameter paramString; err = ProParameterCreate(&itemMdl, L"icaxdev_string", ¶mValString, ¶mString); // 新增参数:整型 ProParamvalue paramValInt; int iValue = 12345; err = ProParamvalueSet(¶mValInt, &iValue, PRO_PARAM_INTEGER); ProParameter paramInt; err = ProParameterCreate(&itemMdl, L"icaxdev_int", ¶mValInt, ¶mInt); // 新增参数:浮点型 ProParamvalue paramValDouble; double fValue = 123.45; err = ProParamvalueSet(¶mValDouble, &fValue, PRO_PARAM_DOUBLE); ProParameter paramDouble; err = ProParameterCreate(&itemMdl, L"icaxdev_double", ¶mValDouble, ¶mDouble); // 新增参数:布尔类型 ProParamvalue paramValBoolean; ProBoolean bValue = PRO_B_TRUE; err = ProParamvalueSet(¶mValBoolean, &bValue, PRO_PARAM_BOOLEAN); ProParameter paramBoolean; err = ProParameterCreate(&itemMdl, L"icaxdev_boolean", ¶mValBoolean, ¶mBoolean); return 0; }
修改参数
// 修改参数 int TestEditParams(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { ProError err; // 获取当前模型 ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem itemMdl; err = ProMdlToModelitem(mdlCurr, &itemMdl); // 修改参数:icaxdev_string ProParameter paramString; err = ProParameterInit(&itemMdl, L"icaxdev_string", ¶mString); if (PRO_TK_NO_ERROR == err) { ProParamvalue paramVal; CStringW cstrValue = L"挪威的森林"; err = ProParamvalueSet(¶mVal, cstrValue, PRO_PARAM_STRING); err = ProParameterValueSet(¶mString, ¶mVal); } // 修改参数:icaxdev_int ProParameter paramInt; err = ProParameterInit(&itemMdl, L"icaxdev_int", ¶mInt); if (PRO_TK_NO_ERROR == err) { ProParamvalue paramVal; int iValue = 54321; err = ProParamvalueSet(¶mVal, &iValue, PRO_PARAM_INTEGER); err = ProParameterValueSet(¶mInt, ¶mVal); } // 修改参数:icaxdev_double ProParameter paramDouble; err = ProParameterInit(&itemMdl, L"icaxdev_double", ¶mDouble); if (PRO_TK_NO_ERROR == err) { ProParamvalue paramVal; double fValue = 543.21; err = ProParamvalueSet(¶mVal, &fValue, PRO_PARAM_DOUBLE); err = ProParameterValueSet(¶mDouble, ¶mVal); } // 修改参数:icaxdev_boolean ProParameter paramBoolean; err = ProParameterInit(&itemMdl, L"icaxdev_boolean", ¶mBoolean); if (PRO_TK_NO_ERROR == err) { ProParamvalue paramVal; ProBoolean bValue = PRO_B_FALSE; err = ProParamvalueSet(¶mVal, &bValue, PRO_PARAM_BOOLEAN); err = ProParameterValueSet(¶mBoolean, ¶mVal); } return 0; }
删除参数
// 删除参数 int TestDeleteParams(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { ProError err; // 获取当前模型 ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem itemMdl; err = ProMdlToModelitem(mdlCurr, &itemMdl); // 让用户选择参数 ProParameter* params; err = ProParameterSelect(&itemMdl, mdlCurr, -1, PRO_B_TRUE, L"确认", NULL, ¶ms); if (PRO_TK_NO_ERROR != err) { return -1; } // 遍历删除用户选择的参数 int nSize = 0; err = ProArraySizeGet(params, &nSize); for (int i = 0; i < nSize; ++i) { err = ProParameterDelete(&(params[i])); } // 释放数组 ProArrayFree((ProArray*)¶ms); return 0; }
相关文章推荐
- Pro/TOOLKIT示例程序(四)获取几何元素:基准点
- Pro/TOOLKIT示例程序(五)获取几何元素:基准轴
- Pro/TOOLKIT示例程序(六)获取几何元素:坐标系
- Pro/TOOLKIT示例程序(十四)特征元素树
- Pro/TOOLKIT示例程序(一)模型和模型项
- Pro/TOOLKIT示例程序(二)遍历模型下的所有特征
- 启动Pro/TOOLKIT程序的常见错误及解决办法
- 如何调试Pro/TOOLKIT程序
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(三)
- Pro/Toolkit示例之一:异步启动ProE
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(一)
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- Pro/Toolkit示例之二:同步Dll程式
- 微信小程序实现传参数的几种方法示例
- Pro/TOOLKIT编程技巧:查找Pro/TOOLKIT示例代码
- shell脚本程序中的部分常用环境变量和参数变量的说明以及简单shell脚本示例
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- 第一站NO.5--《C Primer Plus(第五版)中文版》第五章_5.6 带有参数的函数和5.7 一个示例程序
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(二)
- Command 程序示例,可以带参数运行