iCAx开思工具箱
标题:
颖悟分享之二--表达式
[打印本页]
作者:
wanxin9999
时间:
2005-6-9 22:14
标题:
颖悟分享之二--表达式
恩,看到很多朋友们在问表达式的问题。
我最近做的工作全部都是和导入函数再刷新表达式有关的。
所以,简单讲讲一些体会。
下面首先罗列一下和表达式相关的函数,大家当然也可以参考董正卫的书。
1.UF_MODL_ask_exp (
char * exp_name,
char exp_defn[ 133 ] );
由表达式名称获得表达式
2.UF_MODL_ask_exps_of_feature (
tag_t feature,
int * number_of_exps,
tag_t ** exps );
当前特征的所有表达式
3. UF_MODL_ask_exps_of_part (
tag_t part_tag,
int * number_of_exps,
tag_t ** exps );
当前part中所有表达式
注意:是当前的part!!一定好好理解一下这个当前的意思。
4.UF_MODL_ask_features_of_exp (
tag_t exp,
int * number_of_features,
tag_t ** features );
由表达式的tag值,得到表达式字符串。
上面这些是查询的相关的比较有用的函数,
一定提醒大家,看清楚那个是表达式的tag,哪个是字符串、
另外,分清楚每个函数的作用范围。
值得注意的,大家常常想查找某个body等等general objects的表达式。
从上面这些函数看,肯定是没有直接的办法的。
那么关键就是如何查询表达式,并筛选要修改的表达式。
这需要配合其他的一些函数使用,或者想一点办法。
作者:
wanxin9999
时间:
2005-6-9 22:21
查询到了目标修改的表达式,那么就是要分离表达式。
这里补充一点表达式的相关知识。
表达式本身有tag值,一个表达式的tag指向一个表达式字符串。
字符串的构成形式是:“名称=数值”。左边是名称,右边是数值。
所以分离表达式,就是把表达式的左边和右边分开。
呵呵,这么简单的东西还在这里再三唠叨^_^
一个函数就可以手起刀落了。
UF_MODL_dissect_exp_string (
char * exp_str,
char ** lhs_str,
char ** rhs_str,
tag_t * exp_tag );
分离以后,如果要修改表达式的数值,那么就是把右边的数值改改哦。
改完了,用下面的两个函数,才能真正起作用。
UF_MODL_edit_exp (
char * expr_str );
UF_MODL_update ( );
作者:
wanxin9999
时间:
2005-6-9 22:51
下面谈谈导入函数和表达式之间的一些问题。
在当前零件中多次导入零件后,
原来的零件表达式已经不是我们先前在单独使用他时候的样子了。
系统会在后面自动添加‘0,’1,’2等等
下面给个例子代码吧。
data.item_id=TUTAI_REC_HEIGHT;
UF_STYLER_ask_value(dialog_id,[$data)]
rec_heit=data.value.real;
sprintf(REC_LEN,"%f",0.5*rec_leng);
//uc1601(REC_LEN,1);
sprintf(REC_WID,"%f",rec_width);
sprintf(REC_HEIT,"%f",rec_heit);
sprintf(rechi,"%s%c%d","rec_heigth",'\'',num);
sprintf(recle,"%s%c%d","rec_length",'\'',num);
sprintf(recwid,"%s%c%d","rec_width",'\'',num);
///////////////查询导入凸台的表达式////////////////////
UF_CALL(UF_OBJ_cycle_by_name ("TUTAI",[$tt_tag))]
// sprintf(temp,"%d",tt_tag);
// uc1601(temp,1);
UF_CALL(UF_OBJ_ask_owning_part (tt_tag, [$part_tag))]
// sprintf(temp,"%d",part_tag);
// uc1601(temp,1);
UF_CALL(UF_MODL_ask_exps_of_part (part_tag,[$number_of_exps,&exps))]
// sprintf(temp,"%d",number_of_exps);
// uc1601(temp,1);
for(int i=0;i<number_of_exps;i++)
{
//UF_CALL(UF_MODL_ask_exp (heit,heit_k));
UF_CALL(UF_MODL_ask_exp_tag_string (*exps,[$string))]
UF_CALL(UF_MODL_dissect_exp_string(string,
[$lhs_str_exp,&rhs_str_exp,&temp_tag_exp))]
if(strcmp(rechi,lhs_str_exp)==0)
{
sprintf(string,"%s%s%s",rechi,"=",REC_HEIT);
// uc1601(string,1);
}
if(strcmp(recle,lhs_str_exp)==0)
{
sprintf(string,"%s%s%s",recle,"=",REC_LEN);
// uc1601(string,1);
}
if(strcmp(recwid,lhs_str_exp)==0)
{
sprintf(string,"%s%s%s",recwid,"=",REC_WID);
// uc1601(string,1);
}
UF_MODL_edit_exp (string);
UF_MODL_update ();
exps++;
}
num++;
作者:
answer1977
时间:
2005-7-6 11:20
好贴,顶
作者:
wanxin9999
时间:
2005-7-6 21:09
这位兄弟,真是辛苦阿,
我的帖子都不知道沉到哪里去了。
居然被你找到了
谢谢!
作者:
yuwan
时间:
2005-7-11 10:38
有帮助!
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3