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(xiǎn),V方向值
25 double poin[3]; //輸出點(diǎn)坐標(biāo)
26 double u1[3]; //輸出 輸出一階導(dǎo)數(shù)在U位置
27 double v1[3]; //輸出 輸出一階導(dǎo)數(shù)在V位置
28 double u2[3]; //輸出 輸出二階導(dǎo)數(shù)在U位置
29 double v2[3]; //輸出 輸出二階導(dǎo)數(shù)在V位置
30 double unit_norm[3]; //輸出面上該點(diǎn)的矢量方向--------輸出矢量方向★
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();