在UG二次开发的cam模块下,通常需要打印出树结构下的全部名称,在这里给出打印程序视图下所有程序组名称(包括子级程序组名称)的代码。这里使用树的层次遍历算法,并将树的根设定为NC_pragram(一级根组),在NC_pragram(一级根组)节点下的为二级根组,对应于树的子结点,以此类推。关于这里的根组概念可以参考:https://blog.csdn.net/qq_43484853/article/details/105704742。
UF_initialize();
//根
tag_t setup_tag=NULL_TAG;
tag_t program_group=NULL_TAG;
UF_SETUP_ask_setup (&setup_tag);
//程序试图的根
UF_SETUP_ask_program_root(setup_tag,&program_group);
//UI控件变量
std::vector<NXString>proList;
//使用队列存储tag_t
std::queue<tag_t> q;
//ask_member_list
int count=0;
tag_t* list=NULL;
tag_t list_1=NULL;
//ask_name
char name[UF_OBJ_NAME_LEN+1];
//ask_type_and_subtype
int type=0;
int subtype=0;
//添加"NC_PROGRAM"根节点的名称
proList.push_back("NC_PROGRAM");
UF_UI_open_listing_window();
UF_UI_write_listing_window("NC_PROGRAM");
UF_UI_write_listing_window("\n");
//使用队列遍历
q.push(program_group);//添加根节点的tag
while (!q.empty())
{
list_1=q.front();
q.pop();
UF_NCGROUP_ask_member_list(list_1,&count,&list);
for (int i=0;i<count;i++)
{
q.push(list[i]);
UF_OBJ_ask_type_and_subtype(list[i],&type,&subtype);
if (type==UF_machining_task_type && subtype==UF_mach_order_task_subtype)
{
UF_OBJ_ask_name(list[i],name);
UF_UI_open_listing_window();
UF_UI_write_listing_window(name);
UF_UI_write_listing_window("\n");
}
}
}
UF_terminate();