在Pro/TOOLKIT中,类型ProParameter用来表示参数。
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;
}