NX二次开发-算法篇-冒泡排序(例子:遍历所有点并排序)

	NX9+VS2012


	#include <uf.h>
	#include <uf_ui.h>
	#include <uf_curve.h>
	#include <uf_obj.h>
	#include <uf_part.h>
	#include <vector>
	
	using namespace std;



	UF_initialize();

	//遍历前有一点需要注意,首先我们的默认基准坐标系上就有一个点,也就是原点0,0,0。
	//还有一个要注意的地方是我们在创建点的时候,如果用创建点命令创建一个空间的点,这个是算一个点。
	//如果是用草图去创建点的话,这个是两个点,因为默认草图坐标系原点处就有一个点了。

	vector<double> MyPointZ;
	//遍历当前显示部件的所有点
	tag_t ObjectTag = NULL_TAG;
	UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &ObjectTag);
	while (ObjectTag != NULL_TAG)
	{

		UF_OBJ_set_color(ObjectTag, 186);//设置所有点为红色

		//获取点的XYZ坐标
		double PointCoords[3];
		UF_CURVE_ask_point_data(ObjectTag, PointCoords);

		MyPointZ.push_back(PointCoords[2]);//添加坐标点Z值到vector
	
		UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_point_type, &ObjectTag);
	}

	//冒泡排序对所有点按Z轴从小到大排序
	//通过两个for循环实现冒泡排序的全过程,外层for循环决定冒泡排序的趟数,
	//内层for循环决定每趟所进行两两比较的次数。
	int i, j;
	double t;
	for (i = 0; i < MyPointZ.size()-1; i++)
	{
		for (j = 0; j < MyPointZ.size()-1-i; j++)
		{
			if (MyPointZ[j]>MyPointZ[j+1])
			{
				t=MyPointZ[j];
				MyPointZ[j]=MyPointZ[j+1];
				MyPointZ[j+1]=t;
			}
		}
	}

	//打印
	for (i = 0; i < MyPointZ.size(); i++)
	{
		char msg[256];
		sprintf_s(msg, "%f\n", MyPointZ[i]);
		UF_UI_open_listing_window();
		UF_UI_write_listing_window(msg);
	}

	UF_terminate();

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lu1287580078/article/details/89284205
今日推荐