NX二次开发常用函数——获取边对应的面 UF_MODL_ask_edge_faces
使用UF_MODL_ask_edge_faces()函数可以获得以下几种常见面的类型:
UF_MODL_CYLINDRICAL_FACE 16 //圆柱面
UF_MODL_CONICAL_FACE 17 //圆锥面
UF_MODL_SPHERICAL_FACE 18 //球面
UF_MODL_TOROIDAL_FACE 19 //环形面
UF_MODL_SWEPT_FACE 20 //扫略面
UF_MODL_PLANAR_FACE 22 //平面
UF_MODL_BLENDING_FACE 23 //面倒圆
UF_MODL_PARAMETRIC_FACE 43 //参考面
UF_MODL_OFFSET_FACE 65 //偏移面
//判断两个边是否在同一面上
//判断两个边是否在同一面上
BOOL NXOpen_LongRoundHole::IsEdgeOnFace()
{try{获得选中面的标识//PropertyList* faceSelectProps = face_select0->GetProperties();//std::vector<NXOpen::TaggedObject *> face = faceSelectProps->GetTaggedObjectVector("SelectedObjects");//delete faceSelectProps;//faceSelectProps = NULL;//获得选中边的标识PropertyList* edgeSelectProps = edge_select0->GetProperties();std::vector<NXOpen::TaggedObject *> edges = edgeSelectProps->GetTaggedObjectVector("SelectedObjects");delete edgeSelectProps;edgeSelectProps = NULL;//通过边查询面的TAG,进行比较std::vector<tag_t> faces;for (int i = 0; i < (int)edges.size(); i++){uf_list_p_t listFace = NULL;UF_MODL_create_list(&listFace);UF_MODL_ask_edge_faces(edges[i]->Tag(), &listFace);for (uf_list_p_t temp = listFace; temp != NULL; temp = temp->next){int type = 0;UF_MODL_ask_face_type(temp->eid, &type);if (type == UF_MODL_PLANAR_FACE){faces.push_back(temp->eid);}}UF_free(listFace);listFace = NULL;}/*UF_MODL_CYLINDRICAL_FACE 16 //圆柱面UF_MODL_CONICAL_FACE 17 //圆锥面UF_MODL_SPHERICAL_FACE 18 //球面UF_MODL_TOROIDAL_FACE 19 //环形面UF_MODL_SWEPT_FACE 20 //扫略面UF_MODL_PLANAR_FACE 22 //平面UF_MODL_BLENDING_FACE 23 //面倒圆UF_MODL_PARAMETRIC_FACE 43 //参考面UF_MODL_OFFSET_FACE 65 //偏移面*/if (faces[0]== faces[1]){return 1;}}catch (exception& ex){//---- Enter your exception handling code here -----NXOpen_LongRoundHole::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}