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

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;
}
http://www.xdnf.cn/news/4388.html

相关文章:

  • 深入了解linux系统—— 进程控制
  • PPT 制作难题迎刃而解,影刀 RPA 开启自动化创作时代
  • Kotlin 中实现单例模式的几种常见模式
  • 用R语言+随机森林玩转遥感空间预测-基于R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析
  • 全局网络:重构数字时代的连接范式
  • 【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
  • 汽车服务小程序功能点开发
  • 康养休闲旅游住宿服务实训室:构建产教融合新标杆
  • JVM的双亲委派模型
  • 基于RK3568多功能车载定位导航智能信息终端
  • 【IP101】图像分割技术全解析:从传统算法到深度学习的进阶之路
  • 【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解
  • vue2开发者sass预处理注意
  • 关于STM32 SPI收发数据异常
  • 日常开发中,iOS 性能调优我们怎么做?
  • ISCC 2025练武题 WP部分
  • DELL R770 服务器,更换OCP模块!
  • (九)PMSM驱动控制学习---分流电阻采样及重构
  • 密码学系列 - SR25519与ED25519
  • chili3d调试笔记12 deepwiki viewport svg雪碧图 camera three.ts
  • JDK 发展历史及其版本特性
  • 瑞芯微RV1126开发笔记
  • NetApp SAS 连接线:铜缆与光缆的全面介绍
  • 学习alpha,第2个alpha
  • 逻辑越权--登录和支付数据篡改
  • 双强联袂登场,解锁边缘智能开发新范式 | 2025高通边缘智能创新应用大赛首场公开课重磅来袭
  • 【PD】《Research on Package Detection Algorithm Based on Convolutional》
  • huggingface 热门开源TTS模型Dia-1.6B,支持多人对话生成、情感控制~
  • 球速最快的是哪种球类运动·棒球1号位
  • Python 10天冲刺《__slots__ 是一个类级属性》用于限制和优化对象的属性存储