zoukankan      html  css  js  c++  java
  • NX二次开发-算法篇-找相切面

    方法1:通过判断相邻面公共边的光顺性来找相切面

     1 #include <uf.h>
     2 #include <uf_modl.h>
     3 #include <uf_obj.h>
     4 
     5 
     6     UF_initialize();
     7 
     8 
     9     //获取面的所有边
    10     uf_list_p_t edge_list;
    11     UF_MODL_ask_face_edges(42084, &edge_list);
    12 
    13     //获取链表的数量
    14     int count;
    15     UF_MODL_ask_list_count(edge_list, &count);
    16 
    17     for (int i = 0; i < count; i++)
    18     {
    19         //获取链表里的tag
    20         tag_t EdgeTag = NULL_TAG;
    21         UF_MODL_ask_list_item(edge_list, i, &EdgeTag);
    22 
    23         //获取边的光顺性
    24         logical is_smooth;
    25         UF_MODL_ask_edge_smoothness(EdgeTag, 0, &is_smooth);
    26 
    27         if (is_smooth == true)
    28         {
    29             //边找面
    30             uf_list_p_t face_list;
    31             UF_MODL_ask_edge_faces(EdgeTag, &face_list);
    32 
    33             //获得链表数量
    34             int face_count;
    35             UF_MODL_ask_list_count(face_list, &face_count);
    36             for (int j = 0; j < face_count; j++)
    37             {
    38                 //获取链表里的tag
    39                 tag_t FaceTag = NULL_TAG;
    40                 UF_MODL_ask_list_item(face_list, j, &FaceTag);
    41 
    42                 //设置颜色
    43                 UF_OBJ_set_color(FaceTag, 186);    
    44             }
    45         }
    46 
    47     }
    48 
    49 
    50     UF_terminate();

    方法2:使用NXOPEN相切面方法

     1 #include <uf_defs.h>
     2 #include <uf_ui_types.h>
     3 #include <iostream>
     4 #include <NXOpen/Session.hxx>
     5 #include <NXOpen/UI.hxx>
     6 #include <NXOpen/NXMessageBox.hxx>
     7 #include <NXOpen/Callback.hxx>
     8 #include <NXOpen/NXException.hxx>
     9 #include <NXOpen/BlockStyler_UIBlock.hxx>
    10 #include <NXOpen/BlockStyler_BlockDialog.hxx>
    11 #include <NXOpen/BlockStyler_PropertyList.hxx>
    12 #include <NXOpen/BlockStyler_Group.hxx>
    13 #include <NXOpen/BlockStyler_FaceCollector.hxx>
    14 #include <uf.h>
    15 #include <uf_obj.h>
    16 #include <NXOpen/NXObjectManager.hxx>
    17 #include <NXOpen/PartCollection.hxx>
    18 #include <NXOpen/Face.hxx>
    19 #include <NXOpen/FaceTangentRule.hxx>
    20 #include <NXOpen/ScCollectorCollection.hxx>
    21 #include <NXOpen/ScRuleFactory.hxx>
    22 
    23 
    24         UF_initialize();
    25 
    26         //NXOPEN初始化
    27         NXOpen::Session *theSession = NXOpen::Session::GetSession();
    28         NXOpen::Part *workPart(theSession->Parts()->Work());
    29         NXOpen::Part *displayPart(theSession->Parts()->Display());
    30 
    31         //选择面控件
    32         PropertyList* FaceSelectProps = face_select0->GetProperties();
    33         std::vector<NXOpen::TaggedObject*> faces = FaceSelectProps->GetTaggedObjectVector("SelectedObjects");
    34         delete FaceSelectProps;
    35         FaceSelectProps = NULL;
    36 
    37         tag_t FaceTag = faces[0]->Tag();
    38 
    39         //对选中的面设置颜色
    40         UF_OBJ_set_color(FaceTag, 186);
    41 
    42         //给入一个面
    43         NXOpen::Face *face1(dynamic_cast<NXOpen::Face *>(NXOpen::NXObjectManager::Get(FaceTag)));
    44 
    45         //使用NXOPEN相切面规则
    46         std::vector<NXOpen::Face *> boundaryFaces1(0);
    47         NXOpen::FaceTangentRule *faceTangentRule1;
    48         faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1, 0.050000000000000003);
    49         std::vector<NXOpen::SelectionIntentRule *> rules1(1);
    50         rules1[0] = faceTangentRule1;
    51 
    52         NXOpen::ScCollector* scCollector1 = workPart->ScCollectors()->CreateCollector();
    53         scCollector1->ReplaceRules(rules1, false);
    54 
    55         std::vector<NXOpen::TaggedObject*> BB = scCollector1->GetObjects();
    56         for (int i = 0; i < BB.size(); i++)
    57         {
    58             UF_OBJ_set_color(BB[i]->Tag(), 1);
    59         }
    60 
    61         UF_terminate();

  • 相关阅读:
    Node.js Event Loop 的理解 Timers,process.nextTick()
    Ajax关于readyState(状态值)和status(状态码)的研究
    原生 JavaScript 实现 AJAX、JSONP
    Python selenium.webdriver.chrome.options.Options() Examples
    【python】统一转换日期格式dateutil.parser.parse
    python读取doc
    大规模爬虫流程总结
    如何巧妙的利用selenium和requests组合来进行操作需要登录的页面
    使用pandas进行数据清洗
    twilio打电话和发短信
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/11070054.html
Copyright © 2011-2022 走看看