[UG\ X secondary development] NXOpen point-to-point moving face (admMoveFaceBuilder), point-to-point copying face (copyFaceBuilder)

//Move the surface from point to point
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, & amp;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, & amp;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: Move failed!",1);
tag_t feature_id;
UF_CALL(UF_MODL_ask_current_feature(UF_ASSEM_ask_work_part(), & amp;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();

}


//Copy the surface point to point
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, & amp;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, & amp;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: Copy failed!",1);
\t\t
tag_t feature_id;
UF_CALL(UF_MODL_ask_current_feature(UF_ASSEM_ask_work_part(), & amp;feature_id));
\t\t
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();

}