Exemplo n.º 1
0
        /// <summary>
        /// 投影曲线
        /// </summary>
        /// <param name="features"></param>
        /// <param name="curves">要投影的曲线</param>
        /// <param name="originPoint">投影平面原点</param>
        /// <param name="normal">投影方向</param>
        /// <returns></returns>
        public static ProjectCurve CreateProjectCurve(this FeatureCollection features, IBaseCurve[] curves, Point3d originPoint, Vector3d normal)
        {
            NXOpen.Features.ProjectCurveBuilder projectCurveBuilder = features.CreateProjectCurveBuilder(null);
            Plane plane1 = WorkPart.Planes.CreatePlane(originPoint, normal, NXOpen.SmartObject.UpdateOption.WithinModeling);

            plane1.SetMethod(NXOpen.PlaneTypes.MethodType.Distance);
            plane1.SetFlip(false);
            plane1.SetReverseSide(false);
            plane1.SetAlternate(NXOpen.PlaneTypes.AlternateType.One);
            plane1.Evaluate();
            projectCurveBuilder.PlaneToProjectTo                      = plane1;
            projectCurveBuilder.CurveFitData.Tolerance                = 0.025;
            projectCurveBuilder.CurveFitData.AngleTolerance           = 0.5;
            projectCurveBuilder.ProjectionOption                      = NXOpen.Features.ProjectCurveBuilder.ProjectionOptionType.ProjectBothSides;
            projectCurveBuilder.AngleToProjectionVector.RightHandSide = "0";
            projectCurveBuilder.SectionToProject.DistanceTolerance    = 0.025;
            projectCurveBuilder.SectionToProject.ChainingTolerance    = 0.02375;
            projectCurveBuilder.SectionToProject.AngleTolerance       = 0.5;
            projectCurveBuilder.SectionToProject.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.CurvesAndPoints);
#if NX12
            CurveDumbRule curveFeatureRule1 = (WorkPart as BasePart).ScRuleFactory.CreateRuleBaseCurveDumb(curves);
#else
            CurveDumbRule curveFeatureRule1 = WorkPart.ScRuleFactory.CreateRuleBaseCurveDumb(curves);
#endif
            projectCurveBuilder.SectionToProject.AllowSelfIntersection(true);
            SelectionIntentRule[] rules1 = new SelectionIntentRule[1] {
                curveFeatureRule1
            };
            Point3d helpPoint1 = new Point3d(1614.13079321387, -713.841520793069, 769.877304064383);
            projectCurveBuilder.SectionToProject.AddToSection(rules1, (NXObject)curves[0], null, null, helpPoint1, NXOpen.Section.Mode.Create, false);
            ProjectCurve projectCurve = (ProjectCurve)projectCurveBuilder.CommitFeature();
            projectCurveBuilder.SectionToProject.CleanMappingData();
            projectCurveBuilder.Destroy();
            return(projectCurve);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取极限点
        /// </summary>
        /// <param name="measureManager"></param>
        /// <param name="curves">要计算的曲线</param>
        /// <param name="measureDirection">测量方向</param>
        /// <param name="secondDirection">第二方向,以防在第一个方向上出现多个极值点</param>
        /// <param name="thirdDirection">第三方向</param>
        /// <returns>极限点</returns>
        public static Point3d MeasureExtreme(this MeasureManager measureManager, IBaseCurve[] curves, Vector3d measureDirection, Vector3d secondDirection, Vector3d thirdDirection)
        {
            NXOpen.Unit unit1      = WorkPart.UnitCollection.FindObject("MilliMeter");
            Point3d     origin1    = new Point3d(0.0, 0.0, 0.0);
            Direction   direction1 = WorkPart.Directions.CreateDirection(origin1, measureDirection, NXOpen.SmartObject.UpdateOption.WithinModeling);
            Direction   direction2 = WorkPart.Directions.CreateDirection(origin1, secondDirection, NXOpen.SmartObject.UpdateOption.WithinModeling);
            Direction   direction3 = WorkPart.Directions.CreateDirection(origin1, thirdDirection, NXOpen.SmartObject.UpdateOption.WithinModeling);
            ScCollector scCollector1;

            scCollector1 = WorkPart.ScCollectors.CreateCollector();

            CurveDumbRule curveDumbRule1 = WorkPart.ScRuleFactory.CreateRuleBaseCurveDumb(curves);

            SelectionIntentRule[] rules1 = new SelectionIntentRule[1] {
                curveDumbRule1
            };
            scCollector1.ReplaceRules(rules1, false);
            MeasureRectangularExtreme extreme = WorkPart.MeasureManager.NewRectangularExtreme(unit1, direction1, direction2, direction3, scCollector1, false);

            Point3d extremePoint = extreme.Point;

            int nErrs1 = TheSession.UpdateManager.AddToDeleteList(direction1);

            scCollector1.Destroy();

            return(extremePoint);
        }
