您的位置:首页 > 运维架构

Pro/TOOLKIT示例程序(九)参数ProParameter

2018-01-14 19:51 746 查看
在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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息