1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_ui.h> 6 #include <uf_curve.h> 7 #include <uf_obj.h> 8 #include <uf_part.h> 9 #include <vector> 10 11 using namespace std; 12 13 14 15 UF_initialize(); 16 17 //遍历前有一点需要注意,首先我们的默认基准坐标系上就有一个点,也就是原点0,0,0。 18 //还有一个要注意的地方是我们在创建点的时候,如果用创建点命令创建一个空间的点,这个是算一个点。 19 //如果是用草图去创建点的话,这个是两个点,因为默认草图坐标系原点处就有一个点了。 20 21 vector<double> MyPointZ; 22 //遍历当前显示部件的所有点 23 tag_t ObjectTag = NULL_TAG; 24 UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &ObjectTag); 25 while (ObjectTag != NULL_TAG) 26 { 27 28 UF_OBJ_set_color(ObjectTag, 186);//设置所有点为红色 29 30 //获取点的XYZ坐标 31 double PointCoords[3]; 32 UF_CURVE_ask_point_data(ObjectTag, PointCoords); 33 34 MyPointZ.push_back(PointCoords[2]);//添加坐标点Z值到vector 35 36 UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &ObjectTag); 37 } 38 39 //冒泡排序对所有点按Z轴从小到大排序 40 //通过两个for循环实现冒泡排序的全过程,外层for循环决定冒泡排序的趟数, 41 //内层for循环决定每趟所进行两两比较的次数。 42 int i, j; 43 double t; 44 for (i = 0; i < MyPointZ.size()-1; i++) 45 { 46 for (j = 0; j < MyPointZ.size()-1-i; j++) 47 { 48 if (MyPointZ[j]>MyPointZ[j+1]) 49 { 50 t=MyPointZ[j]; 51 MyPointZ[j]=MyPointZ[j+1]; 52 MyPointZ[j+1]=t; 53 } 54 } 55 } 56 57 //打印 58 for (i = 0; i < MyPointZ.size(); i++) 59 { 60 char msg[256]; 61 sprintf_s(msg, "%f ", MyPointZ[i]); 62 UF_UI_open_listing_window(); 63 UF_UI_write_listing_window(msg); 64 } 65 66 UF_terminate();