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(¶m_val, &d_val, PRO_PARAM_DOUBLE); 12 ProParameter param; 13 err = ProParameterCreate(&mdl_item_curr, L"Param_Double_Test", ¶m_val, ¶m); 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", ¶m); 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(¶m); 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", ¶m); 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(¶m, ¶m_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(¶m_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(¶m_value, new_value, PRO_PARAM_STRING); 39 err = ProParameterValueSet(¶m, ¶m_value); 40 if (err == PRO_TK_NO_ERROR) 41 { 42 AfxMessageBox(TEXT("修改参数值成功!")); 43 } 44 else 45 { 46 AfxMessageBox(TEXT("修改参数值失败!")); 47 }
对于特征&面等包含的参数的操作类同。