基于Python的UG二次开发入门

news2025/5/26 1:52:42

文章目录

  • 基于Python的UG二次开发入门
    • 1 二次开发环境搭建
      • 1.1 安装UG
      • 1.2 安装Pycharm
      • 1.3 环境配置
      • 1.4 测试
    • 2 NX Open介绍
      • 2.1 基础架构
        • 2.1.1 Sessions and Parts
        • 2.1.2 Objects and Tags
        • 2.1.3 Factory Objects(工厂对象)
        • 2.1.4 Builder Objects(生成器对象)
        • 2.1.5 导出NX Open脚本
      • 2.2 位置, 向量和点
        • 2.2.1 Point3d
        • 2.2.2 Vector3d
        • 2.2.3 Points
      • 2.3 更多内容
    • 3 参考资料

基于Python的UG二次开发入门

1 二次开发环境搭建

环境配置:

  • NX12.0
  • Python3.6.1
  • Pycharm2023

1.1 安装UG

去微信公众号搜“软件安装管家”,在软件目录中找到UG12.0安装教程,一步步跟着安装就行,这里不多赘述。

1.2 安装Pycharm

下载地址:PyCharm: the Python IDE for Professional Developers by JetBrains。

网上关于Pycharm的安装教程也比较丰富,这里同样省略。

1.3 环境配置

  • 获取NX对应的python版本

    访问NX安装路径下的NXBIN目录,找到python的动态库文件,右键属性->详细信息,获取对应的python版本,我的电脑中版本为python3.6.1
    在这里插入图片描述

  • 运行Anaconda Prompt,新建python虚拟环境。

    conda create -n NXOpen_env python=3.6.1
    

    失败了,找不到python3.6.1的包。

  • 换一种方法,去python官网下载python3.6.1并安装。

    下载地址:Python Release Python 3.6.1 | Python.org。一般选择下载Windows x86-64 executable installer

  • 新建三个系统环境变量。

    变量
    UGII_BASE_DIRG:\NX12(此处为UG安装目录)
    UGII_NXBIN_DIR%UGII_BASE_DIR%\NXBIN
    UGII_ROOT_DIR%UGII_BASE_DIR%\UGII
  • 新建并运行bat脚本

    新建NX_start_Pycharm.bat文件(在任何地方新建都行),复制下面代码:

    rem the nx installation dir. if there are spaces in the path, it needs to be quoted like here - quotes around the whole equation
    SET UGII_BASE_DIR=G:\NX12
    rem these two are not used by nx, just for setting the path
    SET UGII_ROOT_DIR=%UGII_BASE_DIR%\UGII
    SET UGII_NXBIN_DIR=%UGII_BASE_DIR%\NXBIN
    rem the installed python interpreter, version 3.6 for nx12
    SET PYTHON=G:\MSTIFIY\local\Python\Python36
    SET INTERPRETER=%PYTHON%;%PYTHON%\DLLs;%PYTHON%\Lib;%PYTHON%\Lib\site-packages
    SET PYTHONPATH=%INTERPRETER%;%UGII_BASE_DIR%\nxbin\python
    SET PATH=%PATH%;%UGII_NXBIN_DIR%;%UGII_ROOT_DIR%
    start "" "G:\MSTIFIY\software\pycharm\PyCharm Community Edition 2023.2.1\bin\pycharm64.exe"
    

    这个脚本的作用为添加了一系列环境变量,并启动了pycharm。

    其中需要修改的变量UGII_BASE_DIR(UG的安装目录)、PYTHON(Python的安装目录)以及最后pycharmd的启动路径。

  • 在这里插入图片描述

1.4 测试

新建test.py,内容如下:

import NXOpen

session=NXOpen.Session.GetSession()
lw=session.ListingWindow
lw.Open()
lw.WriteLine('Hello World')

保存后,打开UG,Alt+F8打开操作记录管理器,浏览选中test.py,接着点击管道通路运行脚本,结果如下:
在这里插入图片描述

2 NX Open介绍

