NX二次开发——选择对象控件(清空选择对象)

一、概述

        选择对象控件在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;
}

四、最终效果

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 19:52:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 19:52:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 19:52:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 19:52:01       20 阅读

热门阅读

  1. C++认识及域的概念

    2024-03-21 19:52:01       19 阅读
  2. python与excel第四节 批量新增、删除工作表

    2024-03-21 19:52:01       21 阅读
  3. GIS插值算法--克里金插值算法

    2024-03-21 19:52:01       18 阅读
  4. REINFORCE算法

    2024-03-21 19:52:01       18 阅读
  5. Acwing1113. 红与黑

    2024-03-21 19:52:01       21 阅读
  6. OSDI 2023

    2024-03-21 19:52:01       18 阅读
  7. 在Spring Boo动态修改日志级别

    2024-03-21 19:52:01       17 阅读