在UG的二次开发中我们经常需要设置UI的过滤,来达到快速选择的目的。下面就是针对在选择中只能选择到第二个体上的面.
首先我做啦一个简单的UI界面,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/906be9e5e12b4cfc88ce794b93235b91.jpeg#pic_center)
然后我们开始代码,下面为过滤器函数的内容:
int sectionfittler::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject) //过滤器函数
{
UF_initialize();
int errorCode = 0;
try
{
int accept=UF_UI_SEL_ACCEPT;
if (block == bodySelect01)
{
std::vector<TaggedObject*> firstboy=bodySelect0->GetSelectedObjects();
if ( firstboy[0]->Tag()==selectObject->Tag())
{
accept=UF_UI_SEL_REJECT;
}
else
{
accept=UF_UI_SEL_ACCEPT;
}
return accept;
}
if (block == face_select0)
{
std::vector<TaggedObject*> firstboy=bodySelect0->GetSelectedObjects();
uf_list_t *faceslsit = NULL;
UF_MODL_create_list (&faceslsit); //创建列表
int facecount=0;
int result=0;
if (firstboy[0]->Tag()!=NULL)
{
UF_MODL_ask_body_faces(firstboy[0]->Tag(),&faceslsit);
UF_MODL_ask_list_count(faceslsit,&facecount);
for (int i = 0; i < facecount;i++)
{
tag_t facetag=NULL_TAG;
UF_MODL_ask_list_item(faceslsit,i,&facetag);
if (selectObject->Tag()==facetag)
{
result=0;
break;
}
else
{
result=1;
}
}
UF_MODL_delete_list(&faceslsit);
if (result==0)
{
accept=UF_UI_SEL_REJECT;
}
else
{
accept=UF_UI_SEL_ACCEPT;
}
}
return accept;
}
}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
errorCode = 1;
sectionfittler::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
}
这样就完成啦对过滤器的设置;由于当时只是测试用,没有写注释,望看官海涵,效果如下:
001