[案例五] 实体——赋值质量

       最近翻阅了实验室其他人编写的一个“质量赋值”功能,能够直接为实体或组件设定质量。出于好奇,我对其进行了分析。由于自己平时没有用到该功能,所以也借此机会学习一下。

在分析过程中,我发现NX 官方其实并没有提供直接修改质量的功能。一般来说,质量是通过“密度 × 体积”计算得出的。因此,该功能的实现思路是:用户在对话框中直接输入质量,程序通过实体体积反推所需的密度,然后将该密度赋值给对象。这样一来,在 NX 的“测量”工具中就能显示出用户设定的质量值。虽然我目前还不清楚这样设计背后的全部理由,但相信它一定有其特定的应用场景。这里的分析仅出于学习目的,不对该功能设计是否合理进行评判。

目录

一、Block UI分析

二、开发思路

2.1开发中存在的问题

2.2、所封装函数块

(1)获取实体体积

(2)设置对象密度

(3)查询对象密度

(4)查询对象质量

(5)四舍五入保留4位小数

三、运行结果


一、Block UI分析

主要用到了一个选择体控件,还有一个双精度的控件。一般情况下,我喜欢选择对象控件,它可以实现选择实体、组件、片体、线条、面等功能。但是今天尝试用一下选择体控件吧。

二、开发思路

        我始终认为,如果要做一个工具,就必须赋予它真正的意义。仅支持实体而不支持组件实体,这样的功能实在太过鸡肋。因此,我花了半天时间认真思考这个问题。贵在坚持。坦白说,这一路走来,几乎都是靠自己摸索和请教他人,其实也就是请教了里海博主几个问题。面对从未接触过的内容,我也只能不断试错。你现在看到的代码,其实是我无数次尝试和调整之后的结果。希望未来有缘看到这些内容的陌生人,在遇到类似问题时,能少走一些弯路。

2.1开发中存在的问题

(1)一般情况下,本人喜欢采用对象选择控件,不适用体选择控件,本次尝试了一下发现很多问题。使用对象选择控件是可以通过枚举类型,我们可以控制选择对象的过滤器,实现组件或者实体的选择,而体选择控件无论是实体还是组件实体都能选择,因此首先需要判断是装配下组件实体还是建模下的实体。根据里海博客找到的突破口。

(2)建模下的实体可以直接通过UF_MODL_set_body_density()设置密度,而装配下组件实体还需要一些处理,具体见以下代码:

//设置对象密度
void NXopen_AssignmentQuality::SetObjectDensity(int type)
{
	try
	{
		vector<NXOpen::TaggedObject *> ObjectTags = bodySelect0->GetProperties()->GetTaggedObjectVector("SelectedObjects");

		for (int i = 0; i < (int)ObjectTags.size(); i++)
		{
			bool is_occ;//判断是否为组件
			tag_t body = ObjectTags[i]->Tag();//用来存储选择对象的TAG
			tag_t owning_part, part = UF_PART_ask_display_part();

			// 判断是否为装配体中的实例对象
			is_occ = (UF_ASSEM_is_occurrence(body) && !UF_OBJ_is_object_a_promotion(body));
			if (is_occ)
			{
				body = UF_ASSEM_ask_prototype_of_occ(body);//输入对象的事例occurrence,返回对象的原型。如果输入的是未加载的部件则返回NULL_TAG。
				UF_OBJ_ask_owning_part(body, &owning_part);//获得对象所在部件的PartTag
				UF_ASSEM_set_work_part_quietly(owning_part, &part);//再不打开窗口,静默下,将组件中的对象设置为工作部件进行修改,因为密度修改只能该实体的密度,组件其实实体链接到装配环境中,就像不能修改装配体名字,只能修改实体零件名字,该链接到组件中完成名字修改
				UF_MODL_density_units_t units;			//units:磅/英寸=UF_MODL_pounds_inches;磅/英尺 = UF_MODL_pounds_feet;克/厘米 = UF_MODL_grams_centimeters;千克/米 = UF_MODL_kilograms_meters
				if (type &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白雪公主的后妈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值