NX Open是UG提供的一个API,可供用户编程自定义或者拓展UG。二次开发最直观的优势便是可以加速一些重复性的任务,提升工作效率。下面是NX Open提供的一些功能:

  • 创建几何零件、装配体、工程图、CAE\CAM对象;
  • 遍历零件文件中的各种对象,读取其信息或对其执行各种操作;
  • 创建允许用户选择对象和输入数据的UI。

2.1 基础架构

NX 对象类的继承关系树如下:
在这里插入图片描述

2.1.1 Sessions and Parts

一般我们需要访问UG当前session中的零件时,需要进行下面的初始化。

import NXOpen
import NXOpen_UF

session = NXOpen.Session.GetSession() # 得到当前的NX session
parts = session.Parts # 得到属于该session的PartCollection
workPart = parts.Work  # 得到工作零件
displayPart = parts.Display  # 得到显示零件
ufSession = NXOpen_UF.UFSession.GetUFSession() # 得到UF session
Display = session.DisplayManager	# 得到显示管理器对象
UI = NXOpen.UI.GetUI()		# 得到UI对象

其中workPart即是当前工作零件。

2.1.2 Objects and Tags

NXOpen_UF模块中集成了大量有用的函数(这些函数在NXOpen中没有),为了使用这些函数,我们需要用到对象的标签(tags)。大致调用流程如下:

coord = [1.5, 2.5, 7.0]
pointTag = ufSession.Curve.CreatePoint(coord)
ufSession.Obj.SetLayer(pointTag, 30)

可以把tag对象理解为obj对象的id号,在NXOpen_UF模块中我们通过使用tag对象调用各种函数。在上面的例子中,CreatePoint函数返回的应该是一个Point对象,但此处返回的是一个tag对象,即NXOpen_UF的函数中obj对象的输入输出全部使用其对应的tag。我们通过调用NXOpen模块中的方法可实现相同的效果:

coordPt = NXOpen.Point3d(1.5, 2.5, 7.0)
myPoint = workPart.Points.CreatePoint(coordPt)
myPoint.Layer = 30

另外,tag和obj之间可以相互转化:

myPoint = workPart.Points.CreatePoint(coordPt)
pointTag = myPoint.Tag	# obj->tag
ufSession.Obj.SetLayer(pointTag, 30)

关于tag到obj的转化,需要用到NXOpen.Utilitiess.NXObjectManager对象,但是在官网提供的API Reference中没有找到,所以怀疑没有这方面的接口,还有可能改名了?

2.1.3 Factory Objects(工厂对象)

在NX Open中,对象一般不通过构造函数生成,二是使用一些“工厂”。使用“工厂”对象新建对象的流程如下:

coordPt = NXOpen.Point3d(1.5, 2.5, 7.0)	# 点坐标
pointFactory = workPart.Points	# 得到工作零件的点集PointCollection(工厂对象)
p1 = pointFactory.CreatePoint(coordPt)	# 创建点对象

工厂对象可以从NXOpen.Part或者NXOpen.Session对象中获取。

在上述例子中,变量pointFactory对类型为PointCollection,一般名字中带collection的对象我们都可以对其进行遍历,可以把它看作一个集合。

for pt in pointFactory:
    pass

2.1.4 Builder Objects(生成器对象)

我们使用工厂对象能创建一些简单对象,当创建对象变得复杂(表现为需要大量输入参数)时,我们一般先创建一个Builder对象,然后借助其生成我们需要的对象。流程如下:

mySphereBuilder = workPart.Features.CreateSphereBuilder(Features.Sphere.Null) # 新建特征生成器
mySphereBuilder.Type = Features.SphereBuilder.Types.CenterPointAndDiameter
mySphereBuilder.CenterPoint = workPart.Points.CreatePoint(NXOpen.Point3d(1.5, 2.5, 7.0))
mySphereBuilder.Diameter.RightHandSide = "10.0"
mySphereBuilder.BooleanOption.Type = NXOpen_GeometricUtilities.BooleanOperation.BooleanType.Create
myObject = mySphereBuilder.CommitFeature() 	# 提交特征
mySphereBuilder.Destroy()

