//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(); }