一、概述
在NX二次开发中所有的对象操作都是通过对对象的TAG值进行操作控制,如何结合BlockUI控件,得到对象的TAG值是十分重要的一步。今天就遇到了这个问题,其实不是不会,而是思维习惯,直接利用对象选择器->Tag(),这个是不对的。应该先利用对象选择器获得选择的对象,在通过对象获得对象的Tag。有时候往往是一个小问题,但是你就是不想起来,这里感谢那些NX二次开发大佬的答疑,同时感谢各位写的博客。
//selection0对象选择器的ID
std::vector<TaggedObject*>objects =selection0->GetSelectedObjects();
tag_t tag=objects[0]->Tag()
二、案例
通过选择对象收集器,进行判断收集到的面是否为平面。
UF_MODL_ask_face_data()和UF_MODL_ask_face_type()函数都可以判断面的类型
关键代码:
#include <uf_modl.h>//在初始化中过滤
void text111::initialize_cb()
{try{group0 = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("group0"));selection0 = dynamic_cast<NXOpen::BlockStyler::SelectObject*>(theDialog->TopBlock()->FindBlock("selection0"));///过滤平面NXOpen::Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;std::vector<NXOpen::Selection::MaskTriple>selectionMask_array(1);//括号内数字:maskArray数组大小(有多少种选择就写多少)//具体用法参考MaskTripleselectionMask_array[0].Type = UF_solid_type;selectionMask_array[0].Subtype = UF_solid_face_subtype;selectionMask_array[0].SolidBodySubtype = UF_UI_SEL_FEATURE_ANY_FACE;NXOpen::BlockStyler::PropertyList *selComponentProps = selection0->GetProperties();//selComp为对象收集器的IDselComponentProps->SetSelectionFilter("SelectionFilter", action, selectionMask_array);delete selComponentProps;selComponentProps = NULL;}catch(exception& ex){//---- Enter your exception handling code here -----text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}
}int text111::apply_cb()
{int errorCode = 0;try{//---- Enter your callback code here -----UF_initialize();std::vector<TaggedObject*> objects = selection0->GetSelectedObjects();int type = 0;double point[3];double dir[3];double box[6];double radius;double rad_data;int norm_dir=0;UF_MODL_ask_face_data(objects[0]->Tag(), &type, point, dir, box, &radius, &rad_data, &norm_dir);if (type == 22){uc1601("温馨提示:选中结果为平面.", 1);}else{uc1601("温馨提示:请选择平面.", 1);}UF_terminate();}catch(exception& ex){//---- Enter your exception handling code here -----errorCode = 1;text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return errorCode;
}int text111::apply_cb()
{int errorCode = 0;try{//---- Enter your callback code here -----UF_initialize();std::vector<TaggedObject*> objects = selection0->GetSelectedObjects();int faceTpye = 0;UF_MODL_ask_face_type(objects[0]->Tag(), &faceTpye);if (faceTpye == UF_MODL_PLANAR_FACE){uc1601("温馨提示:选中结果为平面.", 1);}else{uc1601("温馨提示:请选择平面.", 1);}UF_terminate();}catch(exception& ex){//---- Enter your exception handling code here -----errorCode = 1;text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return errorCode;
}