CreateSphereBuilder函数传入NULL对象时新建一个Sphere对象的生成器,否则在返回输入Sphere对象的生成器,即修改原对象。仔细观察发现,生成器对应于UG软件中的属性设置对话框。
在这里插入图片描述

2.1.5 导出NX Open脚本

开发人员导航栏中,可以通过点击录制停止录制,将用户的操作导出为python程序脚本。

2.2 位置, 向量和点

2.2.1 Point3d

Point3d对象表示一个在3D空间中的位置(坐标)。注意Point3d不是一个NX对象,只存在于NX Open程序中,程序结束后其内存将会销毁。

Point3d(x: float, y: float, z: float)

Point3d对象具有三个属性X、Y、Z,对应坐标的三个分量。(Vector3d类似)

2.2.2 Vector3d

Vector3d对象表示一个在3D空间中的方向或位移。和Point3d一样不是NX对象。

Vector3d(x: float, y: float, z: float)

目前NX Open在python环境中Vector3d不支持一般的向量运算。

2.2.3 Points

Point对象是一个NX对象,可通过工厂对象(PointCollection)创建。创建流程如下:

coord = NXOpen.Point3d(3., 5., 0.)  # Define coordinates of point
p1 = workPart.Points.CreatePoint(coord)  # Create the point
p1.SetVisibility(NXOpen.SmartObject.VisibilityOption.Visible)  # Make it visible

NXOpen.Point对象派生自SmartObject对象,默认是不可见的,所以需要设置可见性。创建一个点的精简写法:

p1 = NXOpen.Session.GetSession.Parts.Work.Points.CreatePoint(NXOpen.Point3d(3., 5., 0.))  # Create the point

2.3 更多内容

入门部分差不多讲完了,后面主要是针对性地学习。学习推荐官方文档。

3 参考资料

[1] Getting Started with SNAP (siemens.com)