Exemplo n.º 3
0
        internal static SelectionIntentRule[] CreateSelectionIntentRule(params Snap.NX.ICurve[] icurves)
        {
            List <SelectionIntentRule> list = new List <SelectionIntentRule>();

            for (int i = 0; i < icurves.Length; i++)
            {
                if (icurves[i] is Snap.NX.Curve)
                {
                    NXOpen.Curve[]        curves    = new NXOpen.Curve[] { icurves[i] as Snap.NX.Curve };
                    CurveDumbRule         rule      = Globals.NXOpenWorkPart.ScRuleFactory.CreateRuleCurveDumb(curves);
                    SelectionIntentRule[] ruleArray = new SelectionIntentRule[] { rule };
                    for (int j = 0; j < ruleArray.Length; j++)
                    {
                        list.Add(ruleArray[j]);
                    }
                }
                else
                {
                    NXOpen.Edge[]         edges      = new NXOpen.Edge[] { icurves[i] as Snap.NX.Edge };
                    EdgeDumbRule          rule2      = Globals.NXOpenWorkPart.ScRuleFactory.CreateRuleEdgeDumb(edges);
                    SelectionIntentRule[] ruleArray2 = new SelectionIntentRule[] { rule2 };
                    for (int k = 0; k < ruleArray2.Length; k++)
                    {
                        list.Add(ruleArray2[k]);
                    }
                }
            }
            return(list.ToArray());
        }
