
适用版本:NX所有版本

在我们分析NX三维设计软件的架构时以及针对业务需求进行二次开发时,不可避免地会涉及使用到内核对象。在NX中,内核对象的唯一标识有两种系统,一种唯一标识简称为Handle,另一种唯一标识简称为Tag。

上述内核的两种唯一标识的区别:
Tag:在当前会话中,即在当前NX进程中,NX内核系统分配的一串唯一标记的数字代 。NX重新打开同一文件,同一对象的Tag会出现不一样的情况。
Handle:由文件中记录的对象ID以及NX版本等信息组合成一串唯一字符串代 。NX重新打开同一文件,同一对象的Handle一直会保持一样的。
上述内核的两种唯一标识的联系:
通过如下图所示的两个UF函数可以互相进行查询:
UF_TAG_ask_tag_of_handle函数通过Handle标识可以获取Tag标识:

图1
UF_TAG_ask_handle_of_tag函数通过Tag标识获取Handle标识:

图2
Handle与Tag可以互相转化,handle值一般情况下是不会发生变化的,Tag值是每次打开NX随机分配一个ID。所以在开发过程中为了记录对象,可以记录它的Handle值,下次打开时再转化成Tag值,就能进行数据处理。

图3
Handle值可以解析成3个数据:当前模型信息、对象的原始ID,模型版本,其中原始ID是始终不变的,但是模型信息和模型版本会发生变化。
模型另存为或者克隆的时候,模型名称发生变化了,所以模型信息就发生了变化;模型进行修改然后保存的时候,模型的版本 也会自动提升。
对应解析函数,还有一个构造函数:

图4
如果模型是另存或者克隆后,一个记录了Handle值的对象,解析它的Handle值,它的中间的原始对象ID还是不会发生变化的,只是模型名称发生了变化。
通过获取当前部件中任意对象的Tag然后转化成Handle值,再解析成3个数据,取模型数据和模型版本再与之前对象的原始ID重新组合成一个新的Handle,然后再转化成Tag,就是标记对象的新Tag值,可以拿来使用。
如果模型只是修改,版本升级了,原来的handle值依旧可用,可以直接转化成Tag值。

一个NX的对象对应的Handle值中的原始ID始终是不会发生变化的,只会跟着对象被删除,也一起被删除,所以在开发过程中遇到这阵情况,需求尝试记录它一般不会被删除的父对象的Handle值。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!