NX二次开发-C#-建模-创建直线上某点的垂线

  /// <summary>
        /// 创建点与直线的垂直直线
        /// </summary>
        /// <param name="line"></param>
        /// <param name="param"></param>
        /// <param name="degree"></param>
        /// <param name="newLine"></param>
        public static void createLineBasedPointAndPerpendicular(Line line, double param, string degree, out Line newLine)
        {
            newLine = null;
            try
            {
                NXOpen.Session theSession = NXOpen.Session.GetSession();
                NXOpen.Part workPart = theSession.Parts.Work;
                NXOpen.Part displayPart = theSession.Parts.Display;
                // ----------------------------------------------
                //   菜单:插入(S)->曲线(C)->直线和圆弧(A)->直线(点-垂直)(U)...
                // ----------------------------------------------

                NXOpen.Features.AssociativeLine nullNXOpen_Features_AssociativeLine = null;

                NXOpen.Features.AssociativeLineBuilder associativeLineBuilder1;
                associativeLineBuilder1 = workPart.BaseFeatures.CreateAssociativeLineBuilder(nullNXOpen_Features_AssociativeLine);

                NXOpen.Point3d origin1 = new NXOpen.Point3d(0.0, 0.0, 0.0);
                NXOpen.Vector3d normal1 = new NXOpen.Vector3d(0.0, 0.0, 1.0);
                NXOpen.Plane plane1;
                plane1 = workPart.Planes.CreatePlane(origin1, normal1, NXOpen.SmartObject.UpdateOption.WithinModeling);

                NXOpen.Unit unit1;
                unit1 = associativeLineBuilder1.Limits.StartLimit.Distance.Units;

                NXOpen.Expression expression1;
                expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);

                NXOpen.Expression expression2;
                expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);

                associativeLineBuilder1.Limits.StartLimit.Distance.RightHandSide = "10";

                associativeLineBuilder1.Limits.StartLimit.LimitOption = NXOpen.GeometricUtilities.CurveExtendData.LimitOptions.AtPoint;

                associativeLineBuilder1.Limits.StartLimit.Distance.RightHandSide = "0";

                associativeLineBuilder1.Limits.EndLimit.LimitOption = NXOpen.GeometricUtilities.CurveExtendData.LimitOptions.AtPoint;

                associativeLineBuilder1.Limits.EndLimit.Distance.RightHandSide = "0";

                associativeLineBuilder1.StartPointOptions = NXOpen.Features.AssociativeLineBuilder.StartOption.Point;

                associativeLineBuilder1.Limits.FullCircle = false;
                NXOpen.Scalar scalar1;
                scalar1 = workPart.Scalars.CreateScalar(param, NXOpen.Scalar.DimensionalityType.None, NXOpen.SmartObject.UpdateOption.WithinModeling);


                NXOpen.Line line1 = line;
                NXOpen.Point point1;
                point1 = workPart.Points.CreatePoint(line1, scalar1, NXOpen.SmartObject.UpdateOption.WithinModeling);
                associativeLineBuilder1.StartPoint.Value = point1;
                associativeLineBuilder1.EndPointOptions = NXOpen.Features.AssociativeLineBuilder.EndOption.AtAngle;
                associativeLineBuilder1.Limits.EndLimit.LimitOption = NXOpen.GeometricUtilities.CurveExtendData.LimitOptions.Value;
                associativeLineBuilder1.Limits.FullCircle = false;
                associativeLineBuilder1.EndAngle.RightHandSide = degree;
                associativeLineBuilder1.Limits.StartLimit.Distance.RightHandSide = "0";
                associativeLineBuilder1.EndAtAngle.Value = line1;
                associativeLineBuilder1.EndAtAngle.Value = null;
                associativeLineBuilder1.Limits.FullCircle = false;
                associativeLineBuilder1.Limits.StartLimit.Distance.RightHandSide = "-30";
                associativeLineBuilder1.EndAtAngle.Value = line1;
                associativeLineBuilder1.Limits.EndLimit.Distance.RightHandSide = "30";
                associativeLineBuilder1.Associative = true;
                NXOpen.NXObject nXObject1;
                nXObject1 = associativeLineBuilder1.Commit();

                AssociativeLine associativeLine = (AssociativeLine)nXObject1;
                NXObject[] associativeLines = associativeLine.GetEntities();
                newLine = (Line)associativeLines[0];

                associativeLineBuilder1.Destroy();

            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

猜你喜欢

转载自blog.csdn.net/yang19861007/article/details/112243687