Parameter操作

ProE的一大特色就是参数化设计,可见,参数在ProE中的作用。

在ProE中,单击Tools->Parameters菜单项,即可弹出参数对话框。如下图所示:

通过该对话框即可查看、新建、删除、修改参数。

红线框住部分用于切换参数所属的是当前模型,某个特征,还是某个面等等。

那么怎样用代码实现参数的新增、删除、修改与查询呢?

下面通过例子来说明:

Ex01:新增参数------------------------------------------------------

为当前模型新增参数,参数类型为Double,参数名为Param_Double_Test,参数值为123.45

 1  // 获取当前模型
 2  ProError err;
 3  ProMdl mdl_curr;
 4  ProModelitem mdl_item_curr;
 5  err = ProMdlCurrentGet(&mdl_curr);
 6  err = ProMdlToModelitem(mdl_curr, &mdl_item_curr);
 7 
 8  // 添加参数
 9  ProParamvalue param_val;
10  double d_val = 123.45;
11  err = ProParamvalueSet(&param_val, &d_val, PRO_PARAM_DOUBLE);
12  ProParameter param;
13  err = ProParameterCreate(&mdl_item_curr, L"Param_Double_Test", &param_val, &param);
14  if (err == PRO_TK_NO_ERROR)
15  {
16      AfxMessageBox(TEXT("成功新增参数!"));
17  }
18  else
19  {
20      AfxMessageBox(TEXT("新增参数失败!"));
21  }

Ex02:删除参数------------------------------------------------------

在当前模型中删除参数名为Param_Int_Test的参数

 1  // 获取当前模型
 2  ProError err;
 3  ProMdl mdl_curr;
 4  ProModelitem mdl_item_curr;
 5  err = ProMdlCurrentGet(&mdl_curr);
 6  err = ProMdlToModelitem(mdl_curr, &mdl_item_curr);
 7 
 8  // 获取参数
 9  ProParameter param;
10  err = ProParameterInit(&mdl_item_curr, L"Param_Int_Test", &param);
11  if (err == PRO_TK_NO_ERROR)
12  {
13      AfxMessageBox(TEXT("成功获取参数!"));
14  }
15  else
16  {
17      AfxMessageBox(TEXT("获取参数失败!"));
18      return -1;
19  }
20 
21  // 删除获取的参数
22  err = ProParameterDelete(&param);
23  if (err == PRO_TK_NO_ERROR)
24  {
25      AfxMessageBox(TEXT("成功删除参数!"));
26  }
27  else
28  {
29      AfxMessageBox(TEXT("删除参数失败!"));
30  }

Ex03:修改参数值------------------------------------------------------

将当前模型中名为Param_String_Test的String参数值修改为"Hello Kitty"

并输出修改之前的参数值

 1 // 获取当前模型
 2  ProError err;
 3  ProMdl mdl_curr;
 4  ProModelitem mdl_item_curr;
 5  err = ProMdlCurrentGet(&mdl_curr);
 6  err = ProMdlToModelitem(mdl_curr, &mdl_item_curr);
 7 
 8  // 获取参数
 9  ProParameter param;
10  err = ProParameterInit(&mdl_item_curr, L"Param_String_Test", &param);
11  if (err == PRO_TK_NO_ERROR)
12  {
13      AfxMessageBox(TEXT("成功获取参数!"));
14  }
15  else
16  {
17      AfxMessageBox(TEXT("获取参数失败!"));
18      return -1;
19  }
20 
21  // 获取参数值并输出
22  ProParamvalue param_value;
23  ProParamvalueType param_type;
24  err = ProParameterValueGet(&param, &param_value);
25  if (param_value.type != PRO_PARAM_STRING)
26  {
27      AfxMessageBox(TEXT("参数类型不为String."));
28      return -1;
29  }
30  ProLine old_value;
31  err = ProParamvalueValueGet(&param_value, PRO_PARAM_STRING, old_value);
32  CStringW cstr_old_val;
33  cstr_old_val.Format(L"Old Value: %s", old_value);
34  MessageBoxW(NULL, LPCWSTR(cstr_old_val), L"Test", MB_OK);
35 
36  // 设置新的参数值
37  ProLine new_value = L"Hello Kitty";
38  err = ProParamvalueSet(&param_value, new_value, PRO_PARAM_STRING);
39  err = ProParameterValueSet(&param, &param_value);
40  if (err == PRO_TK_NO_ERROR)
41  {
42      AfxMessageBox(TEXT("修改参数值成功!"));
43  }
44  else
45  {
46      AfxMessageBox(TEXT("修改参数值失败!"));
47  }

对于特征&面等包含的参数的操作类同。

原文地址:https://www.cnblogs.com/Hisin/p/2614188.html