NX二次开发 UFUN分离表达式的名称和值 UF_MODL_dissect_exp_string
//NX8.0+VS2010
#include <uf.h>
#include <uf_ui.h>
#include <uf_obj.h>
#include <uf_modl.h>
extern DllExport void ufsta(char* param, int* returnCode, int rlen)
{
if (UF_initialize())
return;
int number_of_exps = 0;
tag_t* exps = NULL;
tag_t body_tag = NULL;
double point[3] = { 0.0, 0.0, 0.0 };
char* edgeLen[3] = { "5.0", "10.0", "15.0" };
UF_MODL_create_block1(UF_NULLSIGN, point, edgeLen, &body_tag);
/*获取实体模型表达式 number_of_exps表达式数量 exps表达式标识*/
UF_MODL_ask_exps_of_part(body_tag, &number_of_exps, &exps);
char* string = "";
char* lhs_str = "";
char* rhs_str = "";
tag_t exp_tag = NULL;
char* name[3];
name[0] = "block_l";
name[1] = "block_w";
name[2] = "block_h";
double exp_value = 0.0;
char buffer[100] = "";
UF_UI_open_listing_window();
for (int i = 0; i < number_of_exps; ++i)
{
/*利用表达式标识获得表达式字符串*/
UF_MODL_ask_exp_tag_string(exps[i], &string);
/*分离表达式的名称和数值*/
UF_MODL_dissect_exp_string(string, &lhs_str, &rhs_str, &exp_tag);
/*表达式重命名*/
UF_MODL_rename_exp(lhs_str, name[i]);
UF_UI_write_listing_window(lhs_str);
UF_UI_write_listing_window("=");
/*计算表达式*/
UF_MODL_eval_exp(name[i], &exp_value);
sprintf(buffer, "%.3f\n", exp_value);
UF_UI_write_listing_window(buffer);
}
UF_terminate();
}