Exemplo n.º 4
0
        /// <summary>
        /// 抽取曲线
        /// </summary>
        /// <param name="features"></param>
        /// <param name="curves"></param>
        /// <param name="associative"></param>
        /// <returns></returns>
        public static CompositeCurve CreateExtractGeometry(this FeatureCollection features, IBaseCurve[] curves, bool associative = false)
        {
            NXOpen.Features.CompositeCurveBuilder compositeCurveBuilder1 = _workPart.Features.CreateCompositeCurveBuilder(null);
            compositeCurveBuilder1.Tolerance                 = 0.01;
            compositeCurveBuilder1.Associative               = associative;
            compositeCurveBuilder1.FixAtCurrentTimestamp     = true;
            compositeCurveBuilder1.JoinOption                = NXOpen.Features.CompositeCurveBuilder.JoinMethod.Genernal;
            compositeCurveBuilder1.ParentPart                = NXOpen.Features.CompositeCurveBuilder.PartType.WorkPart;
            compositeCurveBuilder1.Section.DistanceTolerance = 0.01;
            compositeCurveBuilder1.Section.ChainingTolerance = 0.0095;
            compositeCurveBuilder1.HideOriginal              = false;
            compositeCurveBuilder1.InheritDisplayProperties  = false;
            compositeCurveBuilder1.Section.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.CurvesAndPoints);

            CurveDumbRule curveDumbRule1 = _workPart.ScRuleFactory.CreateRuleBaseCurveDumb(curves);

            compositeCurveBuilder1.Section.AllowSelfIntersection(false);
            SelectionIntentRule[] rules1 = new SelectionIntentRule[1] {
                curveDumbRule1
            };
            Point3d helpPoint1 = new Point3d(1885.57193958882, -793.938033503939, 819.818721208804);

            compositeCurveBuilder1.Section.AddToSection(rules1, curves[0] as NXObject, null, null, helpPoint1, NXOpen.Section.Mode.Create, false);
            CompositeCurve compositeCurve = (CompositeCurve)compositeCurveBuilder1.CommitFeature();

            compositeCurveBuilder1.Destroy();
            return(compositeCurve);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 创建单边偏置的拉伸
        /// </summary>
        /// <param name="features"></param>
        /// <param name="curves"></param>
        /// <param name="extrudeDirection"></param>
        /// <param name="startDistance"></param>
        /// <param name="endDistance"></param>
        /// <param name="bodyStyle"></param>
        /// <param name="offsetValue"></param>
        /// <returns></returns>
        public static Extrude CreateExtrude(this FeatureCollection features, IBaseCurve[] curves, Vector3d extrudeDirection, double startDistance, double endDistance, NXOpen.GeometricUtilities.FeatureOptions.BodyStyle bodyStyle, double offsetValue)
        {
            NXOpen.Features.ExtrudeBuilder extrudeBuilder = features.CreateExtrudeBuilder(null);

            Section section1 = WorkPart.Sections.CreateSection(0.0095, 0.01, 0.5);

            extrudeBuilder.Section = section1;

            extrudeBuilder.AllowSelfIntersectingSection(true);

            extrudeBuilder.BooleanOperation.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Create;

            extrudeBuilder.Offset.Option = NXOpen.GeometricUtilities.Type.SingleOffset;

            extrudeBuilder.Offset.EndOffset.Value = offsetValue;

            extrudeBuilder.Draft.DraftOption = NXOpen.GeometricUtilities.SimpleDraft.SimpleDraftType.NoDraft;

            extrudeBuilder.FeatureOptions.BodyType = bodyStyle;

            section1.DistanceTolerance = 0.01;

            section1.ChainingTolerance = 0.0095;

            section1.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.OnlyCurves);

            extrudeBuilder.Direction = WorkPart.Directions.CreateDirection(new Point3d(0.0, 0.0, 0.0), extrudeDirection, NXOpen.SmartObject.UpdateOption.WithinModeling);

#if NX12
            CurveDumbRule curveDumbRule = (WorkPart as BasePart).ScRuleFactory.CreateRuleBaseCurveDumb(curves);
#else
            CurveDumbRule curveDumbRule = WorkPart.ScRuleFactory.CreateRuleBaseCurveDumb(curves);
#endif
            section1.AllowSelfIntersection(true);

            SelectionIntentRule[] rules1 = new SelectionIntentRule[1] {
                curveDumbRule
            };

            section1.AddToSection(rules1, (NXObject)curves[0], null, null, new Point3d(0, 0, 0), NXOpen.Section.Mode.Create, false);

            extrudeBuilder.Limits.StartExtend.TrimType = NXOpen.GeometricUtilities.Extend.ExtendType.Value;

            extrudeBuilder.Limits.EndExtend.TrimType = NXOpen.GeometricUtilities.Extend.ExtendType.Value;

            extrudeBuilder.Limits.EndExtend.Value.RightHandSide = endDistance.ToString();

            extrudeBuilder.Limits.StartExtend.Value.RightHandSide = startDistance.ToString();

            extrudeBuilder.ParentFeatureInternal = false;

            Extrude extrude = (Extrude)extrudeBuilder.CommitFeature();
            extrudeBuilder.Destroy();
            return(extrude);
        }
