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

在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), &paramVal);

        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(&paramValString, cstrValue, PRO_PARAM_STRING);
    ProParameter paramString;
    err = ProParameterCreate(&itemMdl, L"icaxdev_string", &paramValString, &paramString);

    // 新增参数:整型
    ProParamvalue paramValInt;
    int iValue = 12345;
    err = ProParamvalueSet(&paramValInt, &iValue, PRO_PARAM_INTEGER);
    ProParameter paramInt;
    err = ProParameterCreate(&itemMdl, L"icaxdev_int", &paramValInt, &paramInt);

    // 新增参数:浮点型
    ProParamvalue paramValDouble;
    double fValue = 123.45;
    err = ProParamvalueSet(&paramValDouble, &fValue, PRO_PARAM_DOUBLE);
    ProParameter paramDouble;
    err = ProParameterCreate(&itemMdl, L"icaxdev_double", &paramValDouble, &paramDouble);

    // 新增参数:布尔类型
    ProParamvalue paramValBoolean;
    ProBoolean bValue = PRO_B_TRUE;
    err = ProParamvalueSet(&paramValBoolean, &bValue, PRO_PARAM_BOOLEAN);
    ProParameter paramBoolean;
    err = ProParameterCreate(&itemMdl, L"icaxdev_boolean", &paramValBoolean, &paramBoolean);

    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", &paramString);
    if (PRO_TK_NO_ERROR == err)
    {
        ProParamvalue paramVal;
        CStringW cstrValue = L"挪威的森林";
        err = ProParamvalueSet(&paramVal, cstrValue, PRO_PARAM_STRING);
        err = ProParameterValueSet(&paramString, &paramVal);
    }

    // 修改参数:icaxdev_int
    ProParameter paramInt;
    err = ProParameterInit(&itemMdl, L"icaxdev_int", &paramInt);
    if (PRO_TK_NO_ERROR == err)
    {
        ProParamvalue paramVal;
        int iValue = 54321;
        err = ProParamvalueSet(&paramVal, &iValue, PRO_PARAM_INTEGER);
        err = ProParameterValueSet(&paramInt, &paramVal);
    }

    // 修改参数:icaxdev_double
    ProParameter paramDouble;
    err = ProParameterInit(&itemMdl, L"icaxdev_double", &paramDouble);
    if (PRO_TK_NO_ERROR == err)
    {
        ProParamvalue paramVal;
        double fValue = 543.21;
        err = ProParamvalueSet(&paramVal, &fValue, PRO_PARAM_DOUBLE);
        err = ProParameterValueSet(&paramDouble, &paramVal);
    }

    // 修改参数:icaxdev_boolean
    ProParameter paramBoolean;
    err = ProParameterInit(&itemMdl, L"icaxdev_boolean", &paramBoolean);
    if (PRO_TK_NO_ERROR == err)
    {
        ProParamvalue paramVal;
        ProBoolean bValue = PRO_B_FALSE;
        err = ProParamvalueSet(&paramVal, &bValue, PRO_PARAM_BOOLEAN);
        err = ProParameterValueSet(&paramBoolean, &paramVal);
    }

    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, &params);
    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*)&params);

    return 0;
}
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值