一般的对象访问路径
Session.GetSession() //Session
Session.Parts //Part-Collection
Part.Bodies //Body-Collection,使用CType(bodyObject, Object)方法可以BODY类型转换为Object类型,然后可以使用FACE和EDGE的相关方法操作对象;
Body.GetFaces() //face数组
Body.GetEdges() //Edge数组
Face.GetEdges() //Edge数组
Face.GetBody() //Body对象
Edge.GetFaces() //face数组
Edge.GetBody() //Body对象
feature的创建和编辑方法
大多数的feature是通过特征集合features 的builder 对象进行创建和编辑,此类feature都有一个与之相对应的builder 类;所有的feature类和与之对应builder 类的都在NXOpen.Features命名空间中定义;
Part类有一个FeatureCollection类型的属性Features,这个类中有创建各种feature builder 对象的方法;
也有一些特征通过特征自身的constructor 方法进行创建;
使用builder 方法创建一个新特征的方法:
- 创建一个Feature 空对象;
- 使用Part的Features属性的创建指定类型feature builder 的方法创建一个指定类型的feature builder 类对象;该方法使用一个指定类型的feature对象为参数,返回一个指定类型的feature builder 类对象;
- 使用创建的指定类型的feature builder 类对象设定各项参数后使用feature builder 类对象的Commit方法生成该类feature对象;Commit没有参数,返回值为一个指定类型的feature对象;
- 使用的feature builder对象的Destroy方法销毁该对象;
编辑一个feature时的过程如下:
- 将需要修改的feature做为参数使用Part的Features属性的feature builder 的方法创建与其相对应的feature builder 类对象;
- 对该feature builder 类对象设置其中的参数并COMMIT和DESTROY即可;
删除对象
NXOPEN命名空间内有一个类:UPDATE,该类中有一个方法:AddToDeleteList(),该方法可以接受一个NXOBJECT或一个NXOBJECT数组做为参数,将其加入全局的删除列表,在更新时将会删除对象;相应的有一个RemoveFromDeleteList方法可以将其由全局删除列表中去掉;
这个全局的UPDATE对象使用SESSION的属性UpdateManager得到;
草图开发
Part对象的属性Sketches可以得到SketchCollection类的对象,该对象中有创建各类草图BUILDER的方法(线上点,平面等),创建草图的方法如同上述FEATURE,生成SKERTCH类对象后,该类对象有CREATEGEOMETRY的方法,可以在草图中创建点和线;
集合类
NX的TaggedObjectCollection类(注意不是Collection类,NX中有一个Collection类与此有很大不同)派生了许多针对各种类型对象的集合类。
集合类大多都有方法:FindObject(),可以通过一个用于表达对象名称的字符串型的参数得到该对象;
集合类大多都有方法:CreatexxxBuilder(xxx),这里的xxx指的是该类型,因而可以由此建立一个此类对象的builder,进而建立此类对象;有的集合类是直接建立此类对象,而无需使用相应的builder类进行;
这些集合类型的对象是Part对象的属性;但需要注意的是并不是所有的集合派生类都有这个方法,PlaneCollection就没有这个方法;
ScCollector 类
注意,这个是Collector而非Collection,代表一个选择集,这个选择集也有相应的集合类,为ScCollectorCollection类。这个选择集中的内容可以使用GetObject方法得到,这个选择集中的对象是通过设置其中的rule来进行的,rule是通过ReplaceRules方法设置的,这个方法使用SelectionIntentRule类型(选择意图规则)的数组做为参数;
SelectionIntentRule类是一个基础类,其派生出了针对各类不同类型对象的相应的选择意图规则类,这些派生类中都有一个方法GetData,用于获取指定类型对象。选择意图规则类型大多是名称A+名称B+Rule组成,其表达的意见为名称B相关的名称A对象,例如EdgeFaceRule表达的是一个FACE相关的所有EDGE形成的选择意图规则;名称B的一个特殊是Dumb,指的是没有限制的名称A对象;
各个选择意图规则类的对象是通过ScRuleFactory类对象创建的,该类中有创建各类选择意图规则类对象的方法(这个方法的命名一般是CreateRule+名称A+名称B),该方法的参数是名称B类型的对象数组(对于名称B为dumb的,为名称A类型的对象数组),ScRuleFactory类对象可通过PART的ScRuleFactory属性得到;
tool builder类
NX中有一类tool builder类,此类对象一般用做其它操作的属性,用于设置一些进行操作需要设置的内容,如切割时的切割面便是一个tool builder。有的工具的目标对象是需要使用collector来设置的。
PART类
part对象有一个属性leaf,这就是在界面的模型树上看到的名称,part的NAME属性并不是真正的名称。
UI取值
主要的几类UI如下所示:
UI元素 | UI类 |
EDITBOX,带公式变量等 | Expression |
下拉列表 | Enumeration |
CHECKBOX | toggle |
BUTTON | BUTTON |
group | GROUP |
选择框按类型不同分为不同的选择控件,使用不同的选择类,一般类名为:select+类型名称,或specify+类型名称;
所有这些类均继承自uiblock类,这个类具有一个方法GetProperties(),该方法可以返回一个PropertyList 类型的对象(不需要参数),该类型有一系列的GET方法,方法名为GET+数据类型(int,bool,double等),该方法一般需要一个属性名称字符串做为参数,一般情况下需要的以VALUE,SelectedObjects居多;这个GET的数据类型可以在界面设计器中的TYPE列得到,如下图中的绿色区域;这个属性名称可以在属性设计器的PROPERTY列得到,如下图中的红色区域;另外该类型还有一系列的SET+类型的方法,可以设置一些属性,比较常用的有SetTaggedObjectVector,可以将一些对象添加至现有选择集中。
提示消息
NX的消息提示框类为:NXMessageBox,其SHOW函数可以显示一个消息框。一个进程的唯一一个实例UI的静态函数GETUI可返回UI实例,UI实例中的属性NXMessageBox可以返回一个此类对象。
关于名称
在模型树上看到的名称大多的属性名不是NAME,对于PART而言,属性为LEAF,对于BODY而言,属性为journalIdentifier;
matrix3x3
这个对象一般是用来表示两个坐标系间的欧拉角余弦值的。
如一个基准平面处于总体坐标系的YZ平面中,由于基准平面的的局部坐标系面内是X和Y,法向是Z;
因而这个matrix3x3表示的就是基准平面局部坐标系各轴与总体坐标系各轴间夹角的余弦值,上述基准平面若其X轴与总体Y轴平行,Y与总体Z轴平行,则它们的matrix3x3为如下所示:
matrix1.Xx = 0.0;
matrix1.Xy = 1.0;
matrix1.Xz = 0.0;
matrix1.Yx = 0.0;
matrix1.Yy = 0.0;
matrix1.Yz = 1.0;
matrix1.Zx = 1.0;
matrix1.Zy = 0.0;
matrix1.Zz = 0.0;
这其中小写的xyz表示的是总体坐标系的三轴,大写的XYZ是所述对象的局部坐标系的三轴;
界面中的FileSelection
这个控件用来选择一个本地文件,但是如果一个界面中添加一个此类控件,则默认的文件过滤类型的PRT,即使修改也还是PRT,解决办法是添加两个此类控件,将第一个不显示,第二个设置FILter为".txt",使用第二个即可。
获取选中的文件使用该控件的Path属性;
选择控件bodyselection
使用如下所示,其中的bodySelect0为该选择控件的名称
Taggedobject[] TagObjs bodySelect0.GetSelectedobjects();
Body bdy =(Body)TagObjs[0];
重复生成多个某类对象
若要重复生成多个某类对象,其FeatureBuilder必须处于循环体内,每次生成一个,否则将只生成最后一个,如下生成多个点:
Part workPart theSession.Parts.Work;
string str_path this.file_path.Path;
StreamReader sr new StreamReader(str_path);
string str_line null;
string[] str_coords null;
Point pt null;
while (!sr.EndofStream)
str_line sr.ReadLine();
str_coords str_line.Split(',')
pt workPart.Points.CreatePoint(new Point3d(Convert.ToDouble(str_coords[0]),Convert.ToDouble(str_coords[1]),Con
PointFeatureBuilder fb_pt workPart.BaseFeatures.CreatePointFeatureBuilder(null);
fb_pt.Point pt;
fb_pt.Commit();
fb_pt.Destroy();
结构树组织
NX左侧的树称之为assembly(装配)导航树,一个ASSEMBLY下可以有多个ASSEMBLY或COMPONENT(部件);
ASSEMBLY在树中以三个方块表示,COMPONENT是一个方块。
每个assembly和COMPONENT节点都分生成一个PART文件;也就是说,assembly和COMPONENT是PART的两种不同类型,不同之处在于assembly下可以包含COMPONENT和assembly,而COMPONENT下不能包含这些;但NX允许向一个COMPONENT下添加COMPONENT,此时原来的COMPONENT将自动变为assembly,这种行为在程序实现上是通过COMPONENT的PART对象的ComponentAssembly属性获得一个此类对象再添加;
NX中表示这些对象使用的类为:assembly、COMPONENT、PART;
assembly对象中有属性owningpart表示自身所代表的PART对象;COMPONENT对象中同样有这个属性;