NX/UG二次开发创建曲面偏置体

NX/UG二次开发——创建曲面偏置体

创建曲面偏置体

这里介绍了一种对模型曲面进行偏置来获得偏置体的方法。

1.曲面偏置

void OffsetFace(tag_t face, tag_t* offset_body)//传入参数face是要进行偏置的面tag;offset_body是函数创建好后的偏置体tag,通过指针传参
{
	NXOpen::Session *theSession = NXOpen::Session::GetSession();
	NXOpen::Part *workPart(theSession->Parts()->Work());
	NXOpen::Part *displayPart(theSession->Parts()->Display());
	tag_t offset_feat;

	NXOpen::Features::Feature *nullNXOpen_Features_Feature(NULL);
	NXOpen::Features::ThickenBuilder *thickenBuilder1;
	thickenBuilder1 = workPart->Features()->CreateThickenBuilder(nullNXOpen_Features_Feature);

	thickenBuilder1->SetTolerance(0.01);

	thickenBuilder1->FirstOffset()->SetFormula("2.5");//2.5是第一个方向的偏置量,可以按需求修改。需要注意的是,如果曲面偏置量过大可能会因为曲面曲率问题报错。

	thickenBuilder1->SecondOffset()->SetFormula("0");//0是第二个方向的偏置量,可以按需求修改

	thickenBuilder1->BooleanOperation()->SetType(NXOpen::GeometricUtilities::BooleanOperation::BooleanTypeCreate);

	std::vector<NXOpen::Body *> targetBodies1(1);
	NXOpen::Body *nullNXOpen_Body(NULL);
	targetBodies1[0] = nullNXOpen_Body;
	thickenBuilder1->BooleanOperation()->SetTargetBodies(targetBodies1);

	thickenBuilder1->RegionToPierce()->SetDistanceTolerance(0.01);

	thickenBuilder1->RegionToPierce()->SetChainingTolerance(0.0094999999999999998);

	NXOpen::SelectionIntentRuleOptions *selectionIntentRuleOptions1;
	selectionIntentRuleOptions1 = workPart->ScRuleFactory()->CreateRuleOptions();

	selectionIntentRuleOptions1->SetSelectedFromInactive(false);

	std::vector<NXOpen::Face *> faces1(1);
	NXOpen::Face *face1(dynamic_cast<NXOpen::Face *>(NXOpen::NXObjectManager::Get(face)));
	faces1[0] = face1;
	NXOpen::FaceDumbRule *faceDumbRule1;
	faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1, selectionIntentRuleOptions1);

	delete selectionIntentRuleOptions1;
	std::vector<NXOpen::SelectionIntentRule *> rules1(1);
	rules1[0] = faceDumbRule1;
	thickenBuilder1->FaceCollector()->ReplaceRules(rules1, false);

	NXOpen::NXObject *nXObject1;
	nXObject1 = thickenBuilder1->Commit();

	NXOpen::Expression *expression1(thickenBuilder1->SecondOffset());
	NXOpen::Expression *expression2(thickenBuilder1->FirstOffset());
	offset_feat = thickenBuilder1->GetObject()->Tag();
	thickenBuilder1->Destroy();

	UF_MODL_ask_feat_body(offset_feat, offset_body);
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值