NX二次开发——NX二次开发-检查点是否在面上或者体上
目录
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。
该方法通过输入的点坐标和某个具体的对象,输出点相对于该对象的位置关系。具体对象包括:面、边、实体、片体;位置关系包括点在对象里面、点在对象上和点在对象外面。只有实体存在点在对象里面。
下面举一个在一个部件中查找到某个点所在的面的例子,详细情况如下: