1 // NX 8.5.3.3
2 // Journal created by Administrator on Mon Apr 20 11:21:24 2020 中国标准时间
3 //
4 #include "C:\\all_uf.h"
5 #include <uf_defs.h>
6 #include <NXOpen/NXException.hxx>
7 #include <NXOpen/Session.hxx>
8 #include <NXOpen/BasePart.hxx>
9 #include <NXOpen/Builder.hxx>
10 #include <NXOpen/Expression.hxx>
11 #include <NXOpen/ExpressionCollection.hxx>
12 #include <NXOpen/Face.hxx>
13 #include <NXOpen/FaceDumbRule.hxx>
14 #include <NXOpen/Features_Brep.hxx>
15 #include <NXOpen/Features_DeleteFaceBuilder.hxx>
16 #include <NXOpen/Features_FeatureCollection.hxx>
17 #include <NXOpen/NXObject.hxx>
18 #include <NXOpen/Part.hxx>
19 #include <NXOpen/PartCollection.hxx>
20 #include <NXOpen/Plane.hxx>
21 #include <NXOpen/PlaneCollection.hxx>
22 #include <NXOpen/Preferences_PartModeling.hxx>
23 #include <NXOpen/Preferences_PartPreferences.hxx>
24 #include <NXOpen/Preferences_PartPreferences.hxx>
25 #include <NXOpen/Preferences_PartVisualizationLine.hxx>
26 #include <NXOpen/ScCollector.hxx>
27 #include <NXOpen/ScRuleFactory.hxx>
28 #include <NXOpen/SelectISurface.hxx>
29 #include <NXOpen/SelectObject.hxx>
30 #include <NXOpen/SelectionIntentRule.hxx>
31 #include <NXOpen/Session.hxx>
32 #include <NXOpen/TaggedObject.hxx>
33 #include <NXOpen/Unit.hxx>
34 #include <NXOpen/Face.hxx>
35 #include <NXOpen/FaceTangentRule.hxx>
36 #include <NXOpen/NXObjectManager.hxx>
37 #include <uf_defs.h>
38 #include <uf_ui_types.h>
39 #include <iostream>
40 #include <NXOpen/Session.hxx>
41 #include <NXOpen/UI.hxx>
42 #include <NXOpen/NXMessageBox.hxx>
43 #include <NXOpen/Callback.hxx>
44 #include <NXOpen/NXException.hxx>
45 #include <NXOpen/BlockStyler_UIBlock.hxx>
46 #include <NXOpen/BlockStyler_BlockDialog.hxx>
47 #include <NXOpen/BlockStyler_PropertyList.hxx>
48 #include <NXOpen/BlockStyler_Group.hxx>
49 #include <NXOpen/BlockStyler_FaceCollector.hxx>
50 #include <uf.h>
51 #include <uf_obj.h>
52 #include <NXOpen/NXObjectManager.hxx>
53 #include <NXOpen/PartCollection.hxx>
54 #include <NXOpen/Face.hxx>
55 #include <NXOpen/FaceTangentRule.hxx>
56 #include <NXOpen/ScCollectorCollection.hxx>
57 #include <NXOpen/ScRuleFactory.hxx>
58 using namespace NXOpen;
59
60 extern "C" DllExport int ufusr_ask_unload()
61 {
62 return (int)Session::LibraryUnloadOptionImmediately;
63 }
64
65 static int select_filter_proc_fn(tag_t object, int type[1], void* user_data, UF_UI_selection_p_t select)
66 {
67 uf_list_p_t edge_list;
68 int edge_count = 0, Type = 0;
69 double Point[3];
70 double Dir[3];
71 double Box[6];
72 double Radius[3];
73 double RadData[3];
74 int NormDir;
75 UF_MODL_ask_face_data(object, &Type, Point, Dir, Box, Radius, RadData, &NormDir);
76 UF_MODL_ask_face_edges(object, &edge_list);
77 UF_MODL_ask_list_count(edge_list, &edge_count);
78 if (object == NULL)
79 {
80 return UF_UI_SEL_REJECT;
81 }
82 else if (object&&edge_count == 2&&Type==UF_cone_subtype)
83
84 {
85 return UF_UI_SEL_ACCEPT;
86 }
87 }
88
89 static int init_proc(UF_UI_selection_p_t select, void* user_data)
90 {
91 int num_triples = 1;//可选类型的数量
92
93 UF_UI_mask_t mask_triples[] =
94 { UF_face_type, UF_cone_subtype, UF_UI_SEL_NOT_A_FEATURE };//可选对象类型
95 UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples);
96 if ((UF_UI_set_sel_procs(select, select_filter_proc_fn, NULL, user_data)) == 0)
97 {
98 return UF_UI_SEL_SUCCESS;
99 }
100 else
101 {
102 return UF_UI_SEL_FAILURE;
103 }
104 }
105
106 //以下是封装函数
107 static void DeleteFaces(std::vector<Face *> faces)
108 {
109 Session *theSession = Session::GetSession();
110 Part *workPart(theSession->Parts()->Work());
111 Features::Feature *nullFeatures_Feature(NULL);
112 Features::DeleteFaceBuilder *deleteFaceB;
113 deleteFaceB = workPart->Features()->CreateDeleteFaceBuilder(nullFeatures_Feature);
114 FaceDumbRule *faceDumbRule1;
115 faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces);
116 std::vector<SelectionIntentRule *> rules1(1);
117 rules1[0] = faceDumbRule1;
118 deleteFaceB->FaceCollector()->ReplaceRules(rules1, false);
119 NXObject *nXObject1;
120 nXObject1 = deleteFaceB->Commit();
121 deleteFaceB->Destroy();
122 }
123
124 extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
125 {
126 UF_initialize();
127 char sCue[] = "象选择对话框";
128 char sTitle[] = "象选择对话框";
129 int iScope = UF_UI_SEL_SCOPE_NO_CHANGE;
130 int iResponse;
131 tag_t *tObject;
132 int count = 0;
133 UF_UI_select_with_class_dialog(sCue, sTitle, iScope, init_proc, NULL, &iResponse, &count, &tObject);
134 if (count)
135 {
136 std::vector<Face *> deleteface;
137 for (int i = 0; i < count; i++)
138 {
139 NXOpen::Face *face1(dynamic_cast<NXOpen::Face *>(NXOpen::NXObjectManager::Get(tObject[i])));
140 deleteface.push_back(face1);
141 }
142 DeleteFaces(deleteface);
143 }
144 else
145 {
146 return;
147 }
148
149 }