【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; }