UG NX二次开发(C#)-装配-替换组件

Posted GimiGimmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UG NX二次开发(C#)-装配-替换组件相关的知识,希望对你有一定的参考价值。

前言

UG NX装配组件时,如果想用一个组件替换另一个组件时,采用其自身的操作很是方便。在在外部模式下,不打开UG NX软件,就能直接替换组件,就要用到UG NX的二次开发了。本文介绍一下替换组件的代码(C#)。

1、 UG NX替换组件功能演示

打开UG NX的一个装配体模型,如下图所示。

在这个装配体模型中,主装配体模型为2021.prt,我们用一个新的组件文件来替换2021-01部件下的2021-01-01组件。
选择“替换组件”功能,如下图所示。

其弹出的UI界面如下图所示。

在“要替换的组件”组下“选择组件”选择需要替换的组件,

在“替换件”中选择文件或者组件,在文件夹中选择“等径管道1”。

点击“确定”按钮,返回到UI界面中。

点击“确定”按钮。

此时已经用“等径管道1”组件来替换“2021-01-01”组件。

2、 采用UG NX二次开发

其代码如下:

   public static void Replace(Component olderComponent, string newer,string newerFullpath)
        
            NXOpen.Session theSession = NXOpen.Session.GetSession();
            NXOpen.Part workPart = theSession.Parts.Work;
            NXOpen.Part displayPart = theSession.Parts.Display;
            // ----------------------------------------------
            //   菜单:装配(A)->组件(C)->替换组件(E)...
            // ----------------------------------------------
            NXOpen.Session.UndoMarkId markId1;
            markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "起点");

            NXOpen.Assemblies.ReplaceComponentBuilder replaceComponentBuilder1;
            replaceComponentBuilder1 = workPart.AssemblyManager.CreateReplaceComponentBuilder();

            replaceComponentBuilder1.MaintainRelationships = false;

            replaceComponentBuilder1.ComponentNameType = NXOpen.Assemblies.ReplaceComponentBuilder.ComponentNameOption.AsSpecified;

            replaceComponentBuilder1.ComponentName = newer;

            theSession.SetUndoMarkName(markId1, "替换组件 对话框");

            replaceComponentBuilder1.ComponentName = "";

            //NXOpen.Assemblies.Component component1 = ((NXOpen.Assemblies.Component)workPart.ComponentAssembly.RootComponent.FindObject("COMPONENT 2021-01 1"));
            //NXOpen.Assemblies.Component component2 = ((NXOpen.Assemblies.Component)component1.FindObject("COMPONENT 2021-02-01 1"));
            bool added1;
            added1 = replaceComponentBuilder1.ComponentsToReplace.Add(olderComponent);

            //replaceComponentBuilder1.ComponentName = "2021-01-02";

            replaceComponentBuilder1.ComponentName = newer;

            replaceComponentBuilder1.MaintainRelationships = true;

            replaceComponentBuilder1.MaintainRelationships = false;

            replaceComponentBuilder1.ComponentNameType = NXOpen.Assemblies.ReplaceComponentBuilder.ComponentNameOption.Maintain;

            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, "替换组件");

            replaceComponentBuilder1.ReplacementPart = newerFullpath;

            replaceComponentBuilder1.SetComponentReferenceSetType(NXOpen.Assemblies.ReplaceComponentBuilder.ComponentReferenceSet.Maintain, null);

            NXOpen.PartLoadStatus partLoadStatus1;
            partLoadStatus1 = replaceComponentBuilder1.RegisterReplacePartLoadStatus();

            NXOpen.NXObject nXObject1;
            nXObject1 = replaceComponentBuilder1.Commit();

            partLoadStatus1.Dispose();
            theSession.DeleteUndoMark(markId3, null);

            theSession.SetUndoMarkName(markId1, "替换组件");

            replaceComponentBuilder1.Destroy();

            theSession.CleanUpFacetedFacesAndEdges();

        

此代码是通过录制功能来生成的,然后对关键处进行修改,作为一个方法来使用。

以上是关于UG NX二次开发(C#)-装配-替换组件的主要内容,如果未能解决你的问题,请参考以下文章

UG NX二次开发(C#)-装配-替换组件

UG NX二次开发(C#)-装配-删除阵列矩阵

UG NX二次开发(C#)-装配-删除阵列矩阵

UG NX二次开发(C#)-装配-添加组件

UG NX二次开发(C#)-模型干涉检查-UG NX自动干涉检查功能与二次开发思路

UG NX二次开发(C#)-模型处理功能