NXOpenC++布尔求和命令

一、概述

        在进行批量布尔求和时,采用NXOpenC++的方式要比UFun的方式美观的多,个人认为,ufun中UF_MODL_unite_bodies函数采用的是两两进行合并,显示多个步骤,而NXOpenC++采用的是一个工具体和多个目标体进行合并,最终只显示一个步骤。具体原因个人目前不太清楚。

二、布尔求和

NXOpenC++

   NXOpen::Session *theSession = NXOpen::Session::GetSession();
	NXOpen::Part *workPart(theSession->Parts()->Work());
	NXOpen::Part *displayPart(theSession->Parts()->Display());

	vector<tag_t> thecycleTAG;

	//找到工作部件所有的体
	tag_t WorkPartTag1 = UF_PART_ask_display_part();
	tag_t objTag1 = NULL_TAG;
	UF_OBJ_cycle_objs_in_part1(WorkPartTag1, UF_solid_type, &objTag1);

	int type1;
	int subtype1;
	while (objTag1 != NULL_TAG)
	{
		UF_OBJ_ask_type_and_subtype(objTag1, &type1, &subtype1);
		if (!subtype1)
		{
			thecycleTAG.push_back(objTag1);
		}
		UF_OBJ_cycle_objs_in_part1(WorkPartTag1, UF_solid_type, &objTag1);
	}

	// ----------------------------------------------
	//   Menu: 插入(S)->组合(B)->合并(U)...
	// ----------------------------------------------
	NXOpen::Features::BooleanFeature *nullNXOpen_Features_BooleanFeature(NULL);
	NXOpen::Features::BooleanBuilder *booleanBuilder1;
	booleanBuilder1 = workPart->Features()->CreateBooleanBuilderUsingCollector(nullNXOpen_Features_BooleanFeature);	
	//建模公差
	booleanBuilder1->SetTolerance(0.001);
	//选择布尔类型——求和BooleanTypeUnite
	booleanBuilder1->SetOperation(NXOpen::Features::Feature::BooleanTypeUnite);
	//目标体的设置
	NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(thecycleTAG[0])));
	bool added1;
	added1 = booleanBuilder1->Targets()->Add(body1);
	//工具体设置	
	NXOpen::ScCollector *scCollector2;//定义一个工具收集器
	scCollector2 = workPart->ScCollectors()->CreateCollector();

	std::vector<NXOpen::Body *> bodies1;//获得工具体的body
	for (int i = 1; i < thecycleTAG.size(); i++)
	{
		NXOpen::Body *body(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(thecycleTAG[i])));
		bodies1.push_back(body);
	}

	NXOpen::BodyDumbRule *bodyDumbRule1;
	bodyDumbRule1 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true);

	std::vector<NXOpen::SelectionIntentRule *> rules1(1);
	rules1[0] = bodyDumbRule1;
	scCollector2->ReplaceRules(rules1, false);
	//设置目标体
	booleanBuilder1->SetToolBodyCollector(scCollector2);

	//创建、销毁
	NXOpen::NXObject *nXObject1;
	nXObject1 = booleanBuilder1->Commit();
	booleanBuilder1->Destroy();

UFUN

    std::vector<NXOpen::TaggedObject *> selectbodys = selection0->GetSelectedObjects();
		//TaggedObject转化tag_t
		std::vector<tag_t> body_ZX, body_FX;
		for (int i = 0; i < (int)selectbodys.size(); i++)
		{
			body_ZX.push_back(selectbodys[i]->Tag());
			body_FX.push_back(selectbodys[i]->Tag());
		}

		std::reverse(body_FX.begin(), body_FX.end());//反向排序

		//进行循环
		int j = 0;
		for (int i = 0; i < (int)body_ZX.size(); i++)
		{
			for ( j =0 ; j < (int)body_FX.size(); j++)
			{
				if (body_ZX[i] != body_FX[j])
				{
					findbodyTAG = NULL_TAG;
					findBody(body_ZX[i]); //找体

					if (findbodyTAG != NULL_TAG)
					{
						creatUnite(body_FX[j], body_ZX[i]); //通过判断求和
					}
				}
			}
			if ((int)body_FX.size() > 1)//反向减一
			{
				body_FX.pop_back();
			}
			j = (int)body_FX.size();
		}

原模型

NXOpenC++

UFUN

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白雪公主的后妈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值