ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NX二次开发-UFUN释放一个面评估器结构UF_EVALSF_free

2021-10-17 23:33:26  阅读:243  来源: 互联网

标签:surf srf uv EVALSF UFUN eval 二次开发 UF


 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日

标签:surf,srf,uv,EVALSF,UFUN,eval,二次开发,UF
来源: https://www.cnblogs.com/nxopen2018/p/15418784.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有