使用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 //偏移面
//判断两个边是否在同一面上
cpp
//判断两个边是否在同一面上
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;
}