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();

猜你喜欢

转载自www.cnblogs.com/nxopen2018/p/11070054.html