分割曲线
1、UG NX交互界面的功能介绍
在UG NX的交互界面中,分割曲线的功能在:菜单->编辑->曲线->裁剪,如下图所示。
打开“分割曲线”的功能界面,如下图所示。
通过分割曲线功能,将一条曲线分割为多段曲线,如下图所示。

 
        {
            NXOpen.Session theSession = NXOpen.Session.GetSession();
            NXOpen.Part workPart = theSession.Parts.Work;
            NXOpen.Session.UndoMarkId markId1;
            markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "起点");
            NXOpen.Features.Feature nullNXOpen_Features_Feature = null;
            NXOpen.Features.DivideCurveBuilder divideCurveBuilder1;
            divideCurveBuilder1 = workPart.BaseFeatures.CreateDivideCurveBuilder(nullNXOpen_Features_Feature);
            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 = ((NXOpen.Unit)workPart.UnitCollection.FindObject("MilliMeter"));
            NXOpen.Expression expression1;
            expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);
            NXOpen.Expression expression2;
            expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);
            divideCurveBuilder1.EqualParameterSegments = segmentNumber;
            NXOpen.GeometricUtilities.BoundingObjectBuilder boundingObjectBuilder1;
            boundingObjectBuilder1 = workPart.CreateBoundingObjectBuilder();
            NXOpen.Point3d origin2 = new NXOpen.Point3d(0.0, 0.0, 0.0);
            NXOpen.Vector3d normal2 = new NXOpen.Vector3d(0.0, 0.0, 1.0);
            NXOpen.Plane plane2;
            plane2 = workPart.Planes.CreatePlane(origin2, normal2, NXOpen.SmartObject.UpdateOption.WithinModeling);
            boundingObjectBuilder1.BoundingPlane = plane2;
            NXOpen.Expression expression3;
            expression3 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);
            NXOpen.Expression expression4;
            expression4 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1);
            NXOpen.Plane nullNXOpen_Plane = null;
            boundingObjectBuilder1.BoundingPlane = nullNXOpen_Plane;
            divideCurveBuilder1.BoundingObjects.Append(boundingObjectBuilder1);
            theSession.SetUndoMarkName(markId1, "分割曲线 对话框");
            NXOpen.GeometricUtilities.CurveLocation []curveLocation = curve.GetLocations();          
            NXOpen.Point3d point1 = curveLocation[0].Location;
            divideCurveBuilder1.DividingCurve.SetValue(curve, workPart.ModelingViews.WorkView, point1);
            NXOpen.Session.UndoMarkId markId2;
            markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "分割曲线");
            theSession.DeleteUndoMark(markId2, null);
            NXOpen.Session.UndoMarkId markId3;
            markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "分割曲线");
            NXOpen.NXObject nXObject1;
            nXObject1 = divideCurveBuilder1.Commit();
            NXOpen.NXObject[] objects1;
            objects1 = divideCurveBuilder1.GetCommittedObjects();
            theSession.DeleteUndoMark(markId3, null);
            theSession.SetUndoMarkName(markId1, "分割曲线");
            divideCurveBuilder1.Destroy();
            try
            {
                // 表达式仍然在使用中。
                workPart.Expressions.Delete(expression2);
            }
            catch (NXException ex)
            {
                ex.AssertErrorCode(1050029);
            }
            try
            {
                // 表达式仍然在使用中。
                workPart.Expressions.Delete(expression4);
            }
            catch (NXException ex)
            {
                ex.AssertErrorCode(1050029);
            }
            try
            {
                // 表达式仍然在使用中。
                workPart.Expressions.Delete(expression1);
            }
            catch (NXException ex)
            {
                ex.AssertErrorCode(1050029);
            }
            plane1.DestroyPlane();
            try
            {
                // 表达式仍然在使用中。
                workPart.Expressions.Delete(expression3);
            }
            catch (NXException ex)
            {
                ex.AssertErrorCode(1050029);
            }
            plane2.DestroyPlane();
            NXOpen.Session.UndoMarkId id1;
            id1 = theSession.GetNewestUndoMark(NXOpen.Session.MarkVisibility.Visible);
            int nErrs1;
            nErrs1 = theSession.UpdateManager.DoUpdate(id1);
            theSession.CleanUpFacetedFacesAndEdges();
        }3、测试效果
编制一段测试程序,调用分割曲线的方法,代码如下:
Curve[] curves = workPart.Curves.ToArray();//工作部件的第一条曲线
DivideCurve(curves[0],3);//将曲线分割为3段实现效果如下图所示。
!
[在这里插入图片描述](https://img-blog.csdnimg.cn/b663afdfd6b94db99e2681b05f1b3525.png
                
                










