UG二次开发之NX对象模型 下载本文

NX对象模型

对NX的对象,根据对象的目的和对象与其他对象之间的关系,NX用不同方式来操作它们.对象可能是面向设计的(如孔特征),面向草图的(如尺寸),面向分析的(如一个节点),或面向制造的(如刀具轨迹toolpath).这一章界定了围绕NX对象模型的一些概念,来帮助开发者访问,修改NX零件中的对象.

Tags标签

每一个NX对象都通过一个tag(术语*实体标识符*,或EID是tag以前的称呼)来引用.一个tag的在内存中的实际物理表示是一个无符号整数.在头文件uf_defs.h中,Tags被C语言通过typedef定义为tag_t.当NX零件被加载进内存中时,tags是零件中每一个对象独一无二的标识符,用以识别每个零件.

有一个特殊的tag值NULL_TAG,不会赋给任何NX对象, NULL_TAG也在uf_def.h中定义. 虽然目前NULL_TAG被赋值为0,但是你不应该假定0就等同于NULL_TAG, 而应该使用常量符号NULL_TAG.NULL_TAG被使用在很多场合,最常用的场合是:

? 验证对象是否创建:习惯上, 创建对象的程序会返回新建对象的tag.如果因为某些原因

(如输入参数不合适)创建失败,那么NULL_TAG就会返回. ? 通知循环程序的开始和结束

在一个NX会话session中,每一个加载的对象都有他独一无二的tag. 然而,当跨多个NX会话时, 分配给一个对象的Tag并不是持久的,并且在相同NX会话中,当一个零件多次使用时tag也不是持久的. 而且tags可以在一个单独的Session中重用.例如,如果一个几何特征被

创建,随后被删除,那么创建几何特征时分配的tag可以在随后时间分配给相同会话中创建的新的几何特征.通常,如果一个零件在会话中关闭,和关闭零件相关联的所有tags可以在随后分配给会话中未关闭的零件或新加载的零件.

理解tag最重要的事就是:一个对象的tag在不同会话中有不同值,在同一个会话中,关闭并重新加载零件,关联到对象上的tag不是持久的.( UG文档中此处为persistent,但根据上下文,此处应该为非持久的).

Classes of Objects对象的类

所有的NX对象都通过独特的标识符(如tag)来引用.这些NX对象可以分类如下: ? UFobjects(定义在 uf_object_typed.h中的类型) ? Expressions ? Parts

对大多数零件,有不同的函数对应于不同类的对象.

有一个额外的对象的类可以通过OpenC和C++访问:Parasolid对象.Parasolid是NX内部使用的几何建模器.Parasolid对象也是用一个tag来标识,但是Parasolid的tag和NXtag是不兼容的. Parasolid的tag只在头文件uf_ps.h里的函数中使用.虽然我们不鼓励混合使用 OpenCAPI和 Parasolid函数,但是uf_ps.h里的函数可以让你直接访问嵌入在NX模型里的Parasolid基对象,或者向NX模型里添加新的Parasolid对象.

UFObjectsUF对象

到目前为止,NX中的最常见对象都是在头文件uf_object_types.h中定义的对象.这些对象具

有某些共享信息和共享函数.但是这些对象的一个特殊子类,用以控制对象的显示的类,有额外的函数和共享信息.

在UF对象间共享信息和函数

所有的UF对象具有随下共享信息:

? A type类型—所有的类型都在uf_object_types.h中列出并在很多函数中都会用到. 一

个对象的类型可以通过UF_OBJ_ask_type_and_subtype来获得.

? A subtype子类型—所有的子类型都在uf_object_types.h中列出并在很多函数中都会用

到.虽然所有的对象都有能力使用子类型来更好的描述实际对象,但是不是所有的对象都使用了子类型. 一个对象的子类型也可以通过UF_OBJ_ask_type_and_subtype来获得.

? Astatus状态—状态可以通过UF_OBJ_ask_status来获得.状态可以是如下的一种: 1. UF_OBJ_DELETED—这个状态表明输入的tag曾被使用但是对象已经被删除.但是你

不应该依赖这个来确定对象是否被删除.就像前文提到的,在一个会话中tag可以被重用,所以原来用来标记一个对象的tag可能被用来标记另外一个新的对象了.例如,你在静态变量里保存了一个对象的tag,这个对象随后被删除了,但是当你查询这个tag对用对象的状态时,可能会报告删除,或者也可能报告仍存活,此时这个独一无二的tag被用来标识一个不同的对象—这取决于tag是否被重用了.

2. UF_OBJ_TEMPORARY—这个状态表明这个对象是瞬时的,并没有存到文件里.例如用

UF_CSYS_create_temp_csys创建一个临时坐标系.

3. UF_OBJ_CONDEMNED—这个状态表明一个对象由于关联到其他对象,仍然存在文件

中.通常,这是一个对象删除的结果,但是由于这个对象被其他对象引用,又暂时不能立刻