购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
函数结构:UF_GEXP_create_angle( tag_t from_object, UF_GEXP_qualifier_t qualifier1, tag_t object1_xform, tag_t to_object, UF_GEXP_qualifier_t qualifier2, tag_t object2_xform, tag_t * feature_tag, tag_t * exp_tag) 函数说明:
创建一个角度的几何表达功能。之间的角度from_object和to_object被计算并存储在一个表达式。在于from_object是一条线或固体边缘的情况下,qualifier1是用于确定要用于计算哪个端点。 一样是qualifier2和to_object如此。如果object1_xform不NULL_TAG,那么这是用来获取正确的零件发生标签为from_object。这同样适用于object2_xform和to_object真。该功能与表达在工作中创建的。该测量的角度是在度。注意输出表达式的值可能不被编辑为你将正常的表现。它可能只被用作参考,并且只有要素的几何表达功能后创建的。
函数参数:
第1个参数为输入:
from_object代表参数变量,tag_t 为输入参数类型,对象的标签来创建的角度。有效的对象类型有:UF_line_type,UF_datum_plane_type,UF_datum_axis_type,UF_solid_type。坚实的边缘应该是线性和实体面应该是平面的。发生标签是不允许的。使用原型标签来代替。
第2个参数为输入:
qualifier1代表参数变量,UF_GEXP_qualifier_t 为输入参数类型,预选赛object1,只适用于线条和边缘。
第3个参数为输入:
object1_xform代表参数变量,tag_t 为输入参数类型,对于第一个对象转化标签。标记为NULL TAG如果对象是在其中创建要素的相同部分。
第4个参数为输入:
to_object代表参数变量,tag_t 为输入参数类型,对象的标签来创建的角度。有效的对象类型有:UF_line_type,UF_datum_plane_type,UF_datum_axis_type,UF_solid_type。坚实的边缘应该是线性和实体面应该是平面的。发生标签是不允许的。使用原型标签来代替。
第5个参数为输入:
qualifier2代表参数变量,UF_GEXP_qualifier_t 为输入参数类型,预选赛Object2的,只适用于线条和边缘。
第6个参数为输入:
object2_xform代表参数变量,tag_t 为输入参数类型,对于第二个对象变换标签。标记为NULL TAG如果对象是在其中创建要素的相同部分。
第7个参数为输出:
feature_tag代表参数变量,tag_t * 为输出参数类型,创建功能的标签
第8个参数为输出:
exp_tag代表参数变量,tag_t * 为输出参数类型,创建表达式的标签
UF_GEXP_create_angle函数实例代码演示:
下面的代码创建一个实体面和固体之间的夹角边缘。
[quote]
#include <stdio.h>
#include <uf.h>
#include <uf_modl.h>
#include <uf_ui.h>
#include <uf_defs.h>
#include <uf_obj.h>
#include <uf_gexp.h>
#include <uf_object_types.h>
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
if (irc)
{
char messg[133];
printf("%s, line %d: %s\n", file, line, call);
(UF_get_fail_message(irc, messg)) ?
printf(" returned a %d\n", irc) :
printf(" returned error %d: %s\n", irc, messg);
}
return(irc);
}
static void do_ugopen_api(void)
{ double block_orig[3] = {0.0,0.0,0.0};
char buf[UF_UI_MAX_STRING_LEN+1];
char *block_len[3] = {"1","2","3"};
char *string;
tag_t part, feat_tag, blk_obj, exp_tag;
tag_t solid, solid_face, solid_edge;
int type, subtype;
int i=0;
int err;
UF_CALL(UF_MODL_create_block1(UF_NULLSIGN,block_orig,
block_len,&blk_obj));
UF_CALL(UF_UI_open_listing_window());
if((part=UF_PART_ask_display_part()) == NULL_TAG)
{
UF_UI_write_listing_window("Failed to get part tag\n");
return;
}
solid=NULL_TAG;
solid_edge=NULL_TAG;
solid_face=NULL_TAG;
while (i < 2)
{
type=UF_solid_type;
UF_OBJ_cycle_objs_in_part( part, type, &solid );
UF_OBJ_ask_type_and_subtype(solid, &type, &subtype);
if (!solid_edge && subtype == UF_solid_edge_subtype)
{
solid_edge=solid;
i++;
}
else
if (!solid_face && subtype == UF_solid_face_subtype)
{
solid_face=solid;
i++;
}
}
UF_CALL(UF_GEXP_create_angle(solid_face, UF_GEXP_NONE,
NULL_TAG, solid_edge, UF_GEXP_START_POINT, NULL_TAG, &feat_tag,
&exp_tag));
UF_CALL(UF_MODL_ask_exp_tag_string(exp_tag,&string));
sprintf (buf, "Created angle expression %s\n", string);
UF_UI_write_listing_window(buf);
UF_free(string);
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
if (!UF_CALL(UF_initialize()))
{
do_ugopen_api();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
[/quote]