一个python的UG二次开发简单例子(二)

这篇博客记录了使用UGAPI在NX10中创建模型的体验,特别是UF模块的NXOpen.UF.Curve函数。作者通过实践理解了创建无关联和关联特征直线的步骤,包括创建点、线以及限制条件。UF的帮助文档虽然详细,但学习过程充满挑战,尤其是对NXOpen.UF.Curve.Limit的理解。最终,作者成功创建了两条直线,一条无关联,一条关联,并分享了遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UG API里面模型创建主要包括了两大类模块,一是NXOpen,二是NXOpen.UF(以下简称UF)。这两个里面都包含创建数字模型的函数,但使用方法有很大的不同。UG帮助文档介绍UF开发比较早,可能是为了兼容的原因依然保留吧,脚本录制生成的代码只有NXOpen的函数。没有脚本录制,学习UF真是纯靠运气和参照帮助文档。只能怪自己英语理解能力差,虽然帮助文档里面的函数写的明白明白需要哪些参数,就是不理解其中意思啊。以下的代码写的真是跌跌撞撞啊,功能很简单,还是画两个点,两点连成直线。两条直线中一条是没有关联的,一条是有关联特征的

# NX 10.0.0.24
import pydevd
pydevd.settrace()
import NXOpen
import NXOpen.UF
mysession=NXOpen.Session.GetSession()
myufsession=NXOpen.UF.UFSession.GetUFSession()
mylw=mysession.ListingWindow
workPart=mysession.Parts.Work
displayPart=mysession.Parts.Display
myui=NXOpen.UI.GetUI()
mylw.Open()
#
pt1=myufsession.Curve.CreatePoint([10.,10.,10.])
pt2=myufsession.Curve.CreatePoint([20.,20.,20.])
mylw.WriteLine('first point id is %s'%pt1)

#无关联特征的直线创建,帮助文档是如下介绍的

Curve.CreateLine()

Refer to UF_CURVE_create_line for documentation.

Signature: CreateLine(lineCoords)

Parameters:lineCoords (NXOpen.UF.Curve.Line Refer to UF_CURVE_line_s for documentation.) – Coordinates of line in absolute space
Returns:Object identifier Of new line
Return type:Tag

其中lineCoords (NXOpen.UF.Curve.Line Refer to UF_CURVE_line_s for documentation.) – Coordinates of line in absolute space是告诉我们函数输入类型是NXOpen.UF.Curve.Line类型,一开始没理解对,直接上CreateLine([10.,10.,10.],[20.,20.,20.])起点+终点坐标

正确的做法是先要创建NXOpen.UF.Curve.Line的实例,如下

st=myufsession.Curve.Line([10.,10.,10.],[20.,20.,20.])
line1=myufsession.Curve.CreateLine(st)
#关联特征直线的创建,需要输入5个参数,limitP的参数是需要NXOpen.UF.Curve.Limit 类型的list,其他4个参数都比较好理解。

Curve.CreateLinePointPoint()

Refer to UF_CURVE_create_line_point_point for documentation.

Signature: CreateLinePointPoint(point1, point2, limitP, supportPlane, isAsso)

Parameters:
  • point1 (Tag) – tag of start point
  • point2 (Tag) – tag of end point
  • limitP (list of NXOpen.UF.Curve.Limit Refer to UF_CURVE_limit_s for documentation.) – extension limits
  • supportPlane (Tag) – tag of support plane of the line
  • isAsso (bool) – true - if associative, false - if not associative
Returns:

if is_asso == TRUE - object identifier of new associative line feature if is_asso == FALSE - object identifier of new associative line

Return type:

Tag

对于NXOpen.UF.Curve.Limit的理解只能继续查文档,文档内容如下,咋用啊,简单的不能再简单了啊。字面上基本可以理解,需要设置limittype,value,limitobj,helpdata,再接续查看帮助文档,也没有找到如何设置这些参数的方法。

NXOpen.UF.Curve.Limit is an alias for NXOpen.UF.CurveLimit_Struct

class NXOpen.UF.CurveLimit_Struct

Bases: object

Fields

NXOpen.UF.CurveLimit_Struct.LimitTypeRefer to UF_CURVE_limit_s for documentation.
NXOpen.UF.CurveLimit_Struct.ValueRefer to UF_CURVE_limit_s for documentation.
NXOpen.UF.CurveLimit_Struct.LimitingObjRefer to UF_CURVE_limit_s for documentation.
NXOpen.UF.CurveLimit_Struct.HelpDataRefer to UF_CURVE_limit_s for documentation.

尝试了N次,总算是让我试出来了,一开始我设置st1=myufsession.Curve.Limit没有加括号总是出错,我突然想起来Python里面类class实例化好像需要加上括号,于是加上了括号。Limit里面的参数我只理解了value,所以只设置了value值。实际上也可以采用默认值,就是什么都不用设置,只要实例化起点和终点limit类就可以。

st1=myufsession.Curve.Limit()
st1.Value=0.
en1=myufsession.Curve.Limit()
en1.Value=20.

#创建支持面
plane1=myufsession.ModlFeatures.CreateFixedDplane([0.,0.,10.],[0.,0.,1.])

#做了这么多,到此才开始创建关联直线
line2=myufsession.Curve.CreateLinePointPoint(pt1,pt2,[st1,en1],plane1,True)

没有脚本录制辅助,UF学起来真费劲,放弃UF的学习了

### 关于UG(Unigraphics NX)使用Python进行二次开发 #### 使用NXOpenAPI与Python集成 Siemens NX 提供了一套名为NXOpenAPI的工具集,该工具集允许开发者利用多种编程语言来增强和自定义NX的功能。对于希望采用Python作为开发语言的工程师来说,NXOpen不仅支持Python脚本编写,还能够访问几乎所有的NX核心功能,比如几何建模、装配管理和CAM编程等[^1]。 为了更好地理解如何运用Python来进行NX的二次开发,下面是一个简单例子,展示了怎样创建一个新的部件文件并添加一条直线到其中: ```python import nxopen from nxopen import features, geometricutilities def create_line_in_part(): theSession = nxopen.Session.GetSession() workPart = theSession.Parts.Work # 创建新零件 new_part = workPart.ComponentAssembly.RootComponent.AddNewPart(nxopen.Part.BodyType.Sheet)[^2] builder = workPart.Curves.CreateLineBuilder(None) start_point = [0., 0., 0.] end_point = [10., 10., 0.] builder.StartPoint.X.SetFormula(str(start_point[0])) builder.StartPoint.Y.SetFormula(str(start_point[1])) builder.StartPoint.Z.SetFormula(str(start_point[2])) builder.EndPoint.X.SetFormula(str(end_point[0])) builder.EndPoint.Y.SetFormula(str(end_point[1])) builder.EndPoint.Z.SetFormula(str(end_point[2])) line_feature = builder.Commit()[^3] builder.Destroy() create_line_in_part() ``` 这段代码首先获取当前会话的工作部分对象`workPart`,接着调用了`AddNewPart()`方法新建了一个实体模型;之后构建了一个线条构造器,并设置了起始点坐标以及终点坐标;最后提交操作完成线段绘制。 #### 开发资源推荐 针对那些想要深入了解NX Python API及其应用的人士而言,官方文档无疑是最好的起点之一。除此之外,在线社区和技术论坛也是不可忽视的学习平台,它们往往包含了大量实际案例分享和个人经验交流的内容。此外,还有一些第三方书籍和在线课程专门讲解了NX的Python二次开发技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值