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

cpp
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 再通过该方法,找到点所在面,并输出面
