0
点赞
收藏
分享

微信扫一扫

UG NX二次开发(C#)-建模-分割曲线

分割曲线

1、UG NX交互界面的功能介绍

在UG NX的交互界面中,分割曲线的功能在:菜单->编辑->曲线->裁剪,如下图所示。
UG NX二次开发(C#)-建模-分割曲线_UG NX二次开发

打开“分割曲线”的功能界面,如下图所示。
UG NX二次开发(C#)-建模-分割曲线_ide_02

通过分割曲线功能,将一条曲线分割为多段曲线,如下图所示。
UG NX二次开发(C#)-建模-分割曲线_d3_03

UG NX二次开发(C#)-建模-分割曲线_d3_04
![在这里插入图片描述](https://img-blog.csdnimg.cn/327c37ea19e14ee1841702af962782af.png

2、UG NX二次开发代码

采用UG NX二次开发来实现这个功能,最简单的方法是采用录制并修改录制代码,并将其作为一个方法来使用。修改后的代码如下:

/// <summary>
/// 分割曲线
/// </summary>
/// <param name="curve">分割曲线的对象</param>
/// <param name="segmentNumber">将曲线分割的段数</param>
public static void DivideCurve(Curve curve,int segmentNumber)
{
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段

实现效果如下图所示。
UG NX二次开发(C#)-建模-分割曲线_d3_05

UG NX二次开发(C#)-建模-分割曲线_UG NX二次开发_06!

[在这里插入图片描述](https://img-blog.csdnimg.cn/b663afdfd6b94db99e2681b05f1b3525.png


举报

相关推荐

0 条评论