当前位置: 首页 > news >正文

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。

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中添加一个全局变量

std::vector<NXOpen::TaggedObject *>selCompTags;

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

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中添加一个自己封装的函数

void OpenTxt(LPCSTR filePath, int type);

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

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不需要进行回调,因此不做修改。

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;
}

相关文章:

  • 说说es配置项的动态静态之分和集群配置更新API
  • JAVA中ArrayList的解析
  • C语言初阶:数组
  • Webug4.0靶场通关笔记20- 第25关越权查看admin
  • Webug4.0靶场通关笔记19- 第24关邮箱轰炸
  • 限流算法学习笔记(一)Go Rate Limiter
  • 数据实验分析
  • RabbitMQ-springboot开发-应用通信
  • 精益数据分析(48/126):UGC商业模式的指标剖析与运营策略
  • JVM中类加载过程是什么?
  • node.js 实战——餐厅静态主页编写(express+node+ejs+bootstrap)
  • css识别\n换行
  • 安卓工程build.gradle中的Groovy的常见知识点
  • 【神经网络与深度学习】VAE 中的先验分布指的是什么
  • “胖都来”商标申请可以通过注册不!
  • Eclipse通过Tomcat启动web项目报错
  • 使用 AI 如何高效解析视频内容?生成思维导图或分时段概括总结
  • 基于 ISO 22301 与国产化实践的 BCM 系统菜单设计指南
  • 【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师![特殊字符]♂️✨
  • 佩斯科夫:俄会考虑30天停火提议,但试图对俄施压无用
  • 中美经贸高层会谈将在午餐后继续
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 临港新片区:发布再保险、国际航运、生物医药3个领域数据出境操作指引
  • 西安机场回应航站楼“水帘洞”事件:屋面排水系统被冰雹堵塞