Exemplo n.º 6
0
        private void CreateExtrude(int layerNr)
        {
            // Create Section
            NXObject[] myObjcts  = mySketch.GetAllGeometry();
            Section    mySection = workPart.Sections.CreateSection(0.00095, 0.001, 0.05);

            foreach (NXObject obj in myObjcts)
            {
                if (obj.GetType().ToString() == "NXOpen.Line")
                {
                    Curve[]               curves   = { (Curve)obj };
                    CurveDumbRule         dumbrule = workPart.ScRuleFactory.CreateRuleCurveDumb(curves);
                    SelectionIntentRule[] rules    = { dumbrule };
                    mySection.AddToSection(rules, null, null, null, new Point3d(0, 0, 0), Section.Mode.Create, false);
                }
            }

            // Create extrude
            Point3d  origin = new Point3d(0, 0, 0);
            Vector3d axisZ  = new Vector3d(0, 0, 1);

            SmartObject.UpdateOption updateOption = SmartObject.UpdateOption.DontUpdate;

            ExtrudeBuilder extrudeBuilder = workPart.Features.CreateExtrudeBuilder(null);

            extrudeBuilder.Section   = mySection;
            extrudeBuilder.Direction = workPart.Directions.CreateDirection(origin, axisZ, updateOption);
            extrudeBuilder.AllowSelfIntersectingSection(true);
            extrudeBuilder.DistanceTolerance = 0.001;
            extrudeBuilder.Limits.StartExtend.Value.RightHandSide = "0";
            extrudeBuilder.Limits.EndExtend.Value.RightHandSide   = layerHeight.ToString();

            Extrude myExtrude;

            if (previousExtrude != null)
            {
                extrudeBuilder.BooleanOperation.Type = BooleanOperation.BooleanType.Unite;
                //extrudeBuilder.BooleanOperation.SetBooleanOperationAndBody(BooleanOperation.BooleanType.Unite, );
                myExtrude = (Extrude)extrudeBuilder.Commit();
                extrudeBuilder.Destroy();
            }
            else
            {
                extrudeBuilder.BooleanOperation.Type = BooleanOperation.BooleanType.Create;
                myExtrude = (Extrude)extrudeBuilder.Commit();
                extrudeBuilder.Destroy();
            }

            myExtrude.SetName("Extrude_Layer_" + layerNr.ToString());

            DisplayableObject[] objects = { mySketch };
            theSession.DisplayManager.BlankObjects(objects);    // hide sketch
        }
Exemplo n.º 7
0
        internal static SelectionIntentRule[] CreateSelectionIntentRule(params Snap.NX.Point[] points)
        {
            if (points == null)
            {
                return(null);
            }
            NXOpen.Point[] pointArray = new NXOpen.Point[points.Length];
            for (int i = 0; i < pointArray.Length; i++)
            {
                pointArray[i] = (NXOpen.Point)points[i];
            }
            CurveDumbRule rule = Globals.NXOpenWorkPart.ScRuleFactory.CreateRuleCurveDumbFromPoints(pointArray);

            return(new SelectionIntentRule[] { rule });
        }
