UG NX二次开发(C#)-建模-删除面
Posted GimiGimmy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UG NX二次开发(C#)-建模-删除面相关的知识,希望对你有一定的参考价值。
前言
在三维建模后,为了仿真的需要,需要对建好的模型进行简化处理,这时候同步建模的功能就非常有必要了。本文主要介绍一个删除面的操作,这样可以去掉孔面、倒圆角面、倒斜角面,以用于模型仿真的完整性。
一、创建一个UIStyler,用于测试需要
采用UG NX的UIStyler创建一个测试界面,如下图所示。这样创建一个测试UI,以后所有的测试代码都可以快速添加和测试,如果里面的UI不符合要求,仅仅需要重新设计这个UI,并在代码中添加对应的内容即可,方便功能的调试。
二、创建这个测试工程
1.创建TestNX.TestNXSingleFunction测试工程
在VS2019中,按照NXOpen C#模板创建工程,并将UIStyler保存时的TestNX.TestNXSingleFunction.cs文件添加到此工程中。
2.在cs中创建一个方法DeleteFace(Face []faces)
创建DeleteFace,其中输入参数为Face []faces,允许一次删除多个面。
public static void DeleteFace(Face[]faces)
{
NXOpen.Features.Feature nullNXOpen_Features_Feature = null;
NXOpen.Features.DeleteFaceBuilder deleteFaceBuilder1;
deleteFaceBuilder1 = workPart.Features.CreateDeleteFaceBuilder(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);
deleteFaceBuilder1.CapPlane = plane1;
deleteFaceBuilder1.FaceEdgeBlendPreference = NXOpen.Features.DeleteFaceBuilder.FaceEdgeBlendPreferenceOptions.Cliff;
NXOpen.Plane nullNXOpen_Plane = null;
deleteFaceBuilder1.CapPlane = nullNXOpen_Plane;
NXOpen.SelectionIntentRuleOptions selectionIntentRuleOptions1;
selectionIntentRuleOptions1 = workPart.ScRuleFactory.CreateRuleOptions();
selectionIntentRuleOptions1.SetSelectedFromInactive(false);
NXOpen.FaceDumbRule faceDumbRule1;
faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces, selectionIntentRuleOptions1);
selectionIntentRuleOptions1.Dispose();
NXOpen.SelectionIntentRule[] rules1 = new NXOpen.SelectionIntentRule[1];
rules1[0] = faceDumbRule1;
deleteFaceBuilder1.FaceCollector.ReplaceRules(rules1, false);
deleteFaceBuilder1.Type = NXOpen.Features.DeleteFaceBuilder.SelectTypes.Face;
NXOpen.NXObject nXObject1;
nXObject1 = deleteFaceBuilder1.Commit();
deleteFaceBuilder1.Destroy();
plane1.DestroyPlane();
}
3.在TestNX.TestNXSingleFunction.cs文件的UI Block中添加代码
在TestNX.TestNXSingleFunction.cs中,找到public int update_cb( NXOpen.BlockStyler.UIBlock block)中的
else if(block == face_select0),添加下面的代码:
else if(block == face_select0)
{
//---------Enter your code here-----------
TaggedObject[] taggedObjects = face_select0.GetSelectedObjects();
Face[] faces = new Face[0];
foreach(var to in taggedObjects)
{
Array.Resize(ref faces, faces.Length + 1);
faces[faces.Length - 1] = (Face)to;
}
DeleteFace(faces);
}
4. 编译链接生成dll
然后编译连接,生成TestNX.TestNXSingleFunction.dll
三、测试删除面功能
测试效果如下:
以上是关于UG NX二次开发(C#)-建模-删除面的主要内容,如果未能解决你的问题,请参考以下文章
UG NX二次开发(C#)-建模-判断一张面是孔面还是凸台面
UG NX二次开发(C#)--建模--识别曲面类型(圆柱面)
UG NX二次开发(C#)--建模--识别曲面类型(圆柱面)