【UG\NX二次开发】NXOpen 点到点移动面(admMoveFaceBuilder)、点到点复制面(copyFaceBuilder)

//点到点移动面
tag_t P2P_move_face(std::vector<tag_t> faces, double pt1[3], double pt2[3])
{
	if (faces.empty())
	{
		return false;
	}
	Session *theSession = Session::GetSession();
	Part *workPart(theSession->Parts()->Work());
	Part *displayPart(theSession->Parts()->Display());
	Features::AdmMoveFace *nullFeatures_AdmMoveFace(NULL);

	if (!workPart->Preferences()->Modeling()->GetHistoryMode())
	{
		throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
	}

	Features::AdmMoveFaceBuilder *admMoveFaceBuilder1;
	admMoveFaceBuilder1 = workPart->Features()->CreateAdmMoveFaceBuilder(nullFeatures_AdmMoveFace);

	admMoveFaceBuilder1->FaceToMove()->SetRelationScope(511);

	admMoveFaceBuilder1->Motion()->DistanceAngle()->OrientXpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisPassive);

	admMoveFaceBuilder1->Motion()->DistanceAngle()->OrientXpress()->SetPlaneOption(GeometricUtilities::OrientXpressBuilder::PlanePassive);

	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->SetPercentUsed(true);

	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->Expression()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->Expression()->SetRightHandSide("0");

	admMoveFaceBuilder1->Motion()->OrientXpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisPassive);

	admMoveFaceBuilder1->Motion()->OrientXpress()->SetPlaneOption(GeometricUtilities::OrientXpressBuilder::PlanePassive);

	admMoveFaceBuilder1->FaceToMove()->SetCoplanarEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetCoplanarAxesEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetCoaxialEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetEqualDiameterEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetTangentEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetSymmetricEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetOffsetEnabled(false);

	admMoveFaceBuilder1->FaceToMove()->SetUseFaceBrowse(true);

	admMoveFaceBuilder1->Motion()->SetOption(GeometricUtilities::ModlMotion::OptionsPointToPoint);

	admMoveFaceBuilder1->Motion()->OrientXpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisY);

	// 	admMoveFaceBuilder1->Motion()->DistanceValue()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceValue()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceBetweenPointsDistance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceBetweenPointsDistance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->RadialDistance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->RadialDistance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->Angle()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->Angle()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceAngle()->Distance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceAngle()->Distance()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceAngle()->Angle()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DistanceAngle()->Angle()->SetRightHandSide("0");

	admMoveFaceBuilder1->Motion()->SetDeltaEnum(GeometricUtilities::ModlMotion::DeltaReferenceAcsWorkPart);

	// 	admMoveFaceBuilder1->Motion()->DeltaXc()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DeltaYc()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->DeltaZc()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->Expression()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->Expression()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurveAngle()->SetRightHandSide("0");
	// 
	// 	admMoveFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurveAngle()->SetRightHandSide("0");
	std::vector<Face *> faces2;
	for (int i = 0; i < faces.size(); i++)
	{
		faces2.push_back((dynamic_cast<Face *>(NXObjectManager::Get(faces[i]))));
	}
	FaceDumbRule *faceDumbRule2;
	faceDumbRule2 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces2);

	std::vector<SelectionIntentRule *> rules4(1);
	rules4[0] = faceDumbRule2;
	admMoveFaceBuilder1->FaceToMove()->FaceCollector()->ReplaceRules(rules4, false);

	Unit *unit1;
	unit1 = admMoveFaceBuilder1->Motion()->RadialOriginDistance()->Units();

	// 	Expression *expression1;
	// 	expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);

	tag_t pt1tag;
	UF_CURVE_create_point(pt1, &pt1tag);
	Point *point1(dynamic_cast<Point *>(NXObjectManager::Get(pt1tag)));
	Xform *nullXform(NULL);
	Point *point2;
	point2 = workPart->Points()->CreatePoint(point1, nullXform, SmartObject::UpdateOptionWithinModeling);

	admMoveFaceBuilder1->Motion()->SetFromPoint(point2);

	// 	Expression *expression2;
	// 	expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);

	tag_t pt2tag;
	UF_CURVE_create_point(pt2, &pt2tag);
	Point *point3(dynamic_cast<Point *>(NXObjectManager::Get(pt2tag)));


	Point *point4;
	point4 = workPart->Points()->CreatePoint(point3, nullXform, SmartObject::UpdateOptionWithinModeling);

	admMoveFaceBuilder1->Motion()->SetToPoint(point4);
	NXObject *nXObject1;
	try
	{
		nXObject1 = admMoveFaceBuilder1->Commit();
		admMoveFaceBuilder1->Destroy();
	}
	catch (exception)
	{
		uc1601("ERR:移动失败!",1);
		tag_t feature_id;
		UF_CALL(UF_MODL_ask_current_feature(UF_ASSEM_ask_work_part(), &feature_id));
		UF_OBJ_delete_object(feature_id);
		UF_OBJ_delete_object(pt1tag);
		UF_OBJ_delete_object(pt2tag);
		return 0;
	}
	UF_OBJ_delete_object(pt1tag);
	UF_OBJ_delete_object(pt2tag);
	return nXObject1->Tag();

}


