1 static int select_filter_proc_fn(tag_t object, int type[1], void* user_data, UF_UI_selection_p_t select) 2 { 3 4 if (object == NULL) 5 return UF_UI_SEL_REJECT; 6 else if (object) //&& Type== UF_line_type&&subtype== UF_line_normal_subtype) //&&edge_count == 2 && Type == UF_cone_subtype 7 return UF_UI_SEL_ACCEPT; 8 9 } 10 11 12 static int init_face(UF_UI_selection_p_t select, void *user_data) 13 { 14 int errorCode = 0; 15 int num_triples = 1; 16 UF_UI_mask_t mask_triples[] = { UF_solid_type,UF_solid_face_subtype, UF_UI_SEL_FEATURE_PLANAR_FACE }; 17 errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples); 18 if (errorCode == 0) 19 { 20 return UF_UI_SEL_SUCCESS; 21 } 22 else 23 { 24 return UF_UI_SEL_FAILURE; 25 } 26 }
1 UF_initialize(); 2 tag_t workCsys = NULL_TAG; 3 tag_t mtxWcs = NULL_TAG; 4 double orginWcs[3]; 5 UF_CSYS_ask_wcs(&workCsys); 6 UF_CSYS_ask_csys_info(workCsys, &mtxWcs, orginWcs); 7 8 char sCue[] = "选择"; 9 char sTitle[] = "功能测试"; 10 int iScope = UF_UI_SEL_SCOPE_NO_CHANGE; 11 int iResponse; 12 tag_t tObject; 13 tag_t bodyTag = NULL_TAG; 14 tag_t wcsTag = NULL_TAG; 15 tag_t viewTag = NULL_TAG; 16 17 double cursor[3]; 18 double min_corner[3]; 19 double directions[3][3]; 20 double distances[3]; 21 UF_UI_select_with_single_dialog(sCue, sTitle, iScope, init_face, NULL, &iResponse, &tObject,cursor,&viewTag); 22 UF_MODL_ask_face_body(tObject, &bodyTag); 23 24 double param[2] = { 0.5,0.5 }; //输入U,V方向值 25 double poin[3]; //输出点坐标 26 double u1[3]; //输出 输出一阶导数在U位置 27 double v1[3]; //输出 输出一阶导数在V位置 28 double u2[3]; //输出 输出二阶导数在U位置 29 double v2[3]; //输出 输出二阶导数在V位置 30 double unit_norm[3]; //输出面上该点的矢量方向--------输出矢量方向★ 31 double radii[2]; //输出,双半径,输出主曲率半径 32 UF_MODL_ask_face_props(tObject, param, poin, u1, v1, u2, v2, unit_norm, radii); 33 double mtxa[9]; 34 double ax[3], ay[3], az[3]; 35 tag_t mtxID = NULL_TAG; 36 tag_t csysID = NULL_TAG; 37 UF_MTX3_initialize(u1, v1, mtxa); 38 UF_CSYS_create_matrix(mtxa, &mtxID); 39 UF_CSYS_create_temp_csys(poin, mtxID, &csysID); 40 UF_CSYS_set_wcs(csysID); 41 UF_CSYS_ask_wcs(&wcsTag); 42 UF_MODL_ask_bounding_box_exact(bodyTag, wcsTag, min_corner, directions, distances); 43 44 tag_t matrixTag = NULL_TAG; 45 tag_t blcokTag = NULL_TAG; 46 tag_t bodyblockTag = NULL_TAG; 47 double matrix3x3[9] = { 48 directions[0][0], directions[0][1], directions[0][2], 49 directions[1][0], directions[1][1], directions[1][2], 50 directions[2][0], directions[2][1], directions[2][2] 51 }; 52 UF_CSYS_create_matrix(matrix3x3, &matrixTag); 53 char L[256], W[256],H[256]; 54 sprintf(L, "%f", distances[0]); 55 sprintf(W, "%f", distances[1]); 56 sprintf(H, "%f", distances[2]); 57 char* blockLen[3] = { L,W,H }; 58 UF_MODL_create_block1(UF_NULLSIGN, min_corner, blockLen, &blcokTag); 59 UF_MODL_ask_feat_body(blcokTag, &bodyblockTag); 60 UF_OBJ_set_color(bodyblockTag, 36); 61 UF_OBJ_set_translucency(bodyblockTag, 60); 62 temp_obj.push_back(bodyblockTag); 63 64 tag_t tempWcs = NULL_TAG; 65 UF_CSYS_create_temp_csys(orginWcs, mtxWcs, &tempWcs); 66 UF_DISP_set_highlight(tObject, 0); 67 68 69 UF_terminate();