基于Python的UG二次开发入门

这篇具有很好参考价值的文章主要介绍了基于Python的UG二次开发入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于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
    ug用python二次开发,经验分享,python,UG二次开发,NX Open

  • 运行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_DIR G:\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的启动路径。

  • ug用python二次开发,经验分享,python,UG二次开发,NX Open

1.4 测试

新建test.py,内容如下:

import NXOpen

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

保存后,打开UG,Alt+F8打开操作记录管理器,浏览选中test.py,接着点击管道通路运行脚本,结果如下:
ug用python二次开发,经验分享,python,UG二次开发,NX Open

2 NX Open介绍

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

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

2.1 基础架构

NX 对象类的继承关系树如下:
ug用python二次开发,经验分享,python,UG二次开发,NX Open

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软件中的属性设置对话框。
ug用python二次开发,经验分享,python,UG二次开发,NX Open

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)文章来源地址https://www.toymoban.com/news/detail-754903.html

到了这里,关于基于Python的UG二次开发入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UG NX二次开发(C#)-机械管线布置-添加管道路径

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机械管道布局是UG NX的一个应用模块,以前给客户做过一个项目,现在分享给大家。这篇文章是讲解如何布置管道路径(创建线性路径),后面会逐步的讲解,如果有需要的可以私信博主,或者加入QQ群

    2024年01月20日
    浏览(89)
  • UG\NX二次开发 用户自定义UI块

    1.打开NX软件,点击“块UI样式编辑器”,进入UI编辑界面;  2.将类型改为“用户定义 UI 块”;  3.设置名称、目录名称,也可以设置自定义UI块的图标;  4.点击保存,需要注意自定义UI块会多生成一个目标文件“.udx”,如果需要使用自定义的UI块,则必须把自定义UI块生成的

    2024年02月16日
    浏览(55)
  • UG\NX 二次开发 相切面、相邻面的选择控件

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗?” 这个用Block UI的\\\"面收集器\\\"可以,ufun函数也可以,请参照这篇:【NX二次开发】相切面封装函数-CSDN博客                   

    2024年02月12日
    浏览(50)
  • UG NX二次开发(C#)-创建点到曲线(边)的切线

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在UG NX二次开发时,对于求点到曲线的切线,采用ufun函数可以实现,即是UF_CURVE_create_line_point_tangent,但是对于C#,这个函数尚未封装进来,所以没有直接对应的函数。本文讲一下采用C#创建点到曲线的切

    2024年02月09日
    浏览(58)
  • UG/NX二次开发环境配置方法(nx1980+vs2019)

    最近需要尝试nx二次开发,结合网上的文字教程以及一些视频教程,总算是完成了环境的配置以及简单实例的运行——根据用户输入的数据,在原点处创建一个指定长宽高的立方体,配合了简单的UI界面,完成了基本功能。 看到网上关于此类入门的教程并不算多,而且vs和nx版

    2024年02月09日
    浏览(126)
  • UG\NX二次开发 使用throw重新抛出异常

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         在异常处理代码中,可以使用 throw 来抛出异常。如果希望在捕获异常后重新抛出该异常,可以使用类似以下的代码:         在 catch 块中,先对异常进行处理,例如记录日志、修复问题等。

    2024年02月16日
    浏览(43)
  • UG\NX二次开发 获取部件的4x4矩阵

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan 输入部件occ,获取矩阵。用函数UF_ASSEM_ask_transform_of_occ(),比较直接。 输入部件的实例或事例,获取矩阵。用函数UF_ASSEM_ask_component_data()。 通过部件事例获取实例的方法

    2024年02月14日
    浏览(47)
  • UG\NX二次开发 改变Block UI界面的尺寸

     1.设置“Dialog-DialogSizing”为Allow Resize;  2.添加滚动窗口控件,设置Width、Height的值,例如宽度500、高度5,可改变UI界面大小   3.在滚动窗口控件节点下添加其他的UI块。例如,添加 树控件。

    2024年02月13日
    浏览(40)
  • UG NX二次开发(C#)-UI Styler-批量选择点

    在设计UG NX的对话框界面时,有时需要选择点,在UI Styler编辑器中已经设置好了可以指定点选择按钮,这个点选择对话框是单选,不是多选的,如果想选择多个点,那么可以采用对象选择按钮,本文介绍下选择点的操作。 UG NX的UI Styler对话框中,指定点如下图所示: 添加此按

    2023年04月16日
    浏览(50)
  • UG/NX二次开发(C#) 一个方法遍历部件的体、面、边属性

     初学UG/NX, 对体的各种tag还不熟悉,更别说各种面、边、点的操作,感觉就像一口锅里面的饺子,根本分不清哪个是哪个。 所以,这里对体的面、边、点以及各对象进行了一次整理,废话不说,直接上代码: 1、先定义体、面、边模型 2、加载体的方法如下 3、调用方法 4、运

    2024年02月16日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包