NX Open允许用户创建和查询所有基本体素特征,通过API函数建立基本体素特征返回的是相应的特征标识,如果需要可以通过函数UG_MODL_ask_feat_body()获得特征对应的实体对象标识。基本体素特征的参数是通过字符串输入的。我们可以直接输入数值,或者输入表达式,例如下面的例子中,球的直径我们可以设置输入参数 cDiam[] = "8" 或者 cDiam[] = "D=8" 。与体素特征相关的函数如下:
//块 UF_MODL_create_block1() UF_MODL_ask_block_parms() //圆柱 UF_MODL_create_cyl1() UF_MODL_ask_cylinder_parms() //圆锥 UF_MODL_create_cone1() UF_MODL_ask_cone_parms() //球 UF_MODL_create_sphere1() UF_MODL_ask_sphere_parms()
函数例子:
1 #include "Text.h" 2 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 3 { 4 UF_initialize(); 5 //创建块 6 UF_FEATURE_SIGN sign = UF_NULLSIGN; 7 double block_orig[3] = { 0.0,0.0,0.0 };//起点相对于ABS 8 char *block_len[3] = { "1", "2", "3" };//方向相对于WCS 9 tag_t blk_obj;//体特征 10 UF_MODL_create_block1(sign, block_orig, block_len, &blk_obj); 11 12 int iEdit = 0; //这是一个未使用的标志。它用于确定是返回表达式的右边还是两边。目前,表达式的两边都返回。 13 char *size[3]; 14 UF_MODL_ask_block_parms(blk_obj, iEdit, size); 15 list("%s,%s,%s ", size[0], size[1], size[2]);//输出: p9=1,p10=2,p11=3 16 17 //创建圆柱 18 UF_FEATURE_SIGN sign1 = UF_NULLSIGN; 19 double origin[3] = { 0.0,0.0,10.0 }; 20 char height[] = "20"; 21 char diam[] = "10"; 22 double direction[3] = {0,0,1};//方向 23 tag_t cyl_obj_id; 24 UF_MODL_create_cyl1(sign1, origin, height, diam, direction, &cyl_obj_id); 25 26 int iEdit2 = 0; //这是一个未使用的标志。它用于确定是返回表达式的右边还是两边。目前,表达式的两边都返回。 27 char *cDiameter; 28 char *cHeight; 29 UF_MODL_ask_cylinder_parms(cyl_obj_id, iEdit2, &cDiameter, &cHeight); 30 list("%s,%s ", cDiameter, cHeight);//输出:p8=10,p9=20 31 UF_free(cDiameter); 32 UF_free(cHeight); 33 34 //创建圆锥 35 UF_FEATURE_SIGN sign2 = UF_NULLSIGN; 36 double origin2[3] = { 0.0,0.0,10.0 }; 37 char height2[] = "20"; 38 char *diam2[2] = { "10" ,"5" }; 39 double direction2[3] = { 0,0,1 };//方向 40 tag_t cone_obj_id; 41 UF_MODL_create_cone1(sign2, origin2, height2, diam2, direction2, &cone_obj_id); 42 43 int iEdit3 = 0; //这是一个未使用的标志。它用于确定是返回表达式的右边还是两边。目前,表达式的两边都返回。 44 char *cD1; 45 char *cD2; 46 char *cH; 47 char *cAngle; 48 UF_MODL_ask_cone_parms(cone_obj_id, iEdit3, &cD1, &cD2, &cH, &cAngle); 49 list("%s,%s,%s,%s ", cD1, cD2, cH, cAngle);//输出:p8=10,p9=5,p10=20,p11=7.1250163489018 50 UF_free(cD1); 51 UF_free(cD2); 52 UF_free(cH); 53 UF_free(cAngle); 54 55 //创建球 56 UF_FEATURE_SIGN sign3 = UF_NULLSIGN; 57 double douCenter2[3] = { 0.0,0.0,30.0 }; 58 char cDiam[] = "8"; 59 tag_t sphere_obj_id; 60 UF_MODL_create_sphere1(sign3, douCenter2, cDiam,&sphere_obj_id); 61 62 int iEdit4 = 0; //这是一个未使用的标志。它用于确定是返回表达式的右边还是两边。目前,表达式的两边都返回。 63 char *cDiam_parm; 64 UF_MODL_ask_sphere_parms(sphere_obj_id, iEdit4, &cDiam_parm); 65 list("%s ", cDiam_parm);//输出:p9=8 66 UF_free(cDiam_parm); 67 68 UF_terminate(); 69 } 70 71 extern int ufusr_ask_unload(void) 72 { 73 return (UF_UNLOAD_IMMEDIATELY); 74 }