NX二次開發(fā)-檢測和獲取已打開部件

2023-02-22 10:32:30 來源:軟服之家
作者:薛劍騰 審校:葉齊天

適用版本:NX6以上

本技巧主要討論會話中存在已打開部件的情況和如何進(jìn)行檢測并獲取已打開的部件。


(資料圖片)

詳 細(xì) 內(nèi) 容本地環(huán)境下的已打開部件

在本地環(huán)境下,若我們嘗試通過PartCollection.Open()等方法去打開一個已經(jīng)存在于會話中的prt文件時會提示文件已經(jīng)存在。

事實(shí)上,根據(jù)NX內(nèi)部的規(guī)則,會話中不可能存在相同部件名的部件。而在本地環(huán)境下,會話中的部件名由文件名決定,因此,NX中不能打開兩個文件名相同的prt文件,即使他們在不同的路徑下。這樣的情況也可能發(fā)生在打開兩個獨(dú)立的裝配的時候,兩個裝配都使用了同一個名字的組件,但是事實(shí)上它們是完全不一樣的文件。這時其中一個就會直接引用另一個裝配中已經(jīng)加載了的同名部件,這樣會造成裝配的顯示不正確。

因此我們需要遍歷當(dāng)前會話中所有的已打開部件,與需要打開的文件的名稱進(jìn)行對比,代碼如下:

此處輸入值可以為需要查找文件的路徑也可以是文件名,若找到已打開或同名部件則返回此部件,否則返回空。

TC環(huán)境下的已打開部件

TC環(huán)境下不存在“同名”的部件,因?yàn)門C環(huán)境中的NX部件數(shù)據(jù)集通過對應(yīng)的item和數(shù)據(jù)集名稱作為區(qū)分。但是TC中卻存在版本的區(qū)別。因此當(dāng)會話中已經(jīng)存在一個版本,而我們嘗試打開另一個版本時NX仍然會返回上文所說的文件已存在錯誤。

這時我們可以遍歷會話中已打開部件并解析ItemID、數(shù)據(jù)集類型和數(shù)據(jù)集名稱三個數(shù)據(jù)進(jìn)行比較判斷。代碼如下:

更簡單的通用方法

通過遍歷所有打開的部件并根據(jù)部件名稱規(guī)則進(jìn)行手工的比較,這種方式需要我們寫更多的判斷代碼,而且還必須根據(jù)不同的環(huán)境應(yīng)用不同的規(guī)則,可靠程度也不高。但我們也可以使用UF函數(shù):UF_PART_ask_part_tag()來獲取會話中已經(jīng)打開的部件。在本地環(huán)境中,這個函數(shù)可以輸入prt文件的文件名或完整的文件路徑,在TC環(huán)境中輸入值可以是部件的CLI名稱(@DB/ItemID/RevisionID的形式),也可以是TC內(nèi)部的完整標(biāo)識。并且經(jīng)過測試可以發(fā)現(xiàn)即使我們輸入的是不同路徑下的同名部件,或是不同版本號的同一Item,它都會返回會話中已有的會被判斷為相同的部件。使用代碼如下:

總 結(jié)

查找會話中已存在部件是一個很重要的例行步驟,我們可以通過NX判斷相同的規(guī)則去手動查找,也可以運(yùn)用UF方法去獲取已經(jīng)存在的部件。

標(biāo)簽: 數(shù)據(jù)集名 可以使用

上一篇:
下一篇: