这个算法是几年前我的开发老师教给我的,当时我没有细心研究,过后就忘了,从没使用过,今天又重新翻出来重新学一下。
在不会这个算法前,我用的都是排序算法,都整上冒泡排序了,顿时感觉自己挺傻逼的,写的那么麻烦。当时是不会边遍历边判断大小,只会先全部遍历出来,在写排序算法判断大小。
以前的算法博客文章
NX二次开发-算法篇-例子:已知有三个点,三个点按Z轴,由小到大排序https://www.cnblogs.com/nxopen2018/p/12969383.html
NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)https://www.cnblogs.com/nxopen2018/p/10957443.html
NX二次开发-算法篇-冒泡排序(例子:遍历所有点并排序)https://www.cnblogs.com/nxopen2018/p/10957439.html
例子:
遍历所有点,得到Z轴坐标最大和最小的点,将它高亮。
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_part.h> #include <uf_obj.h> #include <uf_disp.h> UF_initialize(); double z = -10000; double z1 = 10000; tag_t highest = NULL; tag_t lowest = NULL; //遍历当前prt里所有点 tag_t point_tag = NULL_TAG; UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &point_tag); while (point_tag != NULL_TAG) { //获得点的坐标 double point_coords[3]; UF_CURVE_ask_point_data(point_tag, point_coords); //判断当前Z轴点坐标小于变量z时 if (z > point_coords[2]) { z = z; } else { z = point_coords[2]; highest = point_tag; } if (z1 < point_coords[2]) { z1 = z1; } else { z1 = point_coords[2]; lowest = point_tag; } UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &point_tag); } //高亮点 UF_DISP_set_highlight(highest, 1); UF_DISP_set_highlight(lowest, 1); UF_terminate(); Caesar卢尚宇 2021年3月2日
思路:
看图不理解的,就自己设断点调试一遍就理解了。
Caesar卢尚宇
2021年3月2日