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.mzph.cn/bicheng/80048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 系统管理函数详解

PostgreSQL 系统管理函数详解 PostgreSQL 提供了一系列强大的系统管理函数&#xff0c;用于数据库维护、监控和配置。这些函数可分为多个类别&#xff0c;以下是主要功能的详细说明&#xff1a; 一、数据库配置函数 1. 参数管理函数 -- 查看所有配置参数 SELECT name, sett…

【2025软考高级架构师】——计算机网络(9)

摘要 全文主要围绕计算机网络相关知识展开&#xff0c;包括域名服务器查询方式、网络规划与设计的关键技术、双协议栈与隧道技术、层次化网络设计、网络冗余设计以及高可靠和高可用性等方面&#xff0c;旨在为软考高级架构师的备考提供知识参考。 1. 通信网络架构图 2. 通信架…

yolov8n-obb训练rknn模型

必备&#xff1a; 准备一台ubuntu22的服务器或者虚拟机&#xff08;x86_64&#xff09; 1、数据集标注&#xff1a; 1&#xff09;推荐使用X-AnyLabeling标注工具 2&#xff09;标注选【旋转框】 3&#xff09;可选AI标注&#xff0c;再手动补充&#xff0c;提高标注速度 …

前端-HTML+CSS+JavaScript+Vue+Ajax概述

HTML&#xff08;超文本标记语言&#xff09;常见标签 <html><head> <title>这是标题的内容&#xff0c;显示在浏览器的头部</title></head><body><!-- 这里面的内容在浏览器显示给用户看 --><!-- h1 -> h6 : 标题从大到小 …

嵌入式软件--stm32 DAY 5 USART串口通讯(上)

前边我们学的都是通用的功能&#xff0c;例如GPIO、中断&#xff0c;现在我们要学习的是某一个特定的功能。典型的就是通讯功能。其中&#xff0c;最简单的通讯协议就是串口了。 一、串口_通讯基础知识 1.1 串行与并行 按数据传送的方式分类的。 串行通信一位一位传输&…

c++混淆工具Hikari-LLVM15-llvm-18.1.8rel编译安装

目录 1. windows 编译1. 2 编译工具安装1.2.1 下载w64devkit1.2.2 添加环境变量1.2.3 验证一下 1.3 下载llvm-18.1.8rel1.4 编译 2. Android studio增加混淆编译2.1 替换NDK中clang2.2 配置混淆编译项 3. Linux编译安装4. Linux下增加混淆编译4.1 在CMakeLists.txt中设置clang编…

【EasyPan】loadDataList方法及checkRootFilePid方法解析

【EasyPan】项目常见问题解答&#xff08;自用&持续更新中…&#xff09;汇总版 一、loadDataList方法概览 /*** 文件列表加载接口* param session HTTP会话对象* param shareId 必须参数&#xff0c;分享ID&#xff08;使用VerifyParam进行非空校验&#xff09;* param …

Vue3渲染引擎:虚拟DOM与响应式原理

Vue3渲染引擎&#xff1a;虚拟DOM与响应式原理 在当今的前端开发中&#xff0c;Vue.js作为一种流行的JavaScript框架&#xff0c;经常被用来构建用户界面。而Vue.js 3作为其最新版本&#xff0c;在性能和功能上进行了许多优化和改进。其中&#xff0c;Vue3渲染引擎的核心原理—…

【论文阅读】Attentive Collaborative Filtering:

Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隐式反馈推荐、注意力机制、贝叶斯个性化排序 标题翻译&#xff1a;注意力协同过滤&#xff1a;基于项目和组件级注意力的…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.1 数据查询基础(SELECT/WHERE/GROUP BY/HAVING)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 第2章 SQL语法进阶:数据查询基础(SELECT/WHERE/GROUP BY/HAVING)2.1 数据查询基础2.1.1 SELECT 语句:从表中提取数据2.1.1.1 基础语法与列选择2.1.1.2 列别名与表达式2.1.1.3 去重与排序2.1.2 WHERE…

深度解析:基于Python的微信小程序自动化操作实现

引言 在当今数字化时代&#xff0c;自动化技术正在改变我们与软件交互的方式。本文将深入解析一个使用Python实现的微信小程序自动化操作脚本&#xff0c;该脚本能够自动识别屏幕上的特定图像并执行点击操作。这种技术在自动化测试、批量操作和效率工具开发中有着广泛的应用前…

layui下拉框输入关键字才出数据

html里这样放 <div class"layui-form-item"><label class"layui-form-label">合同方&#xff1a;</label><div class"layui-input-block rightinline"><input type"text" name"select_text" ids…

bash和zsh的区别

Bash&#xff08;Bourne-Again SHell&#xff09;和 Zsh&#xff08;Z Shell&#xff09;都是 Unix/Linux 系统中的主流 Shell&#xff0c;但它们在功能、配置和用户体验上有显著区别。以下是两者的详细对比&#xff1a; 1. 历史与兼容性 特性BashZsh诞生时间1989 年&#xff…

组件通信-v-model

概述&#xff1a;实现 父↔子 之间相互通信。 前序知识 —— v-model的本质 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本质是下面这行代码 --> <input type"text" :value"use…

虚拟机(Virtual Machine, VM)的简单介绍

目录 一、虚拟机的基本概念 二、虚拟化技术的分类 三、虚拟机的核心架构 四、虚拟机的核心应用场景 五、虚拟机的优缺点分析 六、虚拟机与容器技术的对比 七、虚拟机的未来趋势 八、总结 一、虚拟机的基本概念 虚拟机&#xff08;VM&#xff09;是一种通过软件模拟的完…

Xcode16提交App Store审核时提示bitcode报错

提交AppStore时出现bitcode报错&#xff0c;内容如下&#xff1a; Upload was cancelled. 2025-04-30 02:15:48.349 [ContentDelivery.Uploader.600000DB4380] Show Progress: Upload failed. Validation failed Invalid Executable. The executable Blockolot.app/Frameworks/…

Flutter TabBar / TabBarView 详解

目录 一、引言 二、基本用法 代码解析 三、主要属性 3.1 TabBar 3.2 TabBarView 四、进阶定制&#xff1a;突破默认样式 4.1 视觉样式深度定制 4.2 自定义指示器与标签 4.3 动态标签管理 五、工程实践关键技巧 5.1 性能优化方案 5.2 复杂手势处理 5.3 响应式布局…

mathtype转化

mathtype转latex 点击预置 选择剪切和复制预置 点击MathML 或 TeX&#xff0c;选择 LaTeX 2.09 and later mathtype转word自带编码器 与前面都相同&#xff0c;选择 MathML2.0&#xff08;m namespace&#xff09;

AI检测的荒谬性:当规则沦为一场概率游戏

当今高校对AI检测工具的依赖&#xff0c;已经演变成一场标准混乱的闹剧。有的学校指定格子达&#xff0c;有的迷信维普&#xff0c;而同一篇论文在不同的系统里竟能得出天差地别的结果——在格子达AI检测率仅12%的文章&#xff0c;放到维普却可能飙升到60%。这意味着&#xff0…

react-14defaultValue(仅在首次渲染时生效)和value(受 React 状态控制)

在 React 中&#xff0c;defaultChecked/checked 和 defaultValue/value 是用于处理表单元素初始值和受控值的属性对。区别在于表单元素是否受 React 组件状态控制。 1. defaultValue 作用&#xff1a;设置表单元素的初始值&#xff08;仅在首次渲染时生效&#xff09;。特点…