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

[案例三] 装配体下自动导出BOM表格

        最近五一正好毕业论文盲审,抽时间研究一下装配体下的自动导出BOM表格的制作。起因是看到B站上边一位【怡宁塑胶模具设计】的UP主做了一个自动导出BOM表,感觉很有趣。感谢博主在B站上的视频,让我受益匪浅。于是本着学习的态度进行制作,并且根据自己的想法进行补充(增加选择组件导出BOM的功能)。历时3天,基本实现了该模型的功能。期间翻阅大量的历史学习记录,和大量其他UP主的博客。个人认为想要在技能上有所进行,必须进行综合练习。只有这样才能提升独立思考能力,而不是创建一个块,图个颜色一些简单的功能。再次感谢各位NX二次开发的大佬,让后辈站在巨人的肩膀上进行更好的探索。

目录

一、Block UI分析

二、开发思路

2.1主界面的开发

(1)按钮控件1,一键读取所有装配体BOM信息在树列表中显示

(2)点击按钮2,读取选择装配体对象进行读取BOM信息

(3)点击按钮3,删除选择列

(4)点击按钮4,删除所有列。

(5)点击按钮5,弹出编辑库文件

(6)点击按钮6,导出BOM表

(7)选择文件浏览器

2.2选择对象子界面的开发

2.3编辑库文件子界面的开发

三、运行结果


一、Block UI分析

主要用到了三个Block UI,具体如下:

1、主界面:包括六个Button按钮,一个树列表,一个浏览器文件位置选择按钮。

2、子界面1,选择对象对话框

3、子界面2,编辑库文件对话框。

二、开发思路

2.1主界面的开发

从上到下按钮依次为:

(1)按钮控件1,一键读取所有装配体BOM信息在树列表中显示

        遍历装配导航器中所有节点,筛选出最底层没有子节点的组件的Component。可以写一个递归函数进行遍历,部分关键代码如下:

//定义全局变量ThechildComponent用来存放遍历出来的Component
vector<NXOpen::Assemblies::Component *> ThechildComponent;//遍历装配树
void NXopen_OutputBom::CycleComponent()
{//遍历装配多级节点BasePart* basedisplaypart;//定义顶层显示部件为全局变量basedisplaypart = theSession->Parts()->BaseDisplay();//获取顶层显示部件if (basedisplaypart != NULL){Assemblies::ComponentAssembly* componentassembly = basedisplaypart->ComponentAssembly();//获取装配底层(BaseWork为当前工作装配,BaseDisplay为当前显示的装配 两种结果是不一样的)Assemblies::Component* rootcomponent = componentassembly->RootComponent();//获取rootcomponentif (rootcomponent == NULL)//判断rootcomponent是否为空,空即提示当前不在装配环境或没有装配组件{theUI->NXMessageBox()->Show("提示", NXOpen::NXMessageBox::DialogTypeWarning, "当前不在装配环境或没有装配组件,请仔细检查!"); //弹出消息框提示}else if (rootcomponent != NULL)//不为空就遍历装配体的子组件{Cyclechildren(rootcomponent);}}
}//循环遍历组件得到组件的component
void NXopen_OutputBom::Cyclechildren(NXOpen::Assemblies::Component *component)
{//存放遍历到的装配树列表根节点下所有的子节点componentvector<NXOpen::Assemblies::Component *> childComponent = component->GetChildren();for (int i = 0; i < childComponent.size(); ++i){//获取组件的加载状态Part* resCurrentProtype = dynamic_cast<Part*>(childComponent[i]->Prototype());//获取组件是否被抑制bool GetComponentIsSuppressed = childComponent[i]->IsSuppressed();component->IsSuppressed();if (resCurrentProtype != NULL || GetComponentIsSuppressed != true){vector<NXOpen::Assemblies::Component *> thechildComponent1 = childComponent[i]->GetChildren();if ((int)thechildComponent1.size()==0){ThechildComponent.push_back(childComponent[i]);//收集已经加载不被抑制的组件component}}Cyclechildren(childComponent[i]);//递归遍历}
}

        根据组件节点的Component进行属性的遍历,这里用到的是UF的函数,不是NXOPENC++,感觉代码有点累赘,我记得我以前写过类似的程序,但是死活想不起来,为了不影响整体的进度,因此我先实现功能,如果组件很多

http://www.xdnf.cn/news/319573.html

相关文章:

  • 定积分和不定积分
  • [dify]官方模板DeepResearch工作流学习笔记
  • 【Windows】怎么解决Win 10家庭版WMI Provider Host占用CPU过高的问题?-篇一【2025.05.07】
  • 数字孪生大屏UI设计
  • centos8.5.2111 更换阿里云源
  • 软件架构评估方法全面解析
  • React Fiber
  • Excel处理控件Aspose.Cells教程:压缩Excel文件完整指南
  • java CyclicBarrier
  • PDF解析新范式:Free2AI工具实测
  • Pdf转Word案例(java)
  • 【笔记】当个自由的书籍收集者从canvas得到png转pdf
  • Docker编排工具---Compose的概述及使用
  • SSA-CNN+NSGAII+熵权TOPSIS,附相关气泡图!
  • 面试高频算法:最长回文子串
  • Webug4.0靶场通关笔记19- 第24关邮箱轰炸
  • 《Python星球日记》 第42天:综合练习与数学建模
  • MVCC机制
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.3 动态报表生成(Jupyter Notebook/ReportLab)
  • 面试题 03.06 动物收容所
  • 如何高效实现「LeetCode25. K 个一组翻转链表」?Java 详细解决方案
  • SENSE2020BSI sCMOS科学级相机主要参数及应用场景
  • Azure OpenAI 聊天功能全解析:Java 开发者指南
  • 本地部署 MySQL + Qwen3-1.5B + Flask + Dify 工作流
  • 滑动窗口——长度最小子数组
  • var、let、const的区别
  • 高并发内存池(一):项目简介+定长内存池的实现
  • ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
  • MySQL 8.0 OCP(1Z0-908)英文题库(1-10)
  • PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)