iCAx开思工具箱
标题:
UG中如何获得一个长方体的长宽高?
[打印本页]
作者:
baihai
时间:
2003-8-19 00:11
标题:
UG中如何获得一个长方体的长宽高?
在UG中,手工画了一个长方体,或者打开了一个只有长方体的文件,如何获得这个长方体的长宽高?谢谢。
作者:
zzz
时间:
2003-8-19 08:39
读表达式
作者:
baihai
时间:
2003-8-21 01:13
谢谢zzz兄。
我找到了读表达式的例子。可以把长方体的表达式在listing_window里写成如下形式:
p0=125
p1=34
p3=2
我的问题是:如何从表达式获取数值(即125,34,2)?谢谢。
int ifail=0;
char *string;
tag_t *exps;
int number_of_exps=0,i;
char buf[UF_UI_MAX_STRING_LEN+1];
char err_msg[MAX_LINE_SIZE+1];
tag_t part;
UF_UI_open_listing_window();
if((part=UF_PART_ask_display_part()) == NULL_TAG)
{
UF_UI_write_listing_window("当前没有板类零件\n");
return;
}
ifail=UF_MODL_ask_exps_of_part(part,[$number_of_exps,&exps)]
if(ifail)
{
UF_get_fail_message(ifail,err_msg);
sprintf(buf,"Error: %s\n", err_msg);
UF_UI_write_listing_window(buf);
}
sprintf(buf,"number_of_exps=%d\n",number_of_exps);
UF_UI_write_listing_window(buf);
UF_UI_write_listing_window("Asking expression strings\n");
for(i=0;i<number_of_exps;i++)
{
ifail=UF_MODL_ask_exp_tag_string(exps
,[$string)]
if(ifail)
{
UF_get_fail_message(ifail, err_msg);
sprintf(buf, "Error: %s\n", err_msg);
UF_UI_write_listing_window(buf);
}
sprintf(buf,"Expression %d: %s\n",i,string);
UF_UI_write_listing_window(buf);
UF_UI_write_listing_window(string);
UF_free(string);
}
UF_free(exps);
作者:
liberty000
时间:
2003-8-21 08:23
不大明白你的意思,这个函数如何? UF_MODL_eval_exp (char *exp_name,
double * exp_value )就是得到具体数值的。建议你不要用UG默认的p0等作名称,而是在创建之初重命名它们,这样你就知道哪个是长、宽或高了。
作者:
baihai
时间:
2003-8-22 04:28
谢谢liberty兄,我用字符串处理函数解决了这个问题:因为表达式的数值前都是3个字符("p0=","p1=","p2="),我把这三个字符替换为“0”,之后用字符串转数值函数求得长方体边长,最后通过排序得到长宽高。
可能有点复杂,但是可以得到正确结果。
liberty兄的方法可能会简单。由于时间的关系,我没有进行实验。
(1)表达式
p0=12
p1=340
p3=2.5
(2)两个主要函数
_strnset( string, '0', 3 );
bianliang
=atof(string);
(3)运行结果:
长宽高分别为:340.000000,12.000000,2.500000
int ifail=0;
char *string;
tag_t *exps;
int number_of_exps=0,i;
char buf[UF_UI_MAX_STRING_LEN+1];
char err_msg[MAX_LINE_SIZE+1];
tag_t part;
double bianliang[3],a,b,c;
// UF_UI_open_listing_window();
if((part=UF_PART_ask_display_part()) == NULL_TAG)
{
// UF_UI_write_listing_window("当前没有板类零件\n");
uc1601("当前没有板类零件",1);
return;
}
ifail=UF_MODL_ask_exps_of_part(part,[$number_of_exps,&exps)]
if(ifail)
{
UF_get_fail_message(ifail,err_msg);
sprintf(buf,"Error: %s\n", err_msg);
// UF_UI_write_listing_window(buf);
uc1601(buf,1);
}
// sprintf(buf,"number_of_exps=%d\n",number_of_exps);
// UF_UI_write_listing_window(buf);
// UF_UI_write_listing_window("Asking expression strings\n");
for(i=0;i<number_of_exps;i++)
{
ifail=UF_MODL_ask_exp_tag_string(exps
,[$string)]
if(ifail)
{
UF_get_fail_message(ifail, err_msg);
sprintf(buf, "Error: %s\n", err_msg);
// UF_UI_write_listing_window(buf);
uc1601(buf,1);
}
// sprintf(buf,"Expression %d: %s\n",i,string);
// UF_UI_write_listing_window(buf);
// UF_UI_write_listing_window(string);
_strnset( string, '0', 3 );
bianliang
=atof(string);
// sprintf(buf, "%f\n", bianliang
);
// UF_UI_write_listing_window(buf);
UF_free(string);
}
UF_free(exps);
if((bianliang[0]>=bianliang[1])&(bianliang[0]>=bianliang[2]))
{
a=bianliang[0];
if(bianliang[1]>=bianliang[2])
{
b=bianliang[1];
c=bianliang[2];
}
else
{
b=bianliang[2];
c=bianliang[1];
}
}
if((bianliang[1]>=bianliang[2])&(bianliang[1]>=bianliang[0]))
{
a=bianliang[1];
if(bianliang[0]>=bianliang[2])
{
b=bianliang[0];
c=bianliang[2];
}
else
{
b=bianliang[2];
c=bianliang[0];
}
}
if((bianliang[2]>=bianliang[1])&(bianliang[2]>=bianliang[0]))
{
a=bianliang[2];
if(bianliang[0]>=bianliang[1])
{
b=bianliang[0];
c=bianliang[1];
}
else
{
b=bianliang[1];
c=bianliang[0];
}
}
sprintf(buf, "板的外形尺寸: %f %f %f\n", a,b,c);
// UF_UI_write_listing_window(buf);
uc1601(buf,1);
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3