1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_evalsf.h> 5 #include <NXOpen/Body.hxx> 6 #include <NXOpen/Face.hxx> 7 #include <uf_disp.h> 8 9 10 public: 11 12 void SelectBody(); 13 14 void SelectUVFace::SelectBody() 15 { 16 UF_initialize();//初始化 17 18 //获取体收集器控件 19 PropertyList* BodySelectProps = bodySelect0->GetProperties(); 20 std::vector<NXOpen::TaggedObject *> Bodys = BodySelectProps->GetTaggedObjectVector("SelectedObjects"); 21 delete BodySelectProps; 22 BodySelectProps = NULL; 23 24 NXOpen::Body *mybody = dynamic_cast<NXOpen::Body *>(Bodys[0]);//获取选择的体 25 26 std::vector<Face*> face = mybody->GetFaces();//通过体获得所有面 27 28 double z = -10000; 29 double z1 = 10000; 30 tag_t highest = NULL;//最高面TAG 31 tag_t lowest = NULL;//最低面TAG 32 for (int i = 0; i < face.size(); i++)//循环找到所有的面 33 { 34 //face[i]->Highlight();//高亮所有面 35 UF_EVALSF_p_t evaluator = NULL; 36 double uv_min_max[4] = {0.0, 1.0, 0.0, 1.0}; 37 UF_EVALSF_initialize_2(face[i]->Tag(), &evaluator);//初始化一个面评估器结构 38 UF_EVALSF_ask_face_uv_minmax(evaluator, uv_min_max);//计算u,v参数空间一个面的最小值、最大值 39 40 double uv_pair[2] = {0.5 * (uv_min_max[0] + uv_min_max[1]), 0.5 * (uv_min_max[2] + uv_min_max[3])}; 41 UF_MODL_SRF_VALUE_t surf_eval; 42 UF_EVALSF_evaluate(evaluator, UF_MODL_EVAL_ALL, uv_pair, &surf_eval); 43 44 Point3d origin(surf_eval.srf_pos[0], surf_eval.srf_pos[1], surf_eval.srf_pos[2]);//得到UV0.5的XYZ点坐标 45 Vector3d vector1(surf_eval.srf_unormal[0], surf_eval.srf_unormal[1], surf_eval.srf_unormal[2]);//得到UV面的向量 46 UF_EVALSF_free(&evaluator); 47 48 if (z>surf_eval.srf_pos[2])//判断当Z值大于UV点Z值的时候 49 { 50 z = z; 51 } 52 else//当Z值小于UV点Z值的时候 53 { 54 z = surf_eval.srf_pos[2];//Z就等于UV点Z最大值 55 highest = face[i]->Tag();//找到这个面 56 } 57 58 if (z1<surf_eval.srf_pos[2])//判断当Z1值小于UV点Z值的时候 59 { 60 z1 = z1; 61 } 62 else//当Z1值大于UV点Z值的时候 63 { 64 z1 = surf_eval.srf_pos[2];//Z1就等于UV点Z最小值 65 lowest = face[i]->Tag();//找到这个面 66 } 67 68 } 69 //设置面高亮显示 70 UF_DISP_set_highlight(highest, 1); 71 UF_DISP_set_highlight(lowest, 1); 72 73 UF_terminate();//终止 74 }
阿飞
2021年10月17日