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#)--建模--识别曲面类型(圆柱面)

UG NX二次开发(C#)-建模-获得点所在的圆弧曲线

UG NX二次开发(C#)-建模-获得NX当前打开的所有part文件

UG NX二次开发(C#)-建模-判断一条曲线是不是封闭