NX二次開發-算法篇-隨便找個不規則的體,找出面的中心點的Z坐標最高和最低的面,高亮顯示


 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     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM