一、概述
选择对象控件在NX二次开发中经常使用,最近进行学习时发现一片博客中有清空选择对象控件中出现问题,我尝试着写了一下,应该可以解决博主中的问题,其实博主已经写的很详细了,几乎没怎么改,不知道是不是NX版本BUG导致博主清空选择对象,我是使用的是NX12.0.0.27版本,具体问题参考【UG\NX二次开发】NX12.0.2.9版本 选择对象控件-异常问题记录-CSDN博客。
二、实现功能
1、当对象选择控件不为空时,无论焦点在不在当前控件上,点击清空选择对象按钮都可以实现对象选择控件的清空。
2、点击清空选择对象1,清空对则对象1控件内容;点击清空选择对象2,清空对则对象2控件内容;
三、实现步骤(代码+解析)
1、制作blockui对话框
需要注意将对象选择控件设置为多选
2、引入头文件
#include <uf_ui.h>
#include <uf_ui.h>
#include <uf_modl.h>
#include <NXOpen/Selection.hxx>
3、过滤函数的初始化在initialize_cb()中写,这里设置过滤对象为组件、实体、片体
//selectionFilter function
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
vector<Selection::MaskTriple> maskArray(2);
maskArray[0] = Selection::MaskTriple(UF_component_type, 0, 0);//组件
maskArray[1] = Selection::MaskTriple(UF_solid_type, UF_solid_body_subtype, 0);//实体与片体
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);
selection01->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);
4、在update_cb()中对各控件进行相应的操作
int NXopen_ClearSelectionObject::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
try
{
if(block == selection0)
{
//---------Enter your code here-----------
std::vector<NXOpen::TaggedObject*> Object = selection0->GetSelectedObjects();
if ((int)Object.size())
{
point0->Focus();
}
}
else if(block == button0)
{
//---------Enter your code here-----------
selection0->Focus();
std::vector<NXOpen::TaggedObject*> Object = selection0->GetSelectedObjects();
Object.clear();
selection0->SetSelectedObjects(Object);
}
else if(block == point0)
{
//---------Enter your code here-----------
}
else if(block == selection01)
{
//---------Enter your code here-----------
std::vector<NXOpen::TaggedObject*> Object = selection0->GetSelectedObjects();
if ((int)Object.size())
{
point0->Focus();
}
}
else if(block == button01)
{
//---------Enter your code here-----------
selection01->Focus();
std::vector<NXOpen::TaggedObject*> Object = selection01->GetSelectedObjects();
Object.clear();
selection01->SetSelectedObjects(Object);
}
}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
NXopen_ClearSelectionObject::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
return 0;
}
四、最终效果