点击查看详细介绍

UG API 求助 写或者改一个转化prt为parasolid后者igs的程序 已解决

znl515901 7年前 2822 2

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


工作中遇到问题需要写一个把prt格式转化成x_t或者igs格式的程序,模型中包含有片体,网上找到的程序不能包含片体,求助大神

int  prt_save_as_xt(tag_t body_tag,string ps)
{
    //没有后缀名时,加上后缀名
    if( std::string::npos == ps.find( ".x_t" ))
        ps += ".x_t";
    //引用代码:Ug2Ansys.cpp  李 响, 中国地质大学( *** ) 2006.12.31
    uf_list_p_t body_list;
    // 获得装配树根事例root_part_occ, 当函数返回NULL_TAG时, 表明当前部件文件中没有装配(即单个部件)
    tag_t root_part_occ = UF_ASSEM_ask_root_part_occ( body_tag );
    VISUALSAN_NUAA_202_RUN( UF_MODL_create_list(&body_list) );
    // 如果是单个部件
    if(root_part_occ == NULL_TAG)
    {
        tag_t object = NULL_TAG;
        int UF_body_type;
        int type;
        int subtype;
        do{
            VISUALSAN_NUAA_202_RUN(
                UF_OBJ_cycle_objs_in_part(body_tag, UF_solid_type, &object)
                );
            if(object != NULL_TAG)
            {
                VISUALSAN_NUAA_202_RUN(
                    UF_OBJ_ask_type_and_subtype(object, &type, &subtype)
                    );
                VISUALSAN_NUAA_202_RUN(
                    UF_MODL_ask_body_type(object, &UF_body_type)
                    );if(subtype != UF_solid_body_subtype)
                    continue;
                if(UF_body_type == UF_MODL_SOLID_BODY)
                {
                    VISUALSAN_NUAA_202_RUN(
                        UF_MODL_put_list_item(body_list, object)
                        );
                    break;
                }
            }
        }while(1);
}
    //如果是装配体
    else
    {
        tag_t obj = UF_ASSEM_ask_prototype_of_occ(root_part_occ);
        tag_t object = NULL_TAG;
        int UF_body_type;
        int type;
        int subtype;
        do
        {
            VISUALSAN_NUAA_202_RUN(
                UF_OBJ_cycle_objs_in_part(body_tag, UF_solid_type, &object) );
            if(object != NULL_TAG)
            {
                VISUALSAN_NUAA_202_RUN(
                    UF_OBJ_ask_type_and_subtype(object, &type, &subtype) );
                // 判断body是否是一个Solid或Sheet
                VISUALSAN_NUAA_202_RUN(
                    UF_MODL_ask_body_type(object, &UF_body_type) );
if(subtype != UF_solid_body_subtype)
                    continue;
                if(UF_body_type == UF_MODL_SOLID_BODY)
                {
                    // 将对象加入到链表的尾部
                    VISUALSAN_NUAA_202_RUN(
                        UF_MODL_put_list_item(body_list, object) );
                }
            }
            else
            {
                break;
            }
}while(1);
}
// 如果文件存在, 先删除
    remove( ps.c_str() );
    // 创建Parasolid文件
    VISUALSAN_NUAA_202_RUN(
        UF_PS_export_data(body_list,  (char*)ps.c_str() ) );
    // 删除链表
    VISUALSAN_NUAA_202_RUN(
        UF_MODL_delete_list(&body_list) );
return 0;
}


2

最新回复 (2)
  • 狙击兴 VIP会员 7年前
    1

    把这段代码

    if(subtype != UF_solid_body_subtype)
                        continue;
                    if(UF_body_type == UF_MODL_SOLID_BODY)
                    {
                        // 将对象加入到链表的尾部
                        VISUALSAN_NUAA_202_RUN(
                            UF_MODL_put_list_item(body_list, object) );
                    }

    改成

    if(subtype != UF_solid_body_subtype)
                        continue;
                    if((UF_body_type== UF_MODL_SOLID_BODY)
                        ||(UF_body_type == UF_MODL_SHEET_BODY))
                    {
                        // 将对象加入到链表的尾部
                        VISUALSAN_NUAA_202_RUN(
                            UF_MODL_put_list_item(body_list, object) );
                    }


  • nxopen 6年前
    2

    楼上正确,注意添加代码 UF_body_type == UF_MODL_SHEET_BODY

请登录后发表新帖