(资料图片仅供参考)
适用版本:NX所有版本
在NX软件中进行装配的二次开发时,我们经常遍历整个装配树。遍历整个装配树时,我们首先需要获取整个树的根节点。获取整个树的根节点有两种方法,一种通过UF函数UF_ASSEM_ask_root_part_occ获取当前显示部件的树根节点,另一种方法通过显示部件Part类的ComponentAssembly属性的RootComponent属性获取树的根节点。至此,两种方法都是获取顶级显示部件的根节点,假若当我们获取装配树中子节点的Part,能否获取到其的RootComponent呢?如果能获取这个又代表了什么呢?
功能说明下面我们进行这样的一个有趣的实验。遍历装配树,获取装配树下的一个子节点Component,获取该Component的原型,将该Component原型转换为Part类,通过Part类的ComponentAssembly属性获取RootComponent。至此,我们发现该RootComponent在内核中是实实在在存在的,并且是一个Component类型。同样地我们通过UF函数UF_ASSEM_ask_root_part_occ也可以获取同样Tag号的对象。那么这个对象代表什么呢?我们在当前显示部件下的整个装配树中并没有找到对应的组件。那这个对象到底代表什么呢?
图1
在我们苦苦思索的时候,我们不妨想一想,在什么时候我们才会获取RootComponent。返璞归真,回到出发点上,我们会发现,原来我们针对显示部件才会获取RootComponent。这时,我们尝试把上一步获取RootComponent的子节点设置为显示部件,此时,我们再去获取新显示部件的RootComponent,发现该RootComponent即为我们之前获取的RootComponent。至此,我们发现装配子节点Part的RootComponent的意义了。
总 结通过上面的实验以及分析,我们发现NX加载一个装配的时候,不仅仅将当前显示部件的装配树结构加载到内存中了,而且针对当前显示部件的装配树中每个小树结构都在内存中进行了设置。所以,我们针对子节点Part获取RootComponent时,可以获取该RootComponent对象,并且该对象即为当该Part作为显示部件时的RootComponent对象。