NXOpen是一个应用程序编程接口(API)工具包的集合,它允许通过开放的体系结构灵活地集成定制NX应用程序。其目的是使复杂和重复的任务自动化。此外,还允许集成不同的应用程序,以及第三方和NX应用程序,在不同的计算机平台上共享数据,从不同的位置使用异构网络,甚至跨Internet。NXOpen API提供了一个开放的体系结构,可以由第三方、客户和内部用户利用它们来创建和集成定制软件应用程序。NXOpen主要是指NX的common API。
ufunc(Open C)发展了很多年,包含5000多个函数,功能覆盖方方面面。Common API通过生成.NET、Java和Python的包装类来保证能使用这些函数。
一些OpenC函数没有包装类,详情参见列表Non-NXOpen functions
OpenC模块及函数映射到NXOpen详见命名约定
Common API将对象表示为典型的面向对象对象,而OpenC则将它们表示为标记(Tag)。下面的示例说明如何在对象和标记之间切换。
在使用包装类前要理解一些简单的概念:
名称空间和模块结构
.NET NXOpen 包装类定义在NXOpen.UF命名空间。Java包装类在NXOpenUF.jar中,定义在nxopen.uf包。Python包装类包含在NXOpen_UF.pvd扩展模块,定义在NXOpen.UF模块。
UFSession
获得包装类之前你首先要获得UFSession的实例。包装类(与ufunc模块对应)定义在UFSession的方法中。例如:UFSession的curve()方法返回一个UFCurve类的实例。
TaggedObjectManager and NXObjectManager
TaggedObjectManager是定义在nxopen包里面的一个NXOpen Java接口。使用该类的get方法获取与标签对应的NXOpen Tag对象。
.NET、Python对应的类分别为TaggedObjectManager、NXObjectManager。
Tag属性
所有的NXOpen标签对象在.NET和Python中都有一个Tag属性,在Java和c++中有一个tag()方法。
包装类-具体实例
1.NXopen .NET
下面的例子使用ufunc API生成一个圆弧并用NXOpen.NET API查询圆弧数据:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Dim theSession As Session = Session.GetSession()
Dim theUFSession As UFSession = UFSession.GetUFSession()
' Create an ARC using the Open API
Tag arc;
Dim arc_coords As UFCurve.Arc
arc_coords.radius = 1.0
arc_coords.arc_center = New Double(){1.0, 1.0, 0.0}
arc_coords.start_angle = 0.0
arc_coords.end_angle = Math.PI
arc_coords.matrix_tag = theSession.Parts.Display.WCS.CoordinateSystem.Orientation.Tag
theUFSession.Curve.CreateArc( arc_coords, arc)
' Get the Arc Object to use with NX Open
NXOpen.Arc nxArc= CType(NXOpen.Utilities.NXObjectManager.Get(arc), NXOpen.Arc)
'Get the Arc parameters using NX Open APIs
Dim start_angle As Double = nxArc.StartAngle
Dim end_angle As Double = nxArc.EndAngle
Dim arc_center As NXOpen.Point3d = nxArc.CenterPoint
2.NXOpen JAVA
下面的例子使用ufunc API生成一个圆弧并用NXOpenJava API查询圆弧数据:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Session theSession = (Session)SessionFactory.get("Session");
UFSession theUFSession = (UFSession)SessionFactory.get("UFSession");
/* Create Arc using Open C API wrapper */
UFCurve ufCurve = theUFSession.curve();
UFCurve.Arc ufArc = new UFCurve.Arc();
UFCsys ufCsys = theUFSession.csys();
/* Fill out the data structure */
ufArc.startAngle = 0.0;
ufArc.endAngle = 3.0;
ufArc.arcCenter=new double[3];
ufArc.arcCenter[0] = 0.0;
ufArc.arcCenter[1] = 0.0;
ufArc.arcCenter[2] = 1.0;
ufArc.radius = 2.0;
/* Create Arc */
Tag wcsData = ufCsys.askWcs();
ufArc.matrixTag = ufCsys.askMatrixOfObject(wcsData);
Tag arcTag = ufCurve.createArc(ufArc);
/* Get the Arc Object to use with NX Open*/
Arc arc = (Arc)theSession.taggedObjectManager().get(arc2Tag);
/* Get arc parameters using NX Open Java APIs */
double start_angle = arc.startAngle();
3.NXOpen Python
下面的例子使用ufunc API生成一个圆弧并用NXOpenPython API查询圆弧数据:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17theSession = NXOpen.Session.GetSession()
theUFSession = NXOpen.UF.UFSession.GetUFSession()
# Create an ARC using the Open API
arc_coords = NXOpen.UF.Curve.Arc()
arc_coords.Radius = 1.0
arc_coords.ArcCenter = [1.0, 1.0, 0.0]
arc_coords.StartAngle = 0.0
arc_coords.EndAngle = math.pi
arc_coords.MatrixTag =
theSession.Parts.Display.WCS.CoordinateSystem.Orientation.Tag
arc_tag = theUFSession.Curve.CreateArc( arc_coords)
# Get the Arc Object to use with NX Open
nxArc = NXOpen.TaggedObjectManager.GetTaggedObject(arc_tag)
# Get the Arc parameters using NX Open APIs
start_angle = nxArc.StartAngle
end_angle = nxArc.EndAngle
arc_center = nxArc.CenterPoint