基于Python的UG二次开发入门

文章目录

  • 基于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 NXOpensession=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_UFsession = 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.mzph.cn/news/78815.shtml

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

相关文章

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

【绝㊙️】三年开发内功心得

经典嵌套if-else问题 这个也是老生常谈问题了&#xff0c;不管哪里都能看到。 那如何解决 方法一&#xff08;重要&#xff09;&#xff1a; 如果逻辑分支过多&#xff0c; 即使你不解决嵌套if-slse&#xff0c;至少也要把每个 if的{}里的逻辑抽到一个独立的方法或者工具类…

微信小程序的疫苗接种预约设计与实现vue+uniapp

对于本小程序的疫苗预约的设计来说&#xff0c;系统开发主要是采用java语言&#xff0c;在整个系统的设计中应用MySql数据库来完成数据存储&#xff0c;具体根据疫苗预约信息的现状来进行开发的&#xff0c;具体根据现实的需求来实现疫苗预约网络化的管理&#xff0c;各类信息有…

uniapp中video播放视频上按钮没显示的问题

video标签层级很高&#xff0c;尝试了添加z-index&#xff0c;但无效果 通过查阅资料&#xff0c;得知cover-view层级比video层级高 效果图 需求是为了使直播时&#xff0c;可选是原画/流畅 解决方案 首先&#xff0c;在pages.json中配置右上角的图标 {"path" : …

YOLOv5:修改backbone为ConvNeXt

YOLOv5&#xff1a;修改backbone为ConvNeXt 前言前提条件相关介绍ConvNeXtYOLOv5修改backbone为ConvNeXt修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

TCP/IP传输协议学习

了解完整的通信过程 1.发送方源终端设备的应用创建数据。 2.当数据在源终端设备中沿协议栈向下传递&#xff0c;对其分段和封装。 3.在协议栈网络接入层的介质上生成数据。 4.通过由介质和任意中间设备组成的网际层网络传输数据。 5.在目的终端设备中沿协议栈向上传递时对其…

微信小程序线上加载使用iconfont问题

1.在微信小程序根目录下创建style文件夹&#xff0c;里面再创建iconfont文件夹&#xff0c;用于放置iconfont图标文件和iconfont样式文件 2.给iconfont.wxss写样式&#xff08;也可以下载iconfont代码&#xff0c;拷贝iconfont.css里的代码复制进去&#xff09; font-face {fo…

Ecrett Music:AI音乐创作软件

【产品介绍】 Ecrett Music是一个由人工智能驱动的AI音乐创作软件&#xff0c;可以帮助内容创作者快速、简单、便宜地制作出适合自己的无版权音乐。无论你是做游戏、视频、播客还是其他类型的内容&#xff0c;都可以在Ecrett Music上选择场景、情绪或风格&#xff0c;然后点击一…

kali安装volatility及插件mimikatz

1.准备工作 kali安装pip2 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python2 get-pip.py 查看pip2版本 python2 -m pip -v pip2安装升级 pip2 install --upgrade setuptools 安装2个库 pip2 install construct2.10.54 pip2 install pycryptodome 下载文件d…

Kubernetes入门 十七、Helm 包管理器

目录 概述Helm 的三大概念Helm 的安装仓库管理Helm 的常用命令 chart详解目录结构Redis chart 实践升级回滚 概述 Kubernetes 上的应用对象&#xff0c;都是由特定的资源描述组成&#xff0c;包括 Deployment、Service 等&#xff0c;都保存在各自的文件中或者集中写在一个配置…

通过Git Bash将本地文件上传到本地github

1. 新建一个仓库&#xff08; Repository&#xff09; 1.1登录Github&#xff0c;点击个人头像&#xff0c;点击Your repositories&#xff0c;点击New。 1.2 填写信息 Repository name: 仓库名称 Description(可选): 仓库描述介绍,不是必填项目。~~建议填写上哦&#xff01;…

计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)

个人医疗系统&#xff08;Java原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以…

华三路由交换技术基础——计算机网络基础

计算机网络&#xff1a; 定义&#xff1a;一组具有自治权的计算机互联的集合 作用&#xff1a; 1.共享信息资源 2.分解式处理信息 4.负载均衡 5.综合信息服务 它是计算机技术与通信技术的两个领域的结合 一&#xff0c;计算机网络中的基本概念&#xff1a; 局域网&#xff…

web端动效 PAG

之前写过一篇lottie动效的文章&#xff1a;web端动效 lottie-web 使用&#xff0c;本篇写一下PAG-web的基础使用。 PAG是腾讯开发&#xff0c;支持移动端、桌面端以及Web端的动效工作流解决方案。目标是降低或消除动效相关的研发成本&#xff0c;能够一键将设计师在 AE&#x…

【深度学习】 Python 和 NumPy 系列教程(十四):Matplotlib详解:1、2d绘图(下):箱线图、热力图、面积图、等高线图、极坐标图

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 0. 设置中文字体 1-5. 折线图、散点图、柱状图、直方图、饼图 6. 箱线图&#xff08;Box Plot&#xff09; 7. 热力图&#xff08;Heatmap&#xff09; 8. 面积图&#xff08;Area Plot&#xff09; 9. 等…

腾讯云2023年云服务器优惠活动价格表

腾讯云经常推出各种云产品优惠活动&#xff0c;为了帮助大家更好地了解腾讯云服务器的价格和优惠政策&#xff0c;下面给大家分享腾讯云最新云服务器优惠活动价格表&#xff0c;助力大家轻松上云&#xff01; 一、轻量应用服务器优惠活动价格表 1、轻量应用服务器&#xff1a;…

【JAVA - List】差集removeAll() 四种方法实现与优化

一、场景&#xff1a; 二、结论&#xff1a; 1. 四种方法耗时 三、代码&#xff1a; 一、场景&#xff1a; 求差集 List1 - Lsit2 二、结论&#xff1a; 1. 四种方法耗时 初始条件方法名方法思路耗时 List1.size319418 List2.size284900 List..removeAll(Lsit2)1036987ms…

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程 一、群晖套件中下载Cloud Sync 二、同步到百度云盘 打开Cloud Sync&#xff0c;点击左上角的号&#xff0c;云供应商选择百度云。 这里可以选择双向备份&#xff0c;也可以只上穿到百度云的仅上传本地更改。因为百…

第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

python爬虫经典实例(二)

在前一篇博客中&#xff0c;我们介绍了五个实用的爬虫示例&#xff0c;分别用于新闻文章、图片、电影信息、社交媒体和股票数据的采集。本文将继续探索爬虫的奇妙世界&#xff0c;为你带来五个全新的示例&#xff0c;每个示例都有其独特的用途和功能。 1. Wikipedia数据采集 爬…