1. 程式人生 > 實用技巧 >NX二次開發-UFUN有裝配例項名字得到例項tag UF_ASSEM_ask_instance_of_name

NX二次開發-UFUN有裝配例項名字得到例項tag UF_ASSEM_ask_instance_of_name

NX9+VS2012

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


static int select_filter_proc_fn(tag_t object, int type[3], void* user_data, UF_UI_selection_p_t select)
{
    if (object == NULL)
    {
        return UF_UI_SEL_REJECT;
    }
    else
    {
        return UF_UI_SEL_ACCEPT;
    }
}

static int init_proc(UF_UI_selection_p_t select, void* user_data)
{
    int num_triples = 1;//可選型別的數量
    UF_UI_mask_t mask_triples[] =
    { UF_component_type, UF_UI_SEL_NOT_A_FEATURE,
    };//可選物件型別
    UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples);
    if ((UF_UI_set_sel_procs(select, select_filter_proc_fn, NULL, user_data)) == 0)
    {
        return UF_UI_SEL_SUCCESS;
    }
    else
    {
        return UF_UI_SEL_FAILURE;
    }
}


 UF_initialize();
 
 //單物件選擇對話方塊
 char sCue[] = "單物件選擇對話方塊";
 char sTitle[] = "選擇一個裝配元件";
 int iScope = UF_UI_SEL_SCOPE_NO_CHANGE;
 int iResponse;
 tag_t tView;
 double adCursor[3];
 tag_t ComponentTag = NULL_TAG;//單選控制元件獲得的tag
 UF_UI_select_with_single_dialog(sCue, sTitle, iScope, init_proc, NULL, &iResponse, &ComponentTag, adCursor, &tView);
 
 //獲取裝配部件的相關資訊
 char part_name[MAX_FSPEC_BUFSIZE];//零件名稱
 char refset_name[UF_OBJ_NAME_BUFSIZE];//引用集名稱
 char instance_name[UF_CFI_MAX_FILE_NAME_BUFSIZE];//例項名稱
 double origin[3];//元件的位置
 double csys_matrix[9];//座標系矩陣
 double transform[4][4];//轉換矩陣
 UF_ASSEM_ask_component_data(ComponentTag, part_name, refset_name, instance_name, origin, csys_matrix, transform);
 
 //由名字得到裝配部件例項的TAG
 tag_t instanceTAG = UF_ASSEM_ask_instance_of_name(UF_PART_ask_display_part(), instance_name);
 
 //移動元件
 double newOrigin[3] = {100, 100, 100};
 UF_ASSEM_reposition_instance(instanceTAG, newOrigin, csys_matrix);
 
 UF_terminate();

Caesar盧尚宇
2020年9月19日