• 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     }

  • 相关阅读:
    python之jupyter
    python处理图片
    python之图片指纹(唯一性的)
    python之操作elasticsearch7.6.0
    elasticsearch之索引
    elasticsearch
    Nginx 出现 403 Forbidden解决方案
    centos 防火墙命令
    centos nginx常用的命令
    搭建centos nginx环境
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/10957425.html
Copyright © 2020-2023  润新知