《(完整)6_UG二次开发实用教程第六章》由会员分享,可在线阅读,更多相关《(完整)6_UG二次开发实用教程第六章(73页珍藏版)》请在金锄头文库上搜索。
1、第六章 零件设计 UG的特征建模功能非常强大,UG中几乎所有的几何特征都可以利用UG/OPEN API 进行 创建。 UG/OPEN API提供诸如 UF_MODL_create_XXX_XXX的函数用于创建几何特征,提供诸 如 UF_MODL_ask_XXX_XXX的函数用于查询特征的属性。但是通常情况下, 修改几何特征往往 要通过几何特征的参数来实现。 6.1 基本概念 1、明确特征的几何描述 利用函数 UF_MODL_create_XXX_XXX创建几何特征,首先要明确几何特征的几何描述。 以最简单的圆锥为例,可以通过函数UF_MODL_create_cone1() 创建一个圆锥,但是如
2、果你 对圆锥特征的几何描述不清楚,你就不能明白函数UF_MODL_create_cone1() 中参数的含义。 如果你在使用函数UF_MODL_create_cone1() 创建圆锥特征之前,知道在三维空间中描 述一个圆锥,需要知道圆锥的原点、高度、底部和顶部的直径、方向。此时你使用函数 UF_MODL_create_cone1() 时, intUF_MODL_create_cone1( UF_FEATURE_SIGN sign doubleorigin 3 char * height char * diam 2 doubledirection 3 tag_t * cone_obj_id )
3、也就是说,在创建任何特征之前,要明确特征的几何描述。 2、分清函数参数的类型 在二次开发过程中, 必须分清 UF函数是针对特征 (Feature )操作、还是对象(Object ) 操作,还是实体( Body)操作。 特征是将用户对UG实体的所有操作过程都以特征的方式记录下来,一个实体往往可以 拥有多个特征, 如一个 block 经过倒角 (blend),钻孔(hole) 后,那么在这个实体上就存在了 三个特征,并且按照时间先后顺序排列。 对象是指 uf_object_types.h中说明的对象,包括:体() ,表面,边缘,直线 (line), 圆(circle)、二次曲线 (conic) 和
4、样条曲线 (spline)等几何对象,还有基准轴(datum axis) , 基准面 (datum plane) 、草图 (sketch) 、表达式、颜色、线型、组等非几何对象。 Body 是指 UG实体。利用 UF函数可以从 Body中得到所有在其上操作过的Feature 。 特征、对象和实体之间可以相互访问,可以从Feature 中得到相应的 Body UF_MODL_ask_feat_body UF_MODL_ask_feat_faces UF_MODL_ask_feat_edges UF_MODL_ask_body_feats UF_MODL_ask_edge_feats UF_MOD
5、L_ask_face_feats UF_MODL_ask_body_faces UF_MODL_ask_body_edges UF_MODL_ask_face_body UF_MODL_ask_face_edges UF_MODL_ask_edge_body UF_MODL_ask_edge_faces 用 UF_MODL_ask_feat_body可以获得与特征相连的体标识,相应的如果已知某个体标 识,也可以利用函数UF_MODL_ask_body_feats 获得与之相连的所有特征标识。 3、建模思路 UG基于特征的建模过程是仿真零件的加工过程。 采用 UG/OPEN API 建立零件模型
6、时,可先在NX交互界面下生成实体模型,再根据其操 作过程运用相应的API 函数。 UF_MODL_create_cyl1() UF_MODL_create_simple_hole() UF_MODL_create_edge_blend() 6.1 创建体素特征 基本体素是基本的解析外形,包括:长方体、圆柱体、圆锥体和球。UF 函数允许用户 创建和查询所有的基本体素特征,创建和查询基本体素的函数声明主要包含在头文件 uf_modl.h 中。 表 6-1 与体素特征相关的函数 特征名函数名 块 UF_MODL_create_block1 UF_MODL_create_block UF_MODL_a
7、sk_block_parms 圆柱 UF_MODL_create_cyl1 UF_MODL_create_cyl UF_MODL_ask_cylinder_parms 圆锥 UF_MODL_create_cone1 UF_MODL_create_cone UF_MODL_ask_cone_parms 球 UF_MODL_create_sphere1 UF_MODL_create_sphere UF_MODL_ask_sphere_parms 下 面 以 如 何 创 建 长 方 体 为 例 , 讲 解 创 建 体 素 特 征 , 我 们 可 以 利 用 UF_MODL_create_block1
8、()创建一个长方体,该函数包括三个输入参数和输出参数。 int UF_MODL_create_block1 ( UF_FEATURE_SIGN sign /输入参数,布尔操作标记 double corner_pt 3 /输入参数,长方体的原点 char * edge_len 3 /输入参数,长方体的长宽高 tag_t * blk_obj_id /输出参数,长方体的特征标识 ) 其中, sign表示布尔操作的标记,表示新建的长方体与已存目标体的布尔操作方式, 包括: UF_NULLSIGN = 不进行布尔操作 UF_POSITIVE =与已存目标体加操作 UF_NEGATIVE =与已存目标体减
9、操作 UF_UNSIGNED =与已存目标体相交操作 corner_pt表示长方体的原点,为底面斜角点,如下图所示,圆柱和圆锥的原点为底面 中点, 球的原点为球心位置。 edge_len 是一个字符串数组,表示长方体的长宽高,可以直接赋值,也可以使用表达 式赋值,比如: char *block_len3 = “1, 2, 3; char *block_len3 = “bl_length=1, bl_width=2, bl_Height=3; 如果直接赋值,将由系统自动生成“pn”格式的表达式,如果采用表达式赋值,此时在 表达式中将会出现相应的表达式,建议采用表达式方式赋值。 blk_obj_i
10、d是输出参数,通过tag_t指针输出新建长方体的特征标识,如果需要可以 通过函数 UF_MODL_ask_feat_body 获得对应特征的实体对象标识。 创建长方体特 征的函数除UF_MODL_create_block1()外,还有 UF_MODL_create_block()。事实上, UF_MODL_create_block()比 UF_MODL_create_block1() 多了一个参数tag_t类型的输入参数targ_tag ,该参数表示当进行布尔操作时,可以通过 该参数指定目标体,如果不进行布尔操作可将参数设置为NULL_TAG。 例 6-1 通过一个选择菜单,让用户选择创建不同
11、的基本体素特征。 例 6-1创建基本体素 #include #include #include #include #include #include externvoid ufusr( char * param, int * retcod, int param_len ) /* 对话框设置 */ char *cp1 = 请选择 ; int ip2 = 0; char cp3438 = 创建一个块 (Block), 创建一个圆柱 (Cylinder), 创建一个圆锥 (Cone), 创建一个球体 (Sphere) ; int ip4 = 4; int value; tag_t view_tag
12、= NULL_TAG; UF_FEATURE_SIGN sign = UF_NULLSIGN; /* Block的变量声明区 */ double blk_corner 3 = 0.0, 0.0, 0.0 ; char *blk_edge_len 3 = 10.0, 20.0, 30.0 ; tag_t blk_obj_id; /* Cylinder的变量声明区 */ double cyl_origin 3 = 0.0, 0.0, 0.0 ; char *cyl_height = 20.0; char *cyl_diam = 10.0; double cyl_direction 3 = 0.0,
13、 0.0, 1.0 ; tag_t cyl_obj_id; /* Cone 的变量声明区 */ double cone_origin 3 = 0.0, 0.0, 0.0 ; char *cone_height = 20.0; char *cone_diam 2 = 30.0, 20.0 ; double cone_direction 3 = 0.0, 0.0, 1.0 ; tag_t cone_obj_id; /* Sphere的变量声明区 */ double sphere_center 3 = 0.0, 0.0, 0.0 ; char *sphere_diam = 30.0; tag_t s
14、phere_obj_id; if ( !UF_initialize() ) /* 显示菜单 */ value = uc1603( cp1, ip2, cp3, ip4 ); switch ( value ) case 5: /* 创建 Block( 块) */ UF_MODL_create_block1( sign, blk_corner, blk_edge_len, break ; case 6: /* 创建 Cylinder(圆柱 ) */ UF_MODL_create_cyl1( sign, cyl_origin, cyl_height, cyl_diam, cyl_direction,
15、 break ; case 7: /* 创建 Cone(圆锥 ) */ UF_MODL_create_cone1( sign, cone_origin, cone_height, cone_diam, cone_direction, break ; case 8: /* 创建 Sphere( 球体 ) */ UF_MODL_create_sphere1( sign, sphere_center, sphere_diam, break ; default: uc1601( 发生了错误! , 0 ); /* 调整视图到合适的大小 */ UF_VIEW_ask_work_view( UF_VIEW_fit_view( view_tag, 0.7 ); /* 保存文件 */ UF_PART_save( ); UF_terminate( ); 在编译连接后,新建或打开一个部件文件。通过File ExecuteUser Function调用 生成的动态链接库( *.dll)文件。此时