Exemplo n.º 8
0
        public Tag CreateSheet()
        {
            UFSession    ufsession    = UFSession.GetUFSession();
            Point3d      point3d      = V2.MidPoint3d(V3);
            Session      session      = Session.GetSession();
            Part         work         = session.Parts.Work;
            RuledBuilder ruledBuilder = work.Features.CreateRuledBuilder(null);

#if NX12
            CurveDumbRule curveDumbRule = (work as BasePart).ScRuleFactory.CreateRuleCurveDumbFromPoints(new Point[] { work.Points.CreatePoint(V1) });
#else
            CurveDumbRule curveDumbRule = work.ScRuleFactory.CreateRuleCurveDumbFromPoints(new Point[] { work.Points.CreatePoint(V1) });
#endif

            ruledBuilder.FirstSection.AddToSection(new SelectionIntentRule[]
            {
                curveDumbRule
            }, null, null, null, default(Point3d), Section.Mode.Create, false);
            Line line = work.Curves.CreateLine(V2, V3);
#if NX12
            CurveDumbRule curveDumbRule2 = (work as BasePart).ScRuleFactory.CreateRuleCurveDumb(new Curve[] { line });
#else
            CurveDumbRule curveDumbRule2 = work.ScRuleFactory.CreateRuleCurveDumb(new Curve[]
                                                                                  { line });
#endif
            ruledBuilder.SecondSection.AddToSection(new SelectionIntentRule[]
            {
                curveDumbRule2
            }, null, null, null, default(Point3d), Section.Mode.Create, false);
            ruledBuilder.PositionTolerance         = 0.001;
            ruledBuilder.AlignmentMethod.AlignType = AlignmentMethodBuilder.Type.SpineCurve;
            ruledBuilder.AlignmentMethod.AlignCurve.DistanceTolerance = 0.01;
            ruledBuilder.FirstSection.DistanceTolerance  = 0.01;
            ruledBuilder.SecondSection.DistanceTolerance = 0.01;
            ruledBuilder.FirstSection.SetAllowedEntityTypes(Section.AllowTypes.CurvesAndPoints);
            ruledBuilder.SecondSection.SetAllowedEntityTypes(Section.AllowTypes.CurvesAndPoints);
            NXObject nxobject = ruledBuilder.Commit();
            Ruled    ruled    = nxobject as Ruled;
            Body     body     = (ruled != null) ? ruled.GetBodies()[0] : null;
            ufsession.Modl.DeleteBodyParms(new Tag[]
            {
                body.Tag
            });
            line.Delete();
            return(body.Tag);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        internal static Snap.NX.ProjectCurve CreateProjectCurve2(Snap.NX.DatumPlane datumPlane, Snap.NX.Curve[] curves, Snap.NX.Point[] points)
        {
            NXOpen.Part work = Globals.Session.Parts.Work;
            NXOpen.Features.ProjectCurveBuilder featureBuilder = work.Features.CreateProjectCurveBuilder(null);
            //featureBuilder.CurveFitData.Tolerance = Globals.DistanceTolerance;
            featureBuilder.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.SectionEx.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[] rules = new SelectionIntentRule[] { rule };
                Point3d helpPoint           = new Point3d(0.0, 0.0, 0.0);
                featureBuilder.SectionToProject.AddToSection(rules, null, null, null, helpPoint, NXOpen.Section.Mode.Create, false);
            }
            Position origin = datumPlane.Origin;
            Vector   normal = datumPlane.Normal;

            NXOpen.Plane plane = Globals.NXOpenWorkPart.Planes.CreatePlane((Point3d)origin, (Vector3d)normal, SmartObject.UpdateOption.WithinModeling);
            featureBuilder.PlaneToProjectTo = plane;
            NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder);
            featureBuilder.SectionToProject.CleanMappingData();
            featureBuilder.Destroy();
            return((NXOpen.Features.ProjectCurve)feature);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 创建有界平面
        /// </summary>
        /// <param name="featureCollection"></param>
        /// <param name="boundingCurves"></param>
        /// <returns></returns>
        public static BoundedPlane CreateBoundedPlane(this FeatureCollection featureCollection, IBaseCurve[] boundingCurves)
        {
            if (boundingCurves.Length != 0)
            {
                BoundedPlaneBuilder boundedPlaneBuilder = _workPart.Features.CreateBoundedPlaneBuilder(null);

                boundedPlaneBuilder.BoundingCurves.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.OnlyCurves);

                CurveDumbRule curveDumbRule1 = _workPart.ScRuleFactory.CreateRuleBaseCurveDumb(boundingCurves);

                boundedPlaneBuilder.BoundingCurves.AllowSelfIntersection(true);

                NXOpen.SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
                rules1[0] = curveDumbRule1;
                boundedPlaneBuilder.BoundingCurves.AddToSection(rules1, boundingCurves[0] as NXObject, null, null, new Point3d(), Section.Mode.Create, false);

                BoundedPlane nXObject1 = (BoundedPlane)boundedPlaneBuilder.Commit();

                boundedPlaneBuilder.Destroy();

                return(nXObject1);
            }
            return(null);
        }