NX二次开发——BlockUI 弹出另一个BlockUI对话框

最近在研究,装配体下自动导出BOM表格中需要用到BlockUI 弹出另一个BlockUI对话框。通过对网上资料进行整理总结,具体如下:

1、明确主对话框、子对话框1和子对话框2

使用BlockUI创建.cpp和.hpp文件,dlx文件内容如下所示

主对话框(NXopen_OutputBom)

子对话框1(NXOpen_BOMSetObj)

子对话框2(NXOpen_EditLibraryFile)

2、将两个子对话框中的.cpp和.hpp加载到主界面的文件中

3、将两个子对话框的.cpp中以下内容进行注释

4、在主界面的.hpp中加入子对话框的头文件

5、在主界面的update_cb函数中调用以下代码,button01对应弹出子对话框1,button04弹出子对话框2。

cpp 复制代码
int NXopen_OutputBom::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    try
    {
        if(block == button0)
        {
        //---------Enter your code here-----------
			
        }
        else if(block == button01)
        {
        //---------Enter your code here-----------
			 //用户代码
			NXOpen_BOMSetObj *dialogintNXOpen_BOMSetObj = new NXOpen_BOMSetObj();//初始化
			dialogintNXOpen_BOMSetObj->Show();//第二个对话框显示			
			
        }
        else if(block == button02)
        {
        //---------Enter your code here-----------
			
        }
        else if(block == button03)
        {
        //---------Enter your code here-----------

        }
        else if(block == button04)
        {
        //---------Enter your code here-----------
			//用户代码
			//初始化对话框
			NXOpen_EditLibraryFile *dialogintNXOpen_EditLibraryFile = new NXOpen_EditLibraryFile();
			dialogintNXOpen_EditLibraryFile->Show();//第二个对话框显示
        }
        else if(block == button05)
        {
        //---------Enter your code here-----------
			
        }
        else if(block == nativeFolderBrowser0)
        {
        //---------Enter your code here--------

        }
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        NXopen_OutputBom::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return 0;
}

6、对话框1的.hpp和.cpp添加代码

.hpp中添加一个全局变量

cpp 复制代码
std::vector<NXOpen::TaggedObject *>selCompTags;

.cpp中添加如下代码,initialize_cb()中添加的为选择对象过滤器,只能选择组件,apply_cb()中添加代码主要是收集选择的对象

cpp 复制代码
void NXOpen_BOMSetObj::initialize_cb()
{
    try
    {
        group0 = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("group0"));
        selection0 = dynamic_cast<NXOpen::BlockStyler::SelectObject*>(theDialog->TopBlock()->FindBlock("selection0"));

		//选择对象过滤器
		Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
		vector<Selection::MaskTriple> maskArray(1);
		maskArray[0] = Selection::MaskTriple(UF_component_type, 0, 0);//组件
		//maskArray[1] = Selection::MaskTriple(UF_solid_type, 0, 0);//实体
		selection0->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        NXOpen_BOMSetObj::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
}

int NXOpen_BOMSetObj::apply_cb()
{
    int errorCode = 0;
    try
    {
        //---- Enter your callback code here -----
			//定义选择控件的容器

		selCompTags = selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");


    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        errorCode = 1;
        NXOpen_BOMSetObj::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return errorCode;
}

7、对话框2的.hpp和.cpp添加代码

.hpp中添加一个自己封装的函数

cpp 复制代码
void OpenTxt(LPCSTR filePath, int type);

.cpp中添加如下代码,update_cb()中添加的代码主要是进行TXT或者EXCEL打开文件

cpp 复制代码
int NXOpen_EditLibraryFile::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    try
    {
        if(block == button0)
        {
        //---------Enter your code here-----------
			LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_PartName.txt"; // 工件名称
			OpenTxt(filePath,0);
        }
        else if(block == button01)
        {
        //---------Enter your code here-----------
			LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_Material.txt"; // 材料
			OpenTxt(filePath,0);

        }
        else if(block == button02)
        {
        //---------Enter your code here-----------
			LPCSTR filePath = "E:\\\\NX1980\\\\LWCTOOLS\\\\Template\\\\cnc1.xlsx"; // BOM模板
			OpenTxt(filePath,1);
        }
        else if(block == button03)
        {
        //---------Enter your code here-----------
			LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_Hardness.txt"; // 硬度
			OpenTxt(filePath,0);
        }
        else if(block == button04)
        {
        //---------Enter your code here-----------
			LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_MaterialStatus.txt"; // 物料状态
			OpenTxt(filePath,0);
        }
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        NXOpen_EditLibraryFile::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return 0;
}

8、在主界面的.cpp中的update_cb调用按钮button01处加入以下代码

添加vector<NXOpen::TaggedObject *> selectionAssembliesobj = dialogintNXOpen_BOMSetObj->selCompTags;用于收集子对话框1选择对象控件返回的对象。子界面2不需要进行回调,因此不做修改。

cpp 复制代码
int NXopen_OutputBom::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    try
    {
        if(block == button0)
        {
        //---------Enter your code here-----------
			
        }
        else if(block == button01)
        {
        //---------Enter your code here-----------
			 //用户代码
			NXOpen_BOMSetObj *dialogintNXOpen_BOMSetObj = new NXOpen_BOMSetObj();//初始化
			dialogintNXOpen_BOMSetObj->Show();//第二个对话框显示			
			vector<NXOpen::TaggedObject *> selectionAssembliesobj = dialogintNXOpen_BOMSetObj->selCompTags;		
        }
        else if(block == button02)
        {
        //---------Enter your code here-----------

        }
        else if(block == button03)
        {
        //---------Enter your code here-----------

        }
        else if(block == button04)
        {
        //---------Enter your code here-----------
			//用户代码
			//初始化对话框
			NXOpen_EditLibraryFile *dialogintNXOpen_EditLibraryFile = new NXOpen_EditLibraryFile();
			dialogintNXOpen_EditLibraryFile->Show();//第二个对话框显示
        }
        else if(block == button05)
        {
        //---------Enter your code here-----------
			
        }
        else if(block == nativeFolderBrowser0)
        {
        //---------Enter your code here--------

        }
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        NXopen_OutputBom::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return 0;
}
相关推荐
汉克老师42 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
Mr_Xuhhh2 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
PAK向日葵2 小时前
【C/C++】面试官:手写一个memmove,要求性能尽可能高
c语言·c++·面试
Jared_devin3 小时前
二叉树算法题—— [蓝桥杯 2019 省 AB] 完全二叉树的权值
数据结构·c++·算法·职场和发展·蓝桥杯
搞全栈小苏3 小时前
基于Qt QML和C++的MQTT测试客户端(CMakeLists实现)
xml·c++·qt
啊?啊?3 小时前
18 从对象内存到函数调用:C++ 虚函数表原理(继承覆盖 / 动态绑定)+ 多态实战
开发语言·c++·多态原理
bkspiderx4 小时前
C++标准库:文件流类
开发语言·c++
一拳一个呆瓜4 小时前
【MFC】对话框属性:X Pos(X位置),Y Pos(Y位置)
c++·mfc
一拳一个呆瓜4 小时前
【MFC】对话框属性:Center(居中)
c++·mfc
hai_qin4 小时前
十三,数据结构-树
数据结构·c++