6_UG二次开发实用教程 第六章 下载本文

int target_qualifier [ ] //输入参数,限定目标边上具体对象 tag_t obj_id_tool [ ] //输入参数,相对定位工具边标识 int tool_qualifier [ ] //输入参数,限定工具边上具体对象 char * constraint_value [ ] //输入参数,约束值 char * constraint_array [ ] //输入参数,约束类型 int num_of_constrnts //输入参数,约束个数 )

feature_obj_id表示需要进行相对定位的特征标识,这个参数由用户自定义函数

rpo_routine_hole自动传输进来;

horz_dir_obj_id和vert_dir_obj_id用来定义成型特征的水平参考,这两个参数只需要给其中一个赋值,另一个可以赋NULL_TAG;

obj_id_target和obj_id_tool分别为相对定位的目标边和工具边的标识,对于obj_id_tool如果为NULL_TAG表示中心线;

target_qualifier和tool_qualifier分别用来进一步指定目标边和工具边上的具体对象,比如直线的端点,圆弧的中心等。其中target_qualifier可限定的类型为UF_MODL_ARC_CENTER、

UF_MODL_ARC_TANGENT、UF_MODL_ENDPOINT_1、UF_MODL_ENDPOINT_2,tool_qualifier除

以上类型外,还包括

:UF_MODL_HORZ_CENTERLINE_PNT_1UF_MODL_VERT_CENTERLINE_PNT_1

、、

UF_MODL_HORZ_CENTERLINE_PNT_2UF_MODL_VERT_CENTERLINE_PNT_2。

constraint_array用来指定约束的类型,约束类型只提供了:角度定位

(ANGL_EDGE_PARMS),水平定位(HORZ_DIST_PARMS),垂直定位(VERT_DIST_PARMS),

平行定位(PARA_DIST_PARMS),平行间距定位(PARA_EDGE_PARMS),正交定位

(PERP_DIST_PARMS)。而没有点到点定位(Point Onto Point)、线到线定位(Line Onto Line)、

点到线定位(Point Onto Line)。对于这三种定位方式,可利用已有的约束类型结合约束值来实现,具体点到点定位可选择平行定位,同时将约束值置零;线到线定位可选择平行间距定位,同时将约束值置零;点到线定位可选择正交定位,同时将约束值置零。

2、成型特征的创建

UF函数允许用户创建、查询和编辑所有的成型特征。利用UF函数建立成型特征时,输入的参数基本上与交互环境下输入参数是一致的。其函数的声明主要包含在头文件uf_modl.h中。

表6.9创建成型特征函数

函数名称 UF_MODL_create_boss UF_MODL_create_rect_pad UF_MODL_create_general_pad UF_MODL_create_simple_hole UF_MODL_create_c_bore_hole 创建凸台特征 创建矩形凸垫特征 创建通用凸垫特征 创建简单孔特征 创建沉头孔特征 函数功能及要点 UF_MODL_create_c_sunk_hole UF_MODL_create_cyl_pocket UF_MODL_create_rect_pocket UF_MODL_create_general_pocket UF_MODL_create_rect_slot UF_MODL_create_ball_slot UF_MODL_create_u_slot UF_MODL_create_t_slot UF_MODL_create_dove_tail_slot UF_MODL_create_rect_groove UF_MODL_create_ball_groove UF_MODL_create_u_groove

创建埋头孔特征 创建柱形腔特征 创建矩形腔特征 创建通用腔特征 创建矩形键槽特征 创建球形未端键槽特征 创建U形键槽特征 创建T形键槽特征 创建燕尾形健槽特征 创建矩形沟槽特征 创建球形未端沟槽特征 创建U形沟槽特征 下面以创建简单孔为例,创建简单孔函数参数如下:

