找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 9331|回复: 14

[求助] UG二次开发ugupdate更新模型并输出x_t

[复制链接]

0

主题

8

回帖

64

积分

上等兵

积分
64
发表于 2018-10-16 09:56:58 | 显示全部楼层 |阅读模式
本帖最后由 znl 于 2018-10-16 09:57 编辑

小弟在网上找到c++代码实现ug模型自动根据参数文件更新,并输出x_t文件。模型更新部分没有问题,在输出x_t文件时,含有片体的模型都会报Non-body Did input。有什么办法解决吗?或者有大神能指导编一个由prt输出x_t的小程序吗,一定要能输出片体!!!!这是我找到的代码:
#include <iostream>
#include <string>
#include <uf.h>
#include <uf_modl.h>
#include <uf_ps.h>
#include <uf_obj.h>
#include <uf_assem.h>
#include <uf_part.h>
#include <uf_modl_expressions.h>
using namespace std;
/*
功能:
     用exp文件更新prt文件文,并将prt文件另存为x_t文件
调用方法:
    system("you.prt   you.exp   you.x_t")
    createprocess("you.prt","you.exp   d:\\you.x_t"...)
注意:
    文件名一定要写全,在导出时会自动删除旧的文件否则可能
    因为文件已经存在而导致导出x_t文件失败。

                                   san,nuaa,202
                    visualsan@yahoo.cn
                                   2011.11.13
*/
int  prt_save_as_xt(tag_t,string ps);
//引入lib文件,因人而异
#pragma  comment(lib,"D:\\Program Files (x86)\\UGS\\NX 5.0\\UGOPEN\\libufun.lib")
#define VISUALSAN_NUAA_202_RUN(x)\
if(0!=x)\
{\
    char msg[133];\
    UF_get_fail_message( x,msg );\
    cout<<msg;\
    return -1;\
}

int  main(int argc,char **argv)
{

    //实现初始化ug api,否则其它ug函数是无法使用的
    VISUALSAN_NUAA_202_RUN( UF_initialize() );

    //文件路径
    string  prt,ep;
    string  x_t;//x_t格式文件地址

    /*参数个数检查,
    注意用system("UG_update.exe xx.prt  yy.exp")调用时,
    默认第一个参数为exe地址,所以你的参数
    是第二个开始;用createprocess时,则参数和你传递的一样
    system("UG_update.exe xx.prt  yy.x_t")
        argv[0]=UG_update.exe argv[1]=xx.prt argv[2]=yy.exp  argv[3]=yy.x_t

    createprocess("UG_update.exe","xx.prt  yy.exp yy.x_t",....)
        argv[0]=xx.prt argv[1]=yy.exp argv[2]=yy.x_t*/

    if( argc<3 )
    {
        cerr<<"参数个数不足";
        return  -1;
    }
    //默认你是用createprocess创建线程的
    if(argc==3)
    {
        prt = argv[0];  //prt文件
        ep  = argv[1];  //exp文件
        x_t = argv[2]; //x_t文件
    }
    //否则是用system调用的
    else
    {
        prt = argv[1]; //prt文件
        ep  = argv[2]; //exp文件
        x_t = argv[3]; //x_t文件
    }

    //打开模型文件
    UF_PART_load_status_t st;
    tag_t  prt_id;
    //打开prt文件
    VISUALSAN_NUAA_202_RUN( UF_PART_open( prt.c_str(), &prt_id, &st ) );
    //更新模型文件
    VISUALSAN_NUAA_202_RUN( UF_MODL_import_exp( (char*)ep.c_str() , 0) );
    //更新模型
    VISUALSAN_NUAA_202_RUN( UF_MODL_update() );
    //写入文件
    VISUALSAN_NUAA_202_RUN( UF_PART_save() );

    //另存为x_t文件
    if( -1 == prt_save_as_xt(prt_id,x_t) )
        return -1;

    //关闭prt文件
    VISUALSAN_NUAA_202_RUN( UF_PART_close(prt_id,1,1) );
    VISUALSAN_NUAA_202_RUN( UF_PART_free_load_status(&st) );
    //退出前UF_terminate调用清理
    VISUALSAN_NUAA_202_RUN( UF_terminate() );

    return 0;
}
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;
}

0

主题

8

回帖

64

积分

上等兵

积分
64
 楼主| 发表于 2018-10-16 16:22:09 | 显示全部楼层
没有人知道该怎么处理吗?

0

主题

8

回帖

64

积分

上等兵

积分
64
 楼主| 发表于 2018-10-18 08:27:05 | 显示全部楼层
或者写一个把prt转换成parasolid的小程序

0

主题

32

回帖

95

积分

禁止访问

积分
95
发表于 2018-10-18 22:07:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

10

回帖

89

积分

上等兵

积分
89
发表于 2018-11-15 00:15:23 | 显示全部楼层
请问楼主的问题解决了吗?我也有类似这方面的问题想咨询一下

0

主题

10

回帖

89

积分

上等兵

积分
89
发表于 2018-11-15 00:36:45 | 显示全部楼层
请问楼主问题解决了吗

0

主题

1

回帖

60

积分

上等兵

积分
60
发表于 2019-9-23 09:50:24 | 显示全部楼层
您好,方便加个联系方式吗,我也有类似的UG二次开发问题,走投无路想请教您,我QQ1826459051,谢谢您

0

主题

6

回帖

52

积分

上等兵

积分
52
发表于 2020-2-11 11:37:29 | 显示全部楼层
我也在寻找与isight集成的UpDATE程序,也找到与楼主相同的程序了,没法用,哪位大神能够解决这种问题啊?

0

主题

6

回帖

52

积分

上等兵

积分
52
发表于 2020-2-11 11:38:08 | 显示全部楼层
我也遇到了此类问题,哪位大神恩能够给就解决一下啊?

0

主题

32

回帖

95

积分

禁止访问

积分
95
发表于 2020-2-11 20:12:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2024-12-23 02:02

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表