//点到点复制面
tag_t P2P_copy_face(std::vector<tag_t> faces, double pt1[3], double pt2[3], bool is_sub)
{
	if (faces.empty())
	{
		return false;
	}
	Session *theSession = Session::GetSession();
	Part *workPart(theSession->Parts()->Work());
	Part *displayPart(theSession->Parts()->Display());

	Features::Feature *nullFeatures_Feature(NULL);
	if (!workPart->Preferences()->Modeling()->GetHistoryMode())
	{
		throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
	}

	Features::CopyFaceBuilder  *copyFaceBuilder1;

	copyFaceBuilder1 = workPart->Features()->CreateCopyFaceBuilder(nullFeatures_Feature);

	copyFaceBuilder1->FaceToCopy()->SetRelationScope(511);

	copyFaceBuilder1->Motion()->DistanceAngle()->OrientXpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisPassive);

	copyFaceBuilder1->Motion()->DistanceAngle()->OrientXpress()->SetPlaneOption(GeometricUtilities::OrientXpressBuilder::PlanePassive);

	copyFaceBuilder1->Motion()->AlongCurveAngle()->AlongCurve()->SetPercentUsed(true);

	copyFaceBuilder1->Motion()->OrientXpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisPassive);

	copyFaceBuilder1->Motion()->OrientXpress()->SetPlaneOption(GeometricUtilities::OrientXpressBuilder::PlanePassive);

	copyFaceBuilder1->FaceToCopy()->SetCoplanarEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetCoplanarAxesEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetCoaxialEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetEqualDiameterEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetTangentEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetSymmetricEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetOffsetEnabled(false);

	copyFaceBuilder1->FaceToCopy()->SetUseFaceBrowse(true);

	copyFaceBuilder1->Motion()->SetOption(GeometricUtilities::ModlMotion::OptionsDistanceAngle);


	copyFaceBuilder1->Motion()->SetDeltaEnum(GeometricUtilities::ModlMotion::DeltaReferenceWcsWorkPart);

	copyFaceBuilder1->Motion()->SetOption(GeometricUtilities::ModlMotion::OptionsPointToPoint);


	std::vector<Face *> faces2;
	for (int i = 0; i < faces.size(); i++)
	{
		faces2.push_back((dynamic_cast<Face *>(NXObjectManager::Get(faces[i]))));
	}
	FaceDumbRule *faceDumbRule2;
	faceDumbRule2 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces2);

	std::vector<SelectionIntentRule *> rules4(1);
	rules4[0] = faceDumbRule2;
	copyFaceBuilder1->FaceToCopy()->FaceCollector()->ReplaceRules(rules4, false);

	// 	Unit *unit1;
	// 	unit1 = copyFaceBuilder1->Motion()->RadialOriginDistance()->Units();
	copyFaceBuilder1->SetDoPaste(is_sub);
	tag_t pt1tag;
	UF_CURVE_create_point(pt1, &pt1tag);
	Point *point1(dynamic_cast<Point *>(NXObjectManager::Get(pt1tag)));
	Xform *nullXform(NULL);
	Point *point2;
	point2 = workPart->Points()->CreatePoint(point1, nullXform, SmartObject::UpdateOptionWithinModeling);

	copyFaceBuilder1->Motion()->SetFromPoint(point2);

	tag_t pt2tag;
	UF_CURVE_create_point(pt2, &pt2tag);
	Point *point3(dynamic_cast<Point *>(NXObjectManager::Get(pt2tag)));


	Point *point4;
	point4 = workPart->Points()->CreatePoint(point3, nullXform, SmartObject::UpdateOptionWithinModeling);

	copyFaceBuilder1->Motion()->SetToPoint(point4);
	NXObject *nXObject1;
	try
	{

		nXObject1 = copyFaceBuilder1->Commit();
		copyFaceBuilder1->Destroy();
	}
	catch (exception)
	{
		uc1601("ERR:复制失败!",1);
		
		tag_t feature_id;
		UF_CALL(UF_MODL_ask_current_feature(UF_ASSEM_ask_work_part(), &feature_id));
		
		UF_OBJ_delete_object(feature_id);
		UF_OBJ_delete_object(pt1tag);
		UF_OBJ_delete_object(pt2tag);
		return 0;


	}
	UF_OBJ_delete_object(pt1tag);
	UF_OBJ_delete_object(pt2tag);



	return nXObject1->Tag();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

社恐猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值