• UG NX二次开发(C#)-外部模式-导出dwg格式的文件


    前言

    UG NX是大型CAD软件,也提供了二维制图功能,当我们想采用外部模式导出标准视图的二维制图时,可以通过UG NX提供的二次开发函数来完成。下面介绍下导出二维制图的二次开发方法。

    建立一个新的工程

    在VS中根据UG NX的编程模板建立一个工程,命名为ExportDwgFile
    在这里插入图片描述

    点击确定,进入下一个页面。
    在这里插入图片描述
    点击Next,在下面的页面中选择exe
    在这里插入图片描述

    点击Next,进入下一个页面。选择Automatically,when the application completes。
    在这里插入图片描述
    这样一个工程就建好了,如下图所示。
    在这里插入图片描述

    UG NX录制代码

    打开UG NX1984,新建一个模型,如下图所示。
    在这里插入图片描述
    在“开发人员”菜单下,选择“录制”。
    在这里插入图片描述

    在文件-》导出-》导出AutoCAD DXF/DWG文件,弹出如下图所示对话框
    在这里插入图片描述
    设置输出的dwg文件名称和地址。
    如果有其他设置,自己设置,我这里直接点击完成,就生成了一个dwg文件。
    点击“停止录制”。

    将导出dwg格式文件的录制代码复制到cs文件中

    在这里插入图片描述
    并将其设置为一个方法,ExportDwgFunction。

    public static void ExportDwgFunction()
        {
            NXOpen.Session theSession = NXOpen.Session.GetSession();
            NXOpen.Part workPart = theSession.Parts.Work;
            NXOpen.Part displayPart = theSession.Parts.Display;
            // ----------------------------------------------
            //   菜单:文件(F)->导出(E)->AutoCAD DXF/DWG...
            // ----------------------------------------------
            NXOpen.Session.UndoMarkId markId1;
            markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "起点");
    
            NXOpen.DxfdwgCreator dxfdwgCreator1;
            dxfdwgCreator1 = theSession.DexManager.CreateDxfdwgCreator();
    
            dxfdwgCreator1.ExportData = NXOpen.DxfdwgCreator.ExportDataOption.Drawing;
    
            dxfdwgCreator1.AutoCADRevision = NXOpen.DxfdwgCreator.AutoCADRevisionOptions.R2004;
    
            dxfdwgCreator1.ViewEditMode = true;
    
            dxfdwgCreator1.FlattenAssembly = true;
    
            dxfdwgCreator1.ExportScaleValue = 1.0;
    
            dxfdwgCreator1.FlattenAssembly = false;
    
            dxfdwgCreator1.OutputFileType = NXOpen.DxfdwgCreator.OutputFileTypeOption.Dwg;
    
            dxfdwgCreator1.InputFile = "C:\\temp\\_model1.prt";
    
            dxfdwgCreator1.ExportData = NXOpen.DxfdwgCreator.ExportDataOption.Modeling;
    
            theSession.SetUndoMarkName(markId1, "导出 AutoCAD DXF/DWG 文件 对话框");
    
            NXOpen.Session.UndoMarkId markId2;
            markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "导出 AutoCAD DXF/DWG 文件");
    
            theSession.DeleteUndoMark(markId2, null);
    
            NXOpen.Session.UndoMarkId markId3;
            markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "导出 AutoCAD DXF/DWG 文件");
    
            dxfdwgCreator1.OutputFile = "D:\\_model1.dwg";
    
            dxfdwgCreator1.WidthFactorMode = NXOpen.DxfdwgCreator.WidthfactorMethodOptions.AutomaticCalculation;
    
            dxfdwgCreator1.LayerMask = "1-256";
    
            dxfdwgCreator1.DrawingList = "_ALL_";
    
            dxfdwgCreator1.ViewList = "Trimetric";
    
            dxfdwgCreator1.ProcessHoldFlag = true;
    
            NXOpen.NXObject nXObject1;
            nXObject1 = dxfdwgCreator1.Commit();
    
            theSession.DeleteUndoMark(markId3, null);
    
            dxfdwgCreator1.Destroy();
    
            // ----------------------------------------------
            //   菜单:工具(T)->操作记录(J)->停止录制(S)
            // ----------------------------------------------
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    修改录制代码

    在这里,代码是不能直接用的,需要修改代码。
    因为是一个方法,其实带参数的,我们设置为两个参数:

    1)工作部件workpart的文件字符串
    2)导出的文件字符串
    即:

     public static void ExportDwgFunction(string partFile, string dwgFile)
        {
    
    • 1
    • 2

    在代码中,修改如下:

    public static void ExportDwgFunction(string partFile, string dwgFile)
        {
            NXOpen.Session theSession = NXOpen.Session.GetSession();
            NXOpen.Part workPart = theSession.Parts.Work;
            NXOpen.Part displayPart = theSession.Parts.Display;
            // ----------------------------------------------
            //   菜单:文件(F)->导出(E)->AutoCAD DXF/DWG...
            // ----------------------------------------------
            NXOpen.Session.UndoMarkId markId1;
            markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "起点");
    
            NXOpen.DxfdwgCreator dxfdwgCreator1;
            dxfdwgCreator1 = theSession.DexManager.CreateDxfdwgCreator();
    
            dxfdwgCreator1.ExportData = NXOpen.DxfdwgCreator.ExportDataOption.Drawing;
    
            dxfdwgCreator1.AutoCADRevision = NXOpen.DxfdwgCreator.AutoCADRevisionOptions.R2004;
    
            dxfdwgCreator1.ViewEditMode = true;
    
            dxfdwgCreator1.FlattenAssembly = true;
    
            dxfdwgCreator1.ExportScaleValue = 1.0;
    
            dxfdwgCreator1.FlattenAssembly = false;
    
            dxfdwgCreator1.OutputFileType = NXOpen.DxfdwgCreator.OutputFileTypeOption.Dwg;
    
            dxfdwgCreator1.InputFile = partFile;
    
            //dxfdwgCreator1.InputFile = "C:\\temp\\_model1.prt";
    
            dxfdwgCreator1.ExportData = NXOpen.DxfdwgCreator.ExportDataOption.Modeling;
    
            theSession.SetUndoMarkName(markId1, "导出 AutoCAD DXF/DWG 文件 对话框");
    
            NXOpen.Session.UndoMarkId markId2;
            markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "导出 AutoCAD DXF/DWG 文件");
    
            theSession.DeleteUndoMark(markId2, null);
    
            NXOpen.Session.UndoMarkId markId3;
            markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "导出 AutoCAD DXF/DWG 文件");
    
            dxfdwgCreator1.OutputFile = dwgFile;
            //dxfdwgCreator1.OutputFile = "D:\\_model1.dwg";
    
            dxfdwgCreator1.WidthFactorMode = NXOpen.DxfdwgCreator.WidthfactorMethodOptions.AutomaticCalculation;
    
            dxfdwgCreator1.LayerMask = "1-256";
    
            dxfdwgCreator1.DrawingList = "_ALL_";
    
            dxfdwgCreator1.ViewList = "Trimetric";
    
            dxfdwgCreator1.ProcessHoldFlag = true;
    
            NXOpen.NXObject nXObject1;
            nXObject1 = dxfdwgCreator1.Commit();
    
            theSession.DeleteUndoMark(markId3, null);
    
            dxfdwgCreator1.Destroy();
    
            // ----------------------------------------------
            //   菜单:工具(T)->操作记录(J)->停止录制(S)
            // ----------------------------------------------
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    这样就完成了导出dwg文件方法的编写

    调用方法

    在 public static int Main(string[] args)中添加如下代码

     public static int Main(string[] args)
        {
            int retValue = 0;
            try
            {
                theProgram = new Program();
    
                //TODO: Add your application code here 
    
                string partFile = args[0];
                string dwgFile = args[1];
    
                Tag workPartTag;
                UFPart.LoadStatus loadStatus;
                theUFSession.Part.Open(partFile,out workPartTag,out loadStatus);
                Part workPart = theSession.Parts.Work;
    
                ExportDwgFunction(partFile,dwgFile);
    
                theUFSession.Part.CloseAll();
    
                theProgram.Dispose();
            }
            catch (NXOpen.NXException ex)
            {
                // ---- Enter your exception handling code here -----
    
            }
            return retValue;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    生成exe

    点击生成,生成exe。
    在这里插入图片描述

    测试

    打开cmd,调用程序和输入参数
    在这里插入图片描述
    结果生如下:

    在这里插入图片描述
    说明生成成功。

  • 相关阅读:
    java - 包装类
    基于Kinect 动捕XR直播解决方案 - 硬件篇
    在vue项目中使用electron
    140.【鸿蒙OS开发-01】
    统计能整除数字的位数
    信息学奥赛一本通:1156:求π的值
    25 kafka消费者组重平衡
    QT基础教学(窗口组件)
    剑指 Offer II 013. 二维子矩阵的和(Java)
    【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)
  • 原文地址:https://blog.csdn.net/yang19861007/article/details/126025589