表达式的操作(UF函数)

首先创建一个长方体,然后利用函数UF_MODL_ask_exps_of_feature访问长方体特征中的所有表达式的个数和标识,利用函数UF_MODL_ask_exp_tag_string获得表达式字符串,并用函数UF_MODL_dissect_exp_string分离表达式的名称和数值,最后利用函数UF_MODL_rename_exp对表达式重命名,并利用函数UF_MODL_eval_exp计算表达式的值;通过函数UF_MODL_edit_exp修改表达式的值,然后利用函数UF_MODL_update来更新模型。

​
int modelTe::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    try
    {
        if(block == button0)
        {
			char *block_len[3] = {"1", "2", "3"};			//长宽高
			double block_orig[3] = {0.0, 0.0, 0.0};			//原点
			tag_t blk_obj;									//长方体特征的标识
			int number_of_exps = 0, i;						//部件中所有表达式的个数
			tag_t *exps;									//部件中所有表达式的标识
			char buffer[MAX_STRING_LEN];
			char *string;									//表达式的字符串
			char *lhs_str, *rhs_str;						//表达式中等号左边的字符串和右边的字符串
			tag_t exp_tag;									//对应的表达式的标识
			char *name[3];									//新的表达式的名称
			name[0] = "l";
			name[1] = "w";
			name[2] = "h";
			double exp_value;								//表达式等号右边的值

			UF_UI_open_listing_window();					//打开文本

			//第一个参数:创建新的几何实体
			//第二个参数:长方体的原点
			//第三个参数:长宽高
			//第四个参数:输出参数,长方体的特征标识
			UF_MODL_create_block1(UF_NULLSIGN, block_orig, block_len, &blk_obj);	//创建一个长方体

			//第一个参数:长方体特征标识
			//第二个参数:输出参数,返回查询到的特征表达式的个数
			//第三个参数:输出参数,当前特征的所有表达式的标识,最后需要UF_free释放
			UF_MODL_ask_exps_of_feature(blk_obj, &number_of_exps, &exps);		//获得长方体特征所包含的表达式的个数及标识
			sprintf(buffer, "number_of_exps = %d\n", number_of_exps);
			UF_UI_write_listing_window(buffer);									//显示文本

			//表达式的操作
			for (i = 0; i < number_of_exps; i++)
			{
				//第一个参数:表达式标识的值
				//第二个参数:输出参数,查询到的表达式字符串,需要UF_free释放
				UF_MODL_ask_exp_tag_string(exps[i], &string);					//利用表达式的标识获得表达式的字符串

				//第一个参数:表达式的字符串
				//第二个参数:输出参数,表达式的左值,即名称,需UF_free释放
				//第三个参数:输出参数,表达式的右值,需UF_free释放
				//第四个参数:输出参数,表达式的标识
				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, "%f\n", exp_value);
				UF_UI_write_listing_window(buffer);						//显示文本
				buffer[0] = '\0';										//清空
				UF_free(lhs_str);
				UF_free(rhs_str);
				UF_free(string);
			}
			UF_free(exps);

			string = "\0";												//清空
			UF_MODL_ask_exps_of_feature(blk_obj, &number_of_exps, &exps);		//获得长方体特征所包含的表达式的个数及标识

			//修改表达式
			for (i = 0; i < number_of_exps; i++)
			{
				UF_MODL_ask_exp_tag_string(exps[i], &string);					//利用表达式的标识获得表达式的字符串
				UF_UI_write_listing_window(string);								//显示文本
				UF_UI_write_listing_window("\n");								//显示文本
				if (strcmp(string, "l=1") == 0)
				{
					strcpy(string, "l=5");
					UF_MODL_edit_exp(string);
				}
				else if (strcmp(string, "w=2") == 0)
				{
					strcpy(string, "w=5");
					UF_MODL_edit_exp(string);
				}
				else if (strcmp(string, "h=3") == 0)
				{
					strcpy(string, "h=5");
					UF_MODL_edit_exp(string);
				}
				UF_free(string);
			}
			UF_free(exps);

			UF_MODL_update();									//更新模型
        }
    }
    catch(exception& ex)
    {
        modelTe::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return 0;
}

​

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值