NX二次开发-检测和获取已打开部件

2023-02-22 10:32:30 来源:软服之家
作者:薛剑腾 审校:叶齐天

适用版本:NX6以上

本技巧主要讨论会话中存在已打开部件的情况和如何进行检测并获取已打开的部件。


(资料图片)

详 细 内 容本地环境下的已打开部件

在本地环境下,若我们尝试通过PartCollection.Open()等方法去打开一个已经存在于会话中的prt文件时会提示文件已经存在。

事实上,根据NX内部的规则,会话中不可能存在相同部件名的部件。而在本地环境下,会话中的部件名由文件名决定,因此,NX中不能打开两个文件名相同的prt文件,即使他们在不同的路径下。这样的情况也可能发生在打开两个独立的装配的时候,两个装配都使用了同一个名字的组件,但是事实上它们是完全不一样的文件。这时其中一个就会直接引用另一个装配中已经加载了的同名部件,这样会造成装配的显示不正确。

因此我们需要遍历当前会话中所有的已打开部件,与需要打开的文件的名称进行对比,代码如下:

此处输入值可以为需要查找文件的路径也可以是文件名,若找到已打开或同名部件则返回此部件,否则返回空。

TC环境下的已打开部件

TC环境下不存在“同名”的部件,因为TC环境中的NX部件数据集通过对应的item和数据集名称作为区分。但是TC中却存在版本的区别。因此当会话中已经存在一个版本,而我们尝试打开另一个版本时NX仍然会返回上文所说的文件已存在错误。

这时我们可以遍历会话中已打开部件并解析ItemID、数据集类型和数据集名称三个数据进行比较判断。代码如下:

更简单的通用方法

通过遍历所有打开的部件并根据部件名称规则进行手工的比较,这种方式需要我们写更多的判断代码,而且还必须根据不同的环境应用不同的规则,可靠程度也不高。但我们也可以使用UF函数:UF_PART_ask_part_tag()来获取会话中已经打开的部件。在本地环境中,这个函数可以输入prt文件的文件名或完整的文件路径,在TC环境中输入值可以是部件的CLI名称(@DB/ItemID/RevisionID的形式),也可以是TC内部的完整标识。并且经过测试可以发现即使我们输入的是不同路径下的同名部件,或是不同版本号的同一Item,它都会返回会话中已有的会被判断为相同的部件。使用代码如下:

总 结

查找会话中已存在部件是一个很重要的例行步骤,我们可以通过NX判断相同的规则去手动查找,也可以运用UF方法去获取已经存在的部件。

标签: 数据集名 可以使用

上一篇:
下一篇: