uf_list_p_t face_list,edge_list; int count_list; int i;
/*定义创建型腔的参数*/
double pock_loc[3] = {25.0,30.0,40.0}; double pock_dir[3] = {0.0,0.0,-1.0}; double pock_x_dir[3]= {1.0,0.0,0.0}; char *pock_len[3]={\char *pock_corner={\char *pock_floor={\char *pock_angle={\tag_t pock_id;
/*定义创建边倒圆的参数*/ char *blend_radius=\
uf_list_p_t blend_list,blend_edge_list; tag_t blend_id;
/*定义创建孔的参数*/
double hole_origin[3] = {60.0,30.0,40.0}; double hole_cyl_dir[3] = {0.0,0.0,-1.0}; char *hole_dia = \char *hole_height = \char *hole_angle = \tag_t hole_id;
/*创建块*/
UF_MODL_create_block1(sign, block_orig, block_len, &blk_fea); UF_MODL_ask_feat_body(blk_fea,&blk_obj);
/*获得块上面的标识,用于确定成型特征的孔和型腔安置面,以及孔的穿透面*/ UF_MODL_ask_body_faces(blk_obj,&face_list); UF_MODL_ask_list_count(face_list,&count_list); for (i=0;i UF_MODL_delete_list(&face_list); /*获得块上边的标识,用于相对定位*/ UF_MODL_ask_body_edges(blk_obj,&edge_list); UF_MODL_ask_list_count(edge_list,&count_list); for (i=0;i UF_MODL_ask_list_item(face_list,i,&tem_tag); face_blk[i]=tem_tag; } } } UF_MODL_ask_list_item(edge_list,i,&tem_tag); edge_blk[i]=tem_tag; UF_MODL_delete_list(&edge_list); /*创建型腔,并进行相对定位*/ UF_MODL_register_rpo_routine(rpo_routine_pocket); UF_MODL_create_rect_pocket(pock_loc,pock_dir,pock_x_dir,pock_len, /*进行边倒圆*/ UF_MODL_create_list(&blend_list); UF_MODL_put_list_item(blend_list,edge_blk[6]); UF_MODL_create_blend(blend_radius,blend_list,0,0,0,0.5,&blend_id); /*获取倒圆的边,用于孔的相对定位*/ UF_MODL_ask_feat_edges(blend_id,&blend_edge_list); UF_MODL_ask_list_count(blend_edge_list,&count_list); for (i=0;i UF_MODL_delete_list(&blend_edge_list); /*创建孔,并进行相对定位*/ UF_MODL_register_rpo_routine(rpo_routine_hole); UF_terminate(); UF_MODL_create_simple_hole(hole_origin,hole_cyl_dir,hole_dia, hole_height,hole_angle,face_blk[0],face_blk[1],&hole_id); UF_MODL_unregister_rpo_routine(); UF_MODL_ask_list_item(blend_edge_list,i,&tem_tag); edge_blend[i]=tem_tag; pock_corner,pock_floor,pock_angle,face_blk[0],&pock_id ); UF_MODL_unregister_rpo_routine(); 在编译连接后,新建或打开一个部件文件。通过File→Execute→User Function调用生成的动态链接库文件。其结果如图6-6所示。 图6-6 成型特征相对定位 所有成型特征需要一个安放表面,大多数成型特征(除通用凸垫、通用型腔和沟槽)的安放表面是平面的,安放表面通常是选择已有实体的表面,因此如果没有平表面可用作安放表面,可以先建立基准平面,然后利用这些基准平面作为安放平面。成型特征是法向于安放表面建立的,且与安放表面相关联。 表6.10查询成型特征函数 函数名称 UF_MODL_ask_boss_parms UF_MODL_ask_rect_pad_parms 函数功能及要点 通过凸台特征标识获得凸台的直径、高和拔模角 通过矩形凸垫特征标识获得矩形凸垫的长宽高、拐角半径和拔模角 UF_MODL_ask_general_pad1 通过通用凸垫特征标识获得建立通用凸垫时的相关参数,查询结束后,应使用函数UF_MODL_free_general_pad释放内存 UF_MODL_ask_simple_hole_parms UF_MODL_ask_c_bore_hole_parms UF_MODL_ask_c_sunk_hole_parms UF_MODL_ask_cyl_pocket_parms 通过简单孔特征标识获得简单孔的直径、深度和尖端角 通过沉头孔特征标识获得建立沉头孔时的所有参数 通过埋头孔特征标识获得建立埋头孔时的所有参数 通过柱型腔特征标识获得柱型腔的直径、深度、底面半径和拔锥角 UF_MODL_ask_rect_pocket_parms 通过矩形型腔特征标识获得矩形型腔的长宽深、拐角半径、底面半径和拔锥角 UF_MODL_ask_general_pocket1 通过通用型腔特征标识获得建立通用型腔时的相关参数,查询结束后,应使用函数UF_MODL_free_general_ pocket释放内存 UF_MODL_ask_rect_slot_parms 通过矩形键槽特征标识获得矩形键槽的长宽深和是否有穿透面的标识 UF_MODL_ask_ball_slot_parms 通过球形键槽特征标识获得球形键槽的球端直径、深度、长度和是否有穿透面的标识 UF_MODL_ask_u_slot_parms 通过U形键槽特征标识获得建立U形键槽时的所有参数及是否有穿透面的标识 UF_MODL_ask_t_slot_parms 通过T形键槽特征标识获得建立T形键槽时的所有参数及是否有穿透面的标识 UF_MODL_ask_dovetail_slot_parms 通过燕尾键槽特征标识获得建立燕尾键槽时的所有参数及是否有穿透面的标识 UF_MODL_ask_rect_groove_parms UF_MODL_ask_ball_groove_parms UF_MODL_ask_u_groove_parms 表6.11编辑成型特征函数 函数名称 UF_MODL_edit_hole_type UF_MODL_edit_slot_type 函数功能及要点 改变孔特征类型,包括简单孔、沉头孔和埋头孔 改变键槽特征的类型,包括矩形键槽、球形键槽、U形键槽、T形键槽和燕尾键槽 UF_MODL_add_thru_faces 给孔和键槽特征增加穿透面,其中孔最多只有一个穿透面,键槽可以有两个穿透面 UF_MODL_reattach_dir_ref UF_MODL_reverse_dir_ref 重新定义特征的水平或垂直方向参考 重新定义特征的水平或垂直方向参考,同时取指定方向的反方向 UF_MODL_reattach_target_face UF_MODL_reattach_tool_face UF_MODL_reattach_thru_faces UF_MODL_remove_thru_faces UF_MODL_edit_general_pad UF_MODL_edit_general_pocket UF_MODL_free_general_pad UF_MODL_free_general_pocket UF_MODL_register_rpo_routine 重新定义特征的目标安置面 重新定义工具安置面 重新定义成型特征的穿透面和扫描特征的修剪面 删除孔和键槽特征的所有穿透面 编辑创建通用凸垫时的所有参数 编辑创建通用型腔时的所有参数 查询通用凸垫的参数后,应用该函数释放内存 查询通用型腔的参数后,应用该函数释放内存 注册用户函数用于产生成型特征的相对定位 通过矩形沟槽特征标识获得矩形沟槽的直径和宽度 通过球形沟槽特征标识获得球形沟槽的直径和球端直径 通过U形沟槽特征标识获得建立U形沟槽时的相关参数