[2] NXOpen Python Reference Guide — NXOpen Python API Reference 12.0.0 documentation (siemens.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科兴未来 | 第十届中国(泰州)国际大健康产业高层次人才创新创业大赛公告

为加快推进青年和人才友好型城市建设,吸引和集聚更多海内外生物医药高层次人才来泰创新创业,推动大健康产业高质量发展,全力建设“健康名城、幸福泰州”,现举办第十届中国(泰州)国际大健康产业高层次人才创…

15W sip网络有源音箱,可外接15W无源副音箱

SV-7042VP 15W sip网络有源音箱,可外接15W无源副音箱 一、描述 SV-7042VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率15W。同时它可以外接一个15W的…

STM32WB55开发(4)----配置串口打印Debug调试信息

STM32WB55开发----4.配置串口打印Debug调试信息 概述硬件准备视频教学样品申请选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙开启串口调试配置蓝牙参数设置工程信息工程文件设置Keil工程配置代码配置结果演示 概述…

000_差分信号

1.什么是差分信号 差分信号又叫做差模信号,使用差分信号传输时,需要2根信号线,这2根信号线的振幅相等,相位相反,通过2根信号线的电压差值来表示逻辑0和逻辑1。 差分信号表示逻辑值如下图: 2.差分信号的特…

合并单元格中自动填充数字序列的方法详解

我们如何在Excel中将序列号填充到不同大小的合并单元格列表中?我们首先想到的是拖动“自动填充”手柄来填充合并的单元格,但在这种情况下,我们将收到以下警告消息,并且无法填充合并的单元。 有没有一种方法可以在不必手动键入数字的情况下对合并的单元格进行编号? 例如,…

深兰科技入围“虎嗅·大鲸榜2023工业AI高成长科技公司TOP30”

9月7日,虎嗅智库主办的“虎嗅2023工业AI大会”,在苏州工业园顺利召开,众多优秀工业和AI企业齐聚一堂,共同探讨当下人工智能在工业制造各场景、环节中所发挥的重要作用以及未来发展等重要问题。 在本次大会上,虎嗅正式发…

PIMPL技巧

PIMPL(Pointer to IMPLementation)是一种设计模式,也被称为“编译器实现”或“Opaque Pointer”模式。它是一种用于隐藏类的内部实现细节的C编程技巧。PIMPL的核心思想是将类的实现细节封装在一个独立的私有类中,并在公共接口类中…

左孩子右兄弟(2023寒假每日一题 18)

对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵二叉树。 如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。 换句话说,每个结点可以选任意子结点作为左孩子,并按任意顺序连…

【antd】使用antd的table组件onChange事件中,无法正确获取到父组件的最新state问题

先说结论 是闭包的原因导致我们的state数据在useEffect注入依赖后,打印的是最新值,而在onTableChange事件中打印获取的是闭包时的缓存值。 解决办法 引入useRef去保存state,这样就能确保每次拿到的引用都是新的唯一的最新值。 代码示例&a…

C++之调试内存访问错误(二百一十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

PythonUI自动化测试 —— 浏览器启动参数设置

网上的文章对小白不友好呀,都是给你一堆参数,都不教你怎么使用,直接跳过了最重要的部分,写下该文章希望对后续人有指导性作用 什么参数都不设置时的启动方式 import time from selenium import webdriver# 创建浏览器驱动参数对象…

NSSCTF之Misc篇刷题记录(16)

NSSCTF之Misc篇刷题记录(16) [黑盾杯 2020]encrypt[UTCTF 2020]Spectre[UTCTF 2020]Observe closely NSSCTF平台:https://www.nssctf.cn/ PS:所有FLAG改为NSSCTF [黑盾杯 2020]encrypt UTAxSlUwTkRWRVo3Um1GclpWOWxibU55ZVhCMGFX…

选择离子风棒需要注意什么?

离子风棒是一种固定式静电消除器,具有铜质外壳、铝制外壳、不锈钢外壳、坚固美观、风力强劲、经久耐用、耐酸碱、耐腐蚀、除静电除尘快的特点,适用于自动除静电除灰尘装置。 作用原理:离子风棒可产生大量的带正负电荷的气团,可以…

UG\NX二次开发 获取工作部件的完整名称、文件名称、文件夹路径 UF_ASSEM_ask_component_data

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 获取工作部件的完整名称、文件名称、文件夹路径 UF_ASSEM_ask_component_data 效果: 代码: //获取工作部件的完整名称、文件名称、文件夹路径…

算法分析与设计编程题 动态规划

矩阵连乘 题目描述 解题代码 void printOptimalParens(vector<vector<int>>& partition, int i, int j) {if (i j) cout << "A" << i; // 单个矩阵&#xff0c;无需划分else {cout << "(";printOptimalParens(partit…

异步FIFO设计的仿真与综合技术(3)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a; 异步FIFO设计的仿真与综合技术&#xf…

29.Xaml TreeView控件---->树形控件,节点的形式显示数据

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

栈和队列讲解

栈和队列 栈和队列3.1 栈和队列的定义和特点3.2 案例引用3.3 栈的顺序表示和实现3.4 栈的链式表示和实现3.5 队列的顺序表示和实现3.6 队列的链式表示和实现 3.1 栈和队列的定义和特点 栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此&#xff0c; 对栈来说&…

树莓派4B使用Docker部署SpringBoot项目——(一)树莓派安装docker

使用Shell7连接树莓派&#xff0c;命令行执行安装命令&#xff0c;等待安装成功即可。 apt install docker.io执行docker version查看docker版本信息。 其他docker命令。 docker images 查看镜像 docker ps -a 查看所有容器 docker ps 查看运行的容器

社区分享|MeterSphere变身“啄木鸟”,助力云帐房落地接口自动化测试

云帐房网络科技有限公司&#xff08;以下简称为“云帐房”&#xff09;成立于2015年3月&#xff0c;以“成为最值得信赖的税务智能公司”为愿景&#xff0c;运用人工智能、大数据等互联网技术&#xff0c;结合深厚的财税行业服务经验&#xff0c;为代账公司和中大型企业提供智能…