NX二次开发——NX二次开发-检查点是否在面上或者体上

发布于:2025-07-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

1、采用点的tag值,判断点是否在面上

2、采用点的坐标值,判断点是否在面上

3、c#的形式

3.1 首先,通过该方法查找点所在的体上,位置关系为点在对象上

3.2 再通过该方法,找到点所在面,并输出面


摘要:本文介绍了在NX二次开发中判断点在面上或体上的两种方法。第一种通过点的tag查询其父对象是否为面;第二种使用UF_MODL_ask_point_containment函数,通过点坐标和对象判断位置关系(内/外/上)。同时在C#中可使用AskPointContainment方法实现类似功能,并给出查找点所在面的具体流程:先定位点在体上,再确定所在面。这些方法适用于BlockUI选点时确定点与几何对象的位置关系。

1、采用点的tag值,判断点是否在面上

BOOL NXOpen_LongRoundHole::IsPointOnFace(tag_t pointTAG)
{
	BOOL PointOnFace = false;
	try
	{
		tag_p_t parents = NULL;
		int num = 0;
		UF_SO_ask_parents(pointTAG, UF_SO_ASK_ALL_PARENTS, &num, &parents);
		tag_t face_tag = NULL;
		for (int i = 0; i < num; i++)
		{
			int type, subtype;
			UF_OBJ_ask_type_and_subtype(parents[i], &type, &subtype);
			if (type == 70 && subtype == 2)
			{
				face_tag = parents[i];
				PointOnFace = true;
				break;
			}
		}
	}
	catch (exception& ex)
	{
		//---- Enter your exception handling code here -----
		NXOpen_LongRoundHole::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
	}
	return PointOnFace;
}

2、采用点的坐标值,判断点是否在面上

		UF_MODL_ask_point_containment(
			double point[3],
			tag_t body_tag,//体或面
			int* pt_status);

		//1 = 点在体内 或面内
		//2 = 点在体外 或面外
		//3 = 点在体表  或表面

3、c#的形式

在基于NX软件,通过二次开发实现某些功能的过程中,需要知道某些点是否在面上或者体上,从而来解决某些问题。例如,用Block UI选择点的时候,找到该点所在的面或者边。可以利用UF函数中提供的方法:UF_MODL_ask_point_containment实现。在C#中是AskPointContainment。

该方法通过输入的点坐标和某个具体的对象,输出点相对于该对象的位置关系。具体对象包括:面、边、实体、片体;位置关系包括点在对象里面、点在对象上和点在对象外面。只有实体存在点在对象里面。

下面举一个在一个部件中查找到某个点所在的面的例子,详细情况如下:

3.1 首先,通过该方法查找点所在的体上,位置关系为点在对象上

3.2 再通过该方法,找到点所在面,并输出面


网站公告

今日签到

点亮在社区的每一天
去签到