StarSoul

学历代表过去,能力代表现在,学习力代表未来!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NX中对象的标识

Posted on 2011-05-19 18:06  StarSoul  阅读(2860)  评论(2)    收藏  举报

1.Tag

Tag是对象的唯一标识符,它仅仅是把一个UG对象载入内存时的标示符,是流水号,在prt保存再打开后,Tag就会变。

UF中对象标识符用tag_t表示,tag_t 在UG/Open API头文件uf_defs.h里被定义:typedef unsigned int tag_t,实际是无符号整数。

在NXOpen中,系统把tag_t映射为NXOpen.Tag,定义为public enum Tag。

UG中访问对象必须使用tag。比如查询UG对象的类型,UG对象的类型和子类型定义在uf_obiect_types.h中,查询可通过NXOpen.UF命名空间的UFObj.AskTypeAndSubtype(Tag, Int32, Int32),它是NXOpen对于UF函数UF_OBJ_ask_type_and_subtype的封装。

2.Handle

在uf.h中有一段注释如下:Multiple parts can be loaded into NX during a single session, and the Tag (i.e. Object Identifier) cannot be guaranteed between sessions. Consequently, "handles" were created to identify objects between sessions. This handle is persistent between sessions.

UF中,每个UG对象有个Handle,Handle是个编码字符串,它是唯一的(在该文件中),是可以保存的,同一个对象,无论你对该文件操作了多少次,打开了多少次,它都是不变的。但我发现NXOpen中代表一个.prt部件的Part对象的Handle每次重新打开后都是不一样的。
UFTag.AskHandleOfTag(Tag)(UF_TAG_ask_handle_of_tag的封装)用来根据Tag获得句柄。

UFTag.ASKTagOfHandle(string)(UF_TAG_ask_tag_of_handle的封装)用来根据句柄获得Tag。

经过解析后,一个Handle可以分解成文件信息、ID信息和版本信息,实际上Handle就是由这三种信息拼成的字符串。

UFTag.DecomposeHandle(string handle,out string file_data,out uint sub_file_id,out uint version)(UF_TAG_decompose_handle的封装)解析Handle。

UFTag.ComposeHandle(string,uint,uint,out string)(UF_TAG_compose_handle的封装)重新组合Handle。

上面的sub_file_id,UF中解释为"Sub-file identifier for handle. The sub_file is an internal file in the part file database." 相当于Tag,不过在一个文件里是不变的。handle太长,又是字符串,使用不方便,所以经常使用的是这个ID。

3.Journal Identifier

NXObject类有个只读属性JournalIdentifier,字符串类型,解释为"Returns the identifier that would be recorded in a journal for this object",在Journal中对象的标识。它作为NXObject.FindObject(string journalIdentifier)的传入参数来查找一个NXObject对象。一般来说,FindObject不在手写的代码中使用,存在是为了支持Journal的录制和回放。