internal static Snap.NX.ProjectCurve CreateProjectCurve(Snap.NX.Curve[] curves, Snap.NX.Point[] points, Snap.NX.Face face) { NXOpen.Part workPart = (NXOpen.Part)Globals.WorkPart; NXOpen.Features.ProjectCurveBuilder featureBuilder = workPart.Features.CreateProjectCurveBuilder(null); featureBuilder.CurveFitData.Tolerance = Globals.DistanceTolerance; featureBuilder.AngleToProjectionVector.RightHandSide = "0"; featureBuilder.SectionToProject.DistanceTolerance = Globals.DistanceTolerance; featureBuilder.SectionToProject.ChainingTolerance = (Globals.UnitType == Globals.Unit.Millimeter) ? 0.02413 : 0.00095; featureBuilder.SectionToProject.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.CurvesAndPoints); featureBuilder.ProjectionDirectionMethod = NXOpen.Features.ProjectCurveBuilder.DirectionType.AlongFaceNormal; Snap.NX.Section sectionToProject = featureBuilder.SectionToProject; sectionToProject.AddICurve(curves); sectionToProject.AddPoints(points); ScCollector collector = workPart.ScCollectors.CreateCollector(); NXOpen.Face[] faces = new NXOpen.Face[] { face }; FaceDumbRule rule = workPart.ScRuleFactory.CreateRuleFaceDumb(faces); SelectionIntentRule[] rules = new SelectionIntentRule[] { rule }; collector.ReplaceRules(rules, false); featureBuilder.FaceToProjectTo.Add(collector); NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.SectionToProject.CleanMappingData(); featureBuilder.Destroy(); return((NXOpen.Features.ProjectCurve)feature); }
/// <summary> /// 获取极限点 /// </summary> /// <param name="measureManager"></param> /// <param name="faces">要进行计算的面</param> /// <param name="measureDirection">第一个方向</param> /// <param name="secondDirection">第二个方向</param> /// <param name="thirdDirection">第三个方向</param> /// <returns>结果点</returns> public static Point3d MeasureExtreme(this MeasureManager measureManager, Face[] faces, Vector3d measureDirection, Vector3d secondDirection, Vector3d thirdDirection) { NXOpen.Unit lengthUnit = WorkPart.UnitCollection.FindObject("MilliMeter"); #if NX12 FaceDumbRule faceDumbRule = (WorkPart as BasePart).ScRuleFactory.CreateRuleFaceDumb(faces); #else FaceDumbRule faceDumbRule = WorkPart.ScRuleFactory.CreateRuleFaceDumb(faces); #endif ScCollector scCollector = WorkPart.ScCollectors.CreateCollector(); scCollector.ReplaceRules(new SelectionIntentRule[] { faceDumbRule }, false); Direction direction1 = WorkPart.Directions.CreateDirection(new Point3d(), measureDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); Direction direction2 = WorkPart.Directions.CreateDirection(new Point3d(), secondDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); Direction direction3 = WorkPart.Directions.CreateDirection(new Point3d(), thirdDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); var facesExtreme = measureManager.NewRectangularExtreme(lengthUnit, direction1, direction2, direction3, scCollector, false); return(facesExtreme.Point); }
internal static Snap.NX.ExtractFace CreateExtractFace(Snap.NX.Face[] faces) { NXOpen.Part workPart = (NXOpen.Part)Globals.WorkPart; NXOpen.Features.ExtractFaceBuilder featureBuilder = workPart.Features.CreateExtractFaceBuilder(null); featureBuilder.FaceOption = NXOpen.Features.ExtractFaceBuilder.FaceOptionType.FaceChain; NXOpen.Face[] faceArray = new NXOpen.Face[faces.Length]; for (int i = 0; i < faces.Length; i++) { faceArray[i] = (NXOpen.Face)faces[i]; } FaceDumbRule rule = workPart.ScRuleFactory.CreateRuleFaceDumb(faceArray); SelectionIntentRule[] rules = new SelectionIntentRule[] { rule }; featureBuilder.FaceChain.ReplaceRules(rules, false); NXOpen.Features.ExtractFace extract = (NXOpen.Features.ExtractFace)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.Destroy(); return(new Snap.NX.ExtractFace(extract)); }
internal static Snap.NX.ProjectCurve CreateProjectCurve2(Snap.NX.Curve[] curves, Snap.NX.Point[] points, Snap.NX.Face face) { NXOpen.Part work = Globals.Session.Parts.Work; NXOpen.Features.ProjectCurveBuilder featureBuilder = work.Features.CreateProjectCurveBuilder(null); featureBuilder.CurveFitData.Tolerance = Globals.DistanceTolerance; featureBuilder.AngleToProjectionVector.RightHandSide = "0"; featureBuilder.SectionToProject.DistanceTolerance = Globals.DistanceTolerance; featureBuilder.SectionToProject.ChainingTolerance = (Globals.UnitType == Globals.Unit.Millimeter) ? 0.02413 : 0.00095; featureBuilder.SectionToProject.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.CurvesAndPoints); if (curves != null) { Snap.NX.Section sectionToProject = featureBuilder.SectionToProject; for (int i = 0; i < curves.Length; i++) { sectionToProject.AddICurve(new Snap.NX.ICurve[] { curves[i] }); } } if (points != null) { NXOpen.Point[] pointArray = new NXOpen.Point[points.Length]; for (int j = 0; j < pointArray.Length; j++) { pointArray[j] = (NXOpen.Point)points[j]; } CurveDumbRule rule = work.ScRuleFactory.CreateRuleCurveDumbFromPoints(pointArray); featureBuilder.SectionToProject.AllowSelfIntersection(true); SelectionIntentRule[] ruleArray = new SelectionIntentRule[] { rule }; Point3d helpPoint = new Point3d(0.0, 0.0, 0.0); featureBuilder.SectionToProject.AddToSection(ruleArray, null, null, null, helpPoint, NXOpen.Section.Mode.Create, false); } ScCollector collector = work.ScCollectors.CreateCollector(); NXOpen.Face[] faces = new NXOpen.Face[] { face }; FaceDumbRule rule2 = work.ScRuleFactory.CreateRuleFaceDumb(faces); SelectionIntentRule[] rules = new SelectionIntentRule[] { rule2 }; collector.ReplaceRules(rules, false); featureBuilder.FaceToProjectTo.Add(collector); NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.SectionToProject.CleanMappingData(); featureBuilder.Destroy(); return((NXOpen.Features.ProjectCurve)feature); }