找回密码
 会员注册
查看: 15|回复: 0

基于Python的UG二次开发入门

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-11 13:42:47 | 显示全部楼层 |阅读模式
文章目录基于Python的UG二次开发入门1二次开发环境搭建1.1安装UG1.2安装Pycharm1.3环境配置1.4测试2NXOpen介绍2.1基础架构2.1.1SessionsandParts2.1.2ObjectsandTags2.1.3FactoryObjects(工厂对象)2.1.4BuilderObjects(生成器对象)2.1.5导出NXOpen脚本2.2位置,向量和点2.2.1Point3d2.2.2Vector3d2.2.3Points2.3更多内容3参考资料基于Python的UG二次开发入门1二次开发环境搭建环境配置:NX12.0Python3.6.1Pycharm20231.1安装UG去微信公众号搜“软件安装管家”,在软件目录中找到UG12.0安装教程,一步步跟着安装就行,这里不多赘述。1.2安装Pycharm下载地址:PyCharm:thePythonIDEforProfessionalDevelopersbyJetBrains。网上关于Pycharm的安装教程也比较丰富,这里同样省略。1.3环境配置获取NX对应的python版本。访问NX安装路径下的NXBIN目录,找到python的动态库文件,右键属性->详细信息,获取对应的python版本,我的电脑中版本为python3.6.1。运行AnacondaPrompt,新建python虚拟环境。condacreate-nNXOpen_envpython=3.6.11失败了,找不到python3.6.1的包。换一种方法,去python官网下载python3.6.1并安装。下载地址:PythonReleasePython3.6.1|Python.org。一般选择下载Windowsx86-64executableinstaller。新建三个系统环境变量。变量值UGII_BASE_DIRG:\NX12(此处为UG安装目录)UGII_NXBIN_DIR%UGII_BASE_DIR%\NXBINUGII_ROOT_DIR%UGII_BASE_DIR%\UGII新建并运行bat脚本。新建NX_start_Pycharm.bat文件(在任何地方新建都行),复制下面代码:remthenxinstallationdir.iftherearespacesinthepath,itneedstobequotedlikehere-quotesaroundthewholeequationSETUGII_BASE_DIR=G:\NX12remthesetwoarenotusedbynx,justforsettingthepathSETUGII_ROOT_DIR=%UGII_BASE_DIR%\UGIISETUGII_NXBIN_DIR=%UGII_BASE_DIR%\NXBINremtheinstalledpythoninterpreter,version3.6fornx12SETPYTHON=G:\MSTIFIY\local\Python\Python36SETINTERPRETER=%PYTHON%;%PYTHON%\DLLs;%PYTHON%\Lib;%PYTHON%\Lib\site-packagesSETPYTHONPATH=%INTERPRETER%;%UGII_BASE_DIR%\nxbin\pythonSETPATH=%PATH%;%UGII_NXBIN_DIR%;%UGII_ROOT_DIR%start"""G:\MSTIFIY\software\pycharm\PyCharmCommunityEdition2023.2.1\bin\pycharm64.exe"1234567891011这个脚本的作用为添加了一系列环境变量,并启动了pycharm。其中需要修改的变量UGII_BASE_DIR(UG的安装目录)、PYTHON(Python的安装目录)以及最后pycharmd的启动路径。1.4测试新建test.py,内容如下:importNXOpensession=NXOpen.Session.GetSession()lw=session.ListingWindowlw.Open()lw.WriteLine('HelloWorld')123456保存后,打开UG,Alt+F8打开操作记录管理器,浏览选中test.py,接着点击管道通路运行脚本,结果如下:2NXOpen介绍NXOpen是UG提供的一个API,可供用户编程自定义或者拓展UG。二次开发最直观的优势便是可以加速一些重复性的任务,提升工作效率。下面是NXOpen提供的一些功能:创建几何零件、装配体、工程图、CAE\CAM对象;遍历零件文件中的各种对象,读取其信息或对其执行各种操作;创建允许用户选择对象和输入数据的UI。2.1基础架构NX对象类的继承关系树如下:2.1.1SessionsandParts一般我们需要访问UG当前session中的零件时,需要进行下面的初始化。importNXOpenimportNXOpen_UFsession=NXOpen.Session.GetSession()#得到当前的NXsessionparts=session.Parts#得到属于该session的PartCollectionworkPart=parts.Work#得到工作零件displayPart=parts.Display#得到显示零件ufSession=NXOpen_UF.UFSession.GetUFSession()#得到UFsessionDisplay=session.DisplayManager #得到显示管理器对象UI=NXOpen.UI.GetUI() #得到UI对象12345678910其中workPart即是当前工作零件。2.1.2ObjectsandTagsNXOpen_UF模块中集成了大量有用的函数(这些函数在NXOpen中没有),为了使用这些函数,我们需要用到对象的标签(tags)。大致调用流程如下:coord=[1.5,2.5,7.0]pointTag=ufSession.Curve.CreatePoint(coord)ufSession.Obj.SetLayer(pointTag,30)123可以把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=30123另外,tag和obj之间可以相互转化:myPoint=workPart.Points.CreatePoint(coordPt)pointTag=myPoint.Tag #obj->tagufSession.Obj.SetLayer(pointTag,30)123关于tag到obj的转化,需要用到NXOpen.Utilitiess.NXObjectManager对象,但是在官网提供的APIReference中没有找到,所以怀疑没有这方面的接口,还有可能改名了?2.1.3FactoryObjects(工厂对象)在NXOpen中,对象一般不通过构造函数生成,二是使用一些“工厂”。使用“工厂”对象新建对象的流程如下:coordPt=NXOpen.Point3d(1.5,2.5,7.0) #点坐标pointFactory=workPart.Points #得到工作零件的点集PointCollection(工厂对象)p1=pointFactory.CreatePoint(coordPt) #创建点对象123工厂对象可以从NXOpen.Part或者NXOpen.Session对象中获取。在上述例子中,变量pointFactory对类型为PointCollection,一般名字中带collection的对象我们都可以对其进行遍历,可以把它看作一个集合。forptinpointFactory:pass122.1.4BuilderObjects(生成器对象)我们使用工厂对象能创建一些简单对象,当创建对象变得复杂(表现为需要大量输入参数)时,我们一般先创建一个Builder对象,然后借助其生成我们需要的对象。流程如下:mySphereBuilder=workPart.Features.CreateSphereBuilder(Features.Sphere.Null)#新建特征生成器mySphereBuilder.Type=Features.SphereBuilder.Types.CenterPointAndDiametermySphereBuilder.CenterPoint=workPart.Points.CreatePoint(NXOpen.Point3d(1.5,2.5,7.0))mySphereBuilder.Diameter.RightHandSide="10.0"mySphereBuilder.BooleanOption.Type=NXOpen_GeometricUtilities.BooleanOperation.BooleanType.CreatemyObject=mySphereBuilder.CommitFeature() #提交特征mySphereBuilder.Destroy()1234567CreateSphereBuilder函数传入NULL对象时新建一个Sphere对象的生成器,否则在返回输入Sphere对象的生成器,即修改原对象。仔细观察发现,生成器对应于UG软件中的属性设置对话框。2.1.5导出NXOpen脚本在开发人员导航栏中,可以通过点击录制和停止录制,将用户的操作导出为python程序脚本。2.2位置,向量和点2.2.1Point3dPoint3d对象表示一个在3D空间中的位置(坐标)。注意Point3d不是一个NX对象,只存在于NXOpen程序中,程序结束后其内存将会销毁。Point3d(x:float,y:float,z:float)1Point3d对象具有三个属性X、Y、Z,对应坐标的三个分量。(Vector3d类似)2.2.2Vector3dVector3d对象表示一个在3D空间中的方向或位移。和Point3d一样不是NX对象。Vector3d(x:float,y:float,z:float)1目前NXOpen在python环境中Vector3d不支持一般的向量运算。2.2.3PointsPoint对象是一个NX对象,可通过工厂对象(PointCollection)创建。创建流程如下:coord=NXOpen.Point3d(3.,5.,0.)#Definecoordinatesofpointp1=workPart.Points.CreatePoint(coord)#Createthepointp1.SetVisibility(NXOpen.SmartObject.VisibilityOption.Visible)#Makeitvisible123NXOpen.Point对象派生自SmartObject对象,默认是不可见的,所以需要设置可见性。创建一个点的精简写法:p1=NXOpen.Session.GetSession.Parts.Work.Points.CreatePoint(NXOpen.Point3d(3.,5.,0.))#Createthepoint12.3更多内容入门部分差不多讲完了,后面主要是针对性地学习。学习推荐官方文档。3参考资料[1]GettingStartedwithSNAP(siemens.com)[2]NXOpenPythonReferenceGuide—NXOpenPythonAPIReference12.0.0documentation(siemens.com)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-28 08:44 , Processed in 0.430995 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表