UG NX二次开发——NXOpen C++/Python API入门与自动化实例
一、UG NX二次开发概述UG NX二次开发(Customization & Automation)是扩展NX功能、提升设计效率的核心手段。NXOpen是Siemens官方提供的API体系,包含C++托管API(基于.NET框架,适合C#/VB.NET调用)、C++非托管API(直接调用底层函数,性能最优)和Python API(通过NX Journal录制和回放)。SNAP(Simple NX Application Programming)是一套简化版API,语法更友好,适合快速原型开发。知识融合KF(Knowledge Fusion)通过规则引擎实现设计知识的数字化封装。Grip(Graphics Interactive Programming)是NX的遗留编程语言,虽有历史存量代码但仍被支持。典型应用场景包括:批量建模(参数化生成系列零件)、自动出图(一键生成多张工程图并导出PDF)、数据抽取(提取BOM表、质量、材料属性写入Excel/数据库)、CAE流程自动化(自动划分网格→提交求解→提取结果→生成报告)。
二、开发环境搭建C++开发环境搭建步骤:安装Visual Studio 2017/2019/2022(需与NX版本匹配),新建C++控制台或DLL项目,在项目属性中配置附加包含目录指向NX安装路径下的UGOPEN文件夹(含头文件uf.h、uf_modl.h等),附加库目录指向UGOPEN,附加依赖项添加libnxopenuicpp.lib(UI相关)和libnxopencpp.lib(核心API)。链接器输入中补充libufun.lib和libugopenint.lib。Python环境更为简便:NX内置Python解释器,无需额外安装。通过菜单栏Tools→Journal→Record(录制)启动录制模式,在NX中执行任意建模操作后点击Stop Recording,系统自动生成.py文件,记录了每一步操作的API调用(如创建块→workPart.Features.CreateBlock...)。录制的Journal可直接回放(Play)重现操作,也可作为模板修改参数后转化为自动化脚本。
三、C++ NXOpen基础C++ NXOpen编程的核心入口为Session类,通过Session::GetSession()获取当前NX会话句柄。PartCollection管理所有打开的部件,WorkPart指向当前激活的部件。UFun(User Function)是更底层的C函数库,通过UF_MODL_create_block1等函数直接创建特征。几何数据类型包括Point3d(三维坐标点)和Vector3d(方向向量),创建长方体需指定原点坐标和长宽高方向矢量。示例代码创建100x50x30mm块体:先定义原点Point3d(0,0,0)、尺寸Vector3d(100,50,30),调用UF_MODL_create_block1完成。同理可创建圆柱(指定直径、高度和轴向)、球体(直径和中心)、锥体(底部直径、顶部直径、高度)。特征布尔运算通过ScCollector收集目标体和工具体,调用Unite(合并)、Subtract(减去)、Intersect(交集)实现。对象属性设置通过SetColor(颜色编号1-216)、SetLayer(图层)、SetName(对象名)。遍历FeatureCollection结合UF_MODL_ask_feat_signature可提取所有特征类型和参数信息。错误处理务必使用try/catch捕获NXException,避免程序崩溃并输出有意义的错误提示。
四、Python自动化实例Python是UG NX二次开发最高效的入门语言。通过Journal录制获取基础API代码,分析关键参数后进行改造。典型应用模式包括:参数化循环——用for循环遍历参数列表中不同尺寸组合,批量创建系列化标准件(如M6-M24全系螺栓)。自动导出——调用ExportManager批量导出多个零件的PDF工程图和STEP 3D模型文件,设置导出路径和选项。Excel驱动建模——用xlrd或openpyxl读取Excel配置表,逐行解析参数驱动建模,实现表格到3D模型的自动化转换。BOM属性提取——遍历装配树递归访问每个组件,读取DB_PART_NAME/MATERIAL/WEIGHT等属性,汇总写入CSV文件。NX Python脚本的核心输出通道为ListingWindow(信息窗口),通过lw.WriteLine()输出调试信息和运行日志。事务管理至关重要:在修改模型前调用session.UndoMarkId markId = session.SetUndoMark(Session.MarkVisibility.Visible, "操作描述"),完成后session.DeleteUndoMark(markId)或撤销时session.UndoToMark(markId),确保自动化脚本对模型的每次变更都可追溯和回滚。
五、高级主题对话框定制是专业二次开发的关键能力。User Interface Styler(已逐步被Block UI Styler取代)通过可视化拖拽创建对话框界面。Block UI Styler生成的.dlx文件包含控件定义(按钮、文本框、下拉列表、选项组)和回调函数框架。回调函数(Callback)绑定到控件事件——如OK按钮的ApplyCallback执行核心业务逻辑、UpdateCallback动态更新界面状态、FilterCallback筛选对象选择。菜单定制通过.men文件定义菜单项及其位置,.tbr文件定义工具栏按钮图标和提示文字。自定义NX应用程序需经过签名注册,通过NXOpen_Signer工具签署DLL文件。部署时设置环境变量UGII_USER_DIR指向自定义开发目录(包含startup子目录放.men/.dll、application子目录放.dlx/.bmp),NX启动时自动加载。商用工具可能涉及授权保护,通过LM License绑定许可文件控制使用权限。
六、实战案例:批量零件自动命名导出STEP场景:某大型装配体含100余个自定义零件,需逐件导出STEP214格式交付给供应商。手动操作耗时长且易遗漏。Python自动化方案流程如下:第一步,使用openpyxl读取Excel零件清单,包含两列——装配体中零件名称和期望导出的STEP文件名。第二步,通过NXOpen遍历装配树:for component in workPart.ComponentAssembly.RootComponent.GetChildren()递归访问每个子件。第三步,用if component.DisplayName in exportList匹配Excel清单中的零件。第四步,调用ExportManager导出STEP214:exportManager = workPart.ExportManager; stepExporter = exportManager.CreateStep214Exporter(); 设置输出文件路径和导出选项(包含颜色信息、AP214协议)。第五步,ListingWindow输出日志:"已导出 35/100: BRACKET_LEFT.stp"。第六步,脚本末尾统计成功/失败数量并汇总。实测100个零件全部导出耗时约28秒,零遗漏零错误。该脚本可直接复用于其他装配体,仅需更换Excel清单和装配文件名即可。此案例完整展示了NXOpen Python从数据读取、模型遍历、批量操作到日志输出的工程化自动化流程。
|
|
|
|
|
|
|
|