一、概述
在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数组大小(有多少种选择就写多少)//具体用法参考MaskTriple
selectionMask_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为对象收集器的ID
selComponentProps->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;
}