NX二次开发-UFUN获得装配树根tag UF_ASSEM_ask_root_part_occ

NX9+VS2012

#include <uf.h>
#include <uf_assem.h>
#include <uf_ui.h>
#include <uf_part.h>



//递归遍历所有装配
void ASSEM_cycle_all_part(tag_t parent_part_occ)
{
    //遍历根的子组件
    tag_t* child_part_occs = NULL_TAG;
    int part_num = UF_ASSEM_ask_part_occ_children(parent_part_occ, &child_part_occs);
    for (int i = 0; i < part_num; i++)
    {
        //获取装配部件的相关信息
        char part_name[MAX_FSPEC_BUFSIZE];//零件名称
        char refset_name[UF_OBJ_NAME_BUFSIZE];//引用集名称
        char instance_name[UF_CFI_MAX_FILE_NAME_BUFSIZE];//实例名称
        double originA[3];//组件的位置
        double csys_matrix[9];//坐标系矩阵
        double transform[4][4];//转换矩阵
        UF_ASSEM_ask_component_data(child_part_occs[i], part_name, refset_name, instance_name, originA, csys_matrix, transform);

        UF_UI_write_listing_window(part_name);
        UF_UI_write_listing_window("
");

        ASSEM_cycle_all_part(child_part_occs[i]);
    }

    //释放
    UF_free(child_part_occs);
}




UF_initialize();

//获得装配树根
tag_t RootTag = UF_ASSEM_ask_root_part_occ(UF_PART_ask_display_part());

UF_UI_open_listing_window();
//遍历根的子组件
tag_t* child_part_occs = NULL_TAG;
int part_num = UF_ASSEM_ask_part_occ_children(RootTag, &child_part_occs);
for (int i = 0; i < part_num; i++)
{
    //获取装配部件的相关信息
    char part_name[MAX_FSPEC_BUFSIZE];//零件名称
    char refset_name[UF_OBJ_NAME_BUFSIZE];//引用集名称
    char instance_name[UF_CFI_MAX_FILE_NAME_BUFSIZE];//实例名称
    double originA[3];//组件的位置
    double csys_matrix[9];//坐标系矩阵
    double transform[4][4];//转换矩阵
    UF_ASSEM_ask_component_data(child_part_occs[i], part_name, refset_name, instance_name, originA, csys_matrix, transform);

    UF_UI_write_listing_window(part_name);
    UF_UI_write_listing_window("
");

    //进入递归
    ASSEM_cycle_all_part(child_part_occs[i]);

}

//释放
UF_free(child_part_occs);

UF_terminate();


Caesar卢尚宇
2020年9月19日

原文地址:https://www.cnblogs.com/nxopen2018/p/13696620.html