【NX二次开发】获取当前NX所有打开的部件tag、名称

问题,当打开一个部件或者新建一个部件时,必须检测当前的窗口是否已经打开的同名组件。有两种方法可以避免。

方法1:先获取窗口中的所有部件名,打开新的部件时,先检测后打开

方法2:使用UF_PART_ask_part_tag() 输入新部件名,如果返回NULL_TAG则窗口中没有打开同名部件。

 

下面介绍方法1:

用到的函数

UF_PART_ask_num_parts()   //返回当前会话中加载的部件数量。
UF_PART_ask_nth_part()       //返回会话中“第n”个部件的tag
UF_PART_ask_part_name()   //获取部件的完整部件名,例如 C:\temp\AC01.prt
uc4574()                                  //输入全路径返回结果简单文件名 输入C:\temp\AC01.prt 返回AC01

 

直接上封装源码:

//获取会话中的所有部件tag
int getPartsInTheSession(vector<tag_t> *vecParts)
{
    int iCount = 0;
    iCount = UF_PART_ask_num_parts();
    for (int i = 0; i < iCount; i++)
    {
        tag_t tagPart = UF_PART_ask_nth_part(i);
        if (tagPart != NULL_TAG)
        {
            (*vecParts).push_back(tagPart);
        }
    }
    return 0;
}

 

 短名:

//获取会话中的所有部件tag的短名  AC01
int getPartsShortNameInTheSession(vector<string> *vecPartsName)
{
    int iCount = 0;
    iCount = UF_PART_ask_num_parts();
    for (int i = 0; i < iCount; i++)
    {
        tag_t tagPart = UF_PART_ask_nth_part(i);
        if (tagPart != NULL_TAG)
        {
            int failcode = 0;
            char szPartNameTemp[1500] = "";
            char szPartNameShortTemp[257] = "";
            string strPartName = "";
            failcode = UF_PART_ask_part_name(tagPart, szPartNameTemp);
            uc4574(szPartNameTemp, 2, szPartNameShortTemp);
            strPartName = szPartNameShortTemp;
            (*vecPartsName).push_back(strPartName);
        }
    }
    return 0;
}

部件完整路径名:

//获取会话中的所有部件tag的全名  C:\temp\AC01.prt
int getPartsFullNameInTheSession(vector<string> *vecPartsName)
{
    int iCount = 0;
    iCount = UF_PART_ask_num_parts();
    for (int i = 0; i < iCount; i++)
    {
        tag_t tagPart = UF_PART_ask_nth_part(i);
        if (tagPart != NULL_TAG)
        {
            int failcode = 0;
            char szPartNameTemp[1500] = "";
            char szPartNameShortTemp[257] = "";
            string strPartName = "";
            failcode = UF_PART_ask_part_name(tagPart, szPartNameTemp);//获取完整部件名C:\temp\AC01.prt
strPartName = szPartNameTemp; (*vecPartsName).push_back(strPartName); } } return 0; }

 

posted @ 2021-03-04 15:35  王牌飞行员_里海  阅读(431)  评论(0编辑  收藏  举报