[案例四] 智能填写属性工具(支持装配组件还有建模实体属性的批量创建、编辑)

       论文盲审结果要出来了,渣渣超没有心情继续写了,过一段时间再说吧,今天宣布五一结束,哈哈哈。写完这篇博客开始搞科研了,有时间再进NX开发学习。本次案例主要是对上次导出自动导出BOM的一个前处理,要想导出属性,首先的有属性。于是本着学习的态度进行制作,可能有些功能有点别扭(支持装配环境下组件属性的批量填写,支持建模环境下的实体(不包括装配组件实体)——为了减负我把其过滤掉了,一般没人会往装配体里添加进行建模吧,但是不免有奇葩,哈哈哈)。历时3天半,基本实现了该模型的功能。期间翻阅大量的历史学习记录,和大量其他UP主的博客。个人认为想要在技能上有所进行,必须进行综合练习。只有这样才能提升独立思考能力,而不是创建一个块,图个颜色一些简单的功能。再次感谢各位NX二次开发的大佬,让后辈站在巨人的肩膀上进行更好的探索。

目录

一、Block UI分析

二、开发思路

2.1主界面的开发

2.1.1按钮1——初始化属性

2.1.2按钮2——读取所有对象的属性

2.1.3按钮3——读取选择对象的属性

2.1.4按钮4——更新属性

2.1.5树列表——显示对象属性

2.1.6枚举控件——进行树列表显示对象的选择

2.2子界面1的开发

2.2.1枚举控件——对象的选择类型

2.2.2对象选择器——进行对象收集

2.2.3字符串控件——显示对象属性

2.3子界面2的开发

2.3.1枚举控件——对象的选择类型

2.3.2对象选择器——进行对象收集

三、运行结果


一、Block UI分析

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

1、主界面:包括四个Button按钮控件,一个树列表控件,一个枚举控件。

2、子界面1,初始化属性对话框

3、子界面2,读取选择对象的属性

二、开发思路

2.1主界面的开发

2.1.1按钮1——初始化属性

        主要是对对象属性的赋值,包括装配下的组件和建模下的实体(不包括组件实体)。采用弹出子对话框的形式,参考:NX二次开发——BlockUI 弹出另一个BlockUI对话框-CSDN博客。同时支持填写单个或者框选最多的物料编号相同的对象,这样做的目的是快速填写。(部分关键代码)

.cpp中:
update_cb相应按钮的位置添加以下代码
//初始化对话框
NXOpen_AttributeToolChild1 *dialogintNXOpen_AttributeToolChild1 = new NXOpen_AttributeToolChild1();
dialogintNXOpen_AttributeToolChild1->Show();//第二个对话框显示

2.1.2按钮2——读取所有对象的属性

        对所有对象的属性读取时,会根据枚举控件选择的实体或者时组件进行分别显示。主要是通过遍历得到的组件Component或者实体的TAG,通过树列表进行显示。(部分关键代码)

在相应的按钮下添加以下代码

DeleteALLNodes();
//判断组件还是实体,获取枚举类型当中的位置
NXOpen::BlockStyler::PropertyList *enumProps = enum0->GetProperties();
int index = enumProps->GetEnum("Value");
delete enumProps;
enumProps = NULL;
if (index == 0)
{
	//实体不包含组件实体
	CycleComponent();
	vector<tag_t> SoildTag = cyclesoildTag(1);
	vector<vector<string>> SoildAttributeTXT = GetSoildAttribute(SoildTag);
	GetTreeNodeAndTxt(SoildAttributeTXT);
}
else
{
	//组件
	CycleComponent();
	vector<vector<string>> ComponentAttributeTXT = GetComponentAttribute(ThechildComponent);
	ThechildComponent.clear();
	GetTreeNodeAndTxt(ComponentAttributeTXT);
}			

2.1.3按钮3——读取选择对象的属性

        主要是通过对选择的对象进行属性读取。会通过子对话框2中的枚举控件选择的实体或者时组件返回所选组件Component或者实体的TAG,然后用树列表进行显示。(部分关键代码)

DeleteALLNodes();
//初始化对话框
NXOpen_BOMSetObj2 *dialogintNXOpen_BOMSetObj2 = new NXOpen_BOMSetObj2();
dialogintNXOpen_BOMSetObj2->Show();//第二个对话框显示			
vector<NXOpen::TaggedObject *> selectionAssembliesobj = dialogintNXOpen_BOMSetObj2->selCompTags;
int selectionAssembliesobjindex = dialogintNXOpen_BOMSetObj2->index1;
if (selectionAssembliesobjindex == 0)
{
	vector<tag_t> SoildTag;
	for (int i = 0; i < (int)selectionAssembliesobj.size(); i++)
	{
		SoildTag.push_back(selectionAssembliesobj[i]->Tag());
	}				
	vector<vector<string>> SoildAttributeTXT = GetSoildAttribute(SoildTag);
	GetTreeNodeAndTxt(SoildAttributeTXT);
}
else if (selectionAssembliesobjindex == 1)
{
	vector<NXOpen::Assemblies::Component *> selectionAssembliescomponent;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雪公主的后妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值