int UF_MODL_create_simple_hole (

double location [ 3 ] //输入参数,孔的位置 double direction [ 3 ] //输入参数,孔的方向 const char * diame //输入参数,孔的直径 const char * depth //输入参数,孔的深度 const char * angle //输入参数,孔的 tag_t face_li //输入参数,孔的安置面 tag_t face_t1 //输入参数,孔的穿透面

tag_t * feature_obj_id //输出参数,新建的孔特征 )

face_li表示孔的安置面,根据需要安置面可为基准面,当基准面为相对基准面时,孔特征将相对基准面的父实体作为目标体(定位在其上的实体);当基准面为绝对基准面时,必须通过函数UF_MODL_active_part()来指定目标体。

其它参数与在交互环境下创建简单孔特征相同,diame、depth和angle都为字符串类型,可以

表达式形式赋值。

例6-4 在圆柱表面上打通孔,由于孔特征属于成型特征,需要有一个平的安置面,因此可以先创建一个基准面,以基准面作为孔特征的安置面。

例6-4创建

#include #include #include #include #include

/*定义全局变量,用于转递相对定位的目标边*/

tag_t edge_blk[12]; tag_t edge_blend[4];

/*注册型腔定位的用户函数*/

int rpo_routine_pocket(tag_t obj_id) {

int irc=0,i;

uf_list_p_t edge_list; int count_list;

tag_t tem_tag,*edge_pock;

edge_pock=(tag_t *)malloc(12*sizeof(tag_t));

tag_t *obj_id_target,*obj_id_tool;

obj_id_target=(tag_t *)malloc(3*sizeof(tag_t)); obj_id_tool=(tag_t *)malloc(3*sizeof(tag_t)); char *constraint_value[]={\

char *constraint_array[]={\int target_qualifier[]={UF_MODL_ENDPOINT_1,UF_MODL_ENDPOINT_1}; int tool_qualifier[]={UF_MODL_ENDPOINT_1,UF_MODL_ENDPOINT_1};

UF_MODL_ask_feat_edges(obj_id,&edge_list ); UF_MODL_ask_list_count(edge_list,&count_list); for (i=0;i

UF_MODL_delete_list(&edge_list);

obj_id_tool[0]=edge_pock[0]; obj_id_tool[1]=edge_pock[4];

obj_id_target[0]=edge_blk[1]; obj_id_target[1]=edge_blk[0];

free(edge_pock); free(obj_id_target); free(obj_id_tool);

if (irc == 0)

target_qualifier,obj_id_tool,tool_qualifier,constraint_value,constraint_array,2); UF_MODL_ask_list_item(edge_list,i,&tem_tag); edge_pock[i]=tem_tag;

irc=UF_MODL_create_rpo_constraints(obj_id,NULL_TAG,NULL_TAG,obj_id_target,

return (0); else

return (1);

}

/*注册孔定位的用户函数*/

int rpo_routine_hole(tag_t obj_id) {

int irc,i; int count_list; tag_t tem_tag; tag_t edge_tool[5]; uf_list_p_t edge_list;

tag_t obj_id_target[2],obj_id_tool[2]; char *constraint_value[]={\

char *constraint_array[]={\int target_qualifier[]={UF_MODL_ARC_CENTER}; int tool_qualifier[]={UF_MODL_ARC_CENTER};

UF_MODL_ask_feat_edges(obj_id,&edge_list ); UF_MODL_ask_list_count(edge_list,&count_list); for (i=0;i

UF_MODL_delete_list(&edge_list);

obj_id_target[0]=edge_blend[2]; obj_id_tool[0]=edge_tool[1];

UF_MODL_ask_list_item(edge_list,i,&tem_tag); edge_tool[i]=tem_tag;

irc=UF_MODL_create_rpo_constraints(obj_id,NULL_TAG,NULL_TAG,obj_id_target, target_qualifier,obj_id_tool,tool_qualifier,constraint_value,constraint_array,1); }

/*UG/OPEN API内部环境的入口函数*/

void ufusr(char *param, int *retcode, int paramLen) {

if (!UF_initialize()) {

/*定义创建块的参数*/

UF_FEATURE_SIGN sign = UF_NULLSIGN; double block_orig[3] = {0.0,0.0,0.0}; char *block_len[3] = {\tag_t blk_fea,blk_obj,tem_tag,face_blk[6];

return (0); return (1); if (irc == 0) else