UG二次开发之NX对象模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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—这个状态表明一个对象由于关联到其他对象,仍然存在文件
中.通常,这是一个对象删除的结果,但是由于这个对象被其他对象引用,又暂时不能立刻
删除.当最后一个引用被移除,这个对象也就从模型中删除了.Condemned objects从不显示,但是可以安全查询. 例如矩阵,当所有依赖于这个矩阵来定位方向的对象,当这些对象的定位依赖于其他矩阵时,这个矩阵就被移除出了文件.
4.UF_OBJ_ALIVE—这个状态表示这个对象仍然存活
在所有UF对象中通用的方法:
●naming (使用函数UF_OBJ_set_name, UF_OBJ_ask_name, and
UF_OBJ_delete_name)
这些函数允许访问和分配每一个单独对象的名字.
●cycling (使用函数UF_OBJ_cycle_objs_in_part, UF_OBJ_cycle_all, and
UF_OBJ_cycle_by_name)
为了理解cycling,最好首先理解这些对象如何在内存中存储.下图1概念性的解释了这些对象怎么存储.
Figure 1UFObjects