UG爱好者

标题: 现存prt文件中怎么才能快速生成NX_Mass部件属性表达式 [打印本页]

作者: 纯Pure    时间: 2022-10-19 22:11
标题: 现存prt文件中怎么才能快速生成NX_Mass部件属性表达式
问题来源:我想借助宏程序实现对现有零件prt文件一键生成NX_Mass以及NX_MassPropRollupMass部件属性表达式,从而提取prt文件的质量属性,方便后面工程图自动生成明细表等后续操作。

我的思路是通过宏程序一键导入相关表达式,相关表达式已经编辑好,语句逻辑上是对的,但是跑不通,如下图:


理想状态下:由于表达式中有相关变量的赋值,这样就可以非常方便实现对现有零部件prt文件的重量数据采集。

但是,通过导入表达式,确实创建了NX_Mass、NX_MassPropRollupMass表达式,但是并没有跟部件属性关联,所以无法正常提取prt文件的质量数据,从而导致后面的重量赋值无法生效。


说明:新建文件时,由于我已将模板文件中NX_Mass、NX_MassPropRollupMass部件属性表达式正常创建,因此已经可以实现一键重量赋值表达式,如下图;


由于现存图纸数量不少,如果能实现一键赋值,效率会着实提高不少,不知朋友们有啥思路,望指点一二,感谢!



作者: 纯Pure    时间: 2022-10-19 22:28


作者: 夏季里那丝清凉    时间: 2022-10-20 08:23
1,用户默认设置——基本环境:材料/质量——部件属性和累计属性下部件质量与累计质量的创建表达式勾选上。
2,任意打开一个以前的文件,保存/生成质量质量属性。
3,打开表达式,左上角的显示切换到所有表达式,表达式组切换到全部显示,你会发现右边表达式栏里多出一组质量管理的表达式。
所以导入表达式时,不需要导入NX_Mass和NX_MassProprollupMass
作者: 高大锤    时间: 2022-10-20 09:52
学习学习!
作者: 纯Pure    时间: 2022-10-20 10:26
本帖最后由 纯Pure 于 2022-10-20 10:28 编辑
夏季里那丝清凉 发表于 2022-10-20 08:23
1,用户默认设置——基本环境:材料/质量——部件属性和累计属性下部件质量与累计质量的创建表达式勾选上。
...

夏兄,此法甚妙,创建表达式勾选后更新质量信息后会自动创建表达式,确实解决了我想要的自动创建部件表达式的需求,非常感谢!

但是我要实现一键赋值提取质量信息的方案出现2个Bug,看夏兄是否有思路,万分感谢!


BUG1:表达式名跟通过<W@NX_MASS>/<W@NX_MASSPROPROLLUPMASS>格式化表达式生成的表达式名称不一样
如果是零件prt则只会生成MassPropMass,而不是部件属性NX_Mass表达式
如果是装配prt文件则只会生成MassPropRollupMass,而不是部件属性NX_MassProprollupMass表达式






BUG2:两个表达式无法同时存在
因为单个prt文件,如果是零件prt则只会生成MassProp(Mass NX_Mass)表达式,如果是装配prt文件则只会生成MassPropRollupMass  (NX_MassProprollupMass)表达式由于我采用if表达式判断NX_Mass/NX_MassProprollupMass方式,需要两个表达式同时存在才能正常赋值。
------------------------------------------------------------
例如:
p10=If ( NX_Mass=0&NX_MassPropRollupMass=0 )
                Then ( "0.0000" )
        Else If ( NX_MassPropRollupMass!=0 )
               Then ( format("%0.4f", NX_MassPropRollupMass) )
               Else ( format("%0.4f", NX_Mass) )
weight=ug_setpartattrvalue("weight",p10)

-----------------------------------------------------------------------------



再次感谢!


作者: zwaiwo*    时间: 2022-10-20 11:12
搞不懂这些花里胡哨的东西,我都是做好建模跟装配的模板,跟工程图模板,只要是新建的文档填写好属性,出图时候属性自动填写,宏程序不懂
作者: 夏季里那丝清凉    时间: 2022-10-20 18:52
本帖最后由 夏季里那丝清凉 于 2022-10-20 18:58 编辑
纯Pure 发表于 2022-10-20 10:26
夏兄,此法甚妙,创建表达式勾选后更新质量信息后会自动创建表达式,确实解决了我想要的自动创建部件表达 ...

emmmm~~~~勾选创建表达式后,创建的表达式名称是填写的属性别名Mass,你更改属性别名,对应生成的表达式名也跟着变动。
我这边测试了一下,当文件是单个零件且存在质量时,生成的表达式只有Mass;当文件是一个装配或子装配且存在质量时,生成的表达式只有MassProprollupMass。而且当删除掉文件内特征,让其质量归零,再次更新质量后,质量表达式将消失。
根据这一特性,想是用IF来判断就出现了问题,缺少表达式!因为软件自动生成的表达式要么只有Mass,要么只有MassProprollupMass。于是我想,如果我在软件自动生成质量表达式前就把Mass和MassProprollupMass表达式创建了会怎么样了?





从图里可以看到质量表达式是可以提前手动创建的,那么一个大胆的想法浮现在我脑中。于是我提前创建了两个质量表达式"质量"和"累计质量"。



原因很简单,文件并不存在"累计质量"属性。那么如何让"累计质量"不被删除了,也很简单,只要"累计质量"被其它表达式引用了,它就不会被删除。于是我再次尝试了一下。




进行到这一步,应该也能满足你的要求了,你的模板文件是用的NX_MASS和NX_MassProprollupMass创建的表达式,所以要么改成用户默认设置里的别名属性名称(我的是"质量"和"累计质量",默认是“MASS”和"MassProprollupMass"),要么在表达式改成NX_MASS=“质量别名”;NX_MassProprollupMass=“累计质量别名”。

老实说,这么搞来搞去有点把问题搞复杂了,能做二次开发是最好的,这么弄其实也方便不了多少....



作者: 夏季里那丝清凉    时间: 2022-10-20 18:57
纯Pure 发表于 2022-10-20 10:26
夏兄,此法甚妙,创建表达式勾选后更新质量信息后会自动创建表达式,确实解决了我想要的自动创建部件表达 ...

老实说,这么搞来搞去,有点把问题搞复杂了,能做二次开发就最好了
作者: 纯Pure    时间: 2022-10-20 20:53
夏季里那丝清凉 发表于 2022-10-20 18:52
emmmm~~~~勾选创建表达式后,创建的表达式名称是填写的属性别名Mass,你更改属性别名,对应生成的表达式 ...

"在软件自动生成质量表达式前就把Mass和MassProprollupMass表达式创建了"
夏兄确实牛叉!!!!!佩服佩服!!!
作者: 纯Pure    时间: 2022-10-20 20:55
夏季里那丝清凉 发表于 2022-10-20 18:57
老实说,这么搞来搞去,有点把问题搞复杂了,能做二次开发就最好了

不瞒夏兄:ciya:,确实已经看几节唐工的二次开发视频教程了,还需要一点时间消化:daxiao:
作者: hnymzb    时间: 2024-3-7 10:30
夏季里那丝清凉 发表于 2022-10-20 18:52
emmmm~~~~勾选创建表达式后,创建的表达式名称是填写的属性别名Mass,你更改属性别名,对应生成的表达式 ...

12版本,界面差异很大,如何去做,请指点!谢谢




欢迎光临 UG爱好者 (https://www.ugsnx.com/) Powered by Discuz! X3.2