QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 5704|回复: 8

[求助] .prt文件的装配体导出.x_t的二次开发问题

[复制链接]

上等兵

Rank: 1

1

主题

0

帖子

51

积分
发表于 2014-9-10 22:20:53 | 显示全部楼层 |阅读模式
想不打开UG界面,直接用一个.exe文件把prt格式导出x_t格式。
用UG二次开发的外部模式,写成ugupdate.exe文件。

结果对于零件好用,但是一到装配体就不行了,无法生成x_t格式。不知道哪位大神搞过吗?求助!!
麻烦高手帮忙看看哪里出问题了,万分感谢啊!
附上代码:
  1. #include <iostream>
  2. #include <string>
  3. #include <uf.h>
  4. #include <uf_modl.h>
  5. #include <uf_ps.h>
  6. #include <uf_obj.h>
  7. #include <uf_assem.h>
  8. #include <uf_part.h>
  9. #include <uf_modl_expressions.h>
  10. using namespace std;
  11. /*
  12. 功能:
  13.      用exp文件更新prt文件文,并将prt文件另存为x_t文件
  14. 调用方法:
  15.     system("you.prt   you.exp   you.x_t")
  16.     createprocess("you.prt","you.exp   d:\\you.x_t"...)
  17. 注意:
  18.     文件名一定要写全,在导出时会自动删除旧的文件否则可能
  19.     因为文件已经存在而导致导出x_t文件失败。
  20.                                 
  21.                                    san,nuaa,202
  22.                     visualsan@yahoo.cn
  23. .11.13
  24. */
  25. int  prt_save_as_xt(tag_t,string ps);
  26. //引入lib文件,因人而异
  27. #pragma  comment(lib,"D:\\Program Files\\Siemens\\NX 8.0\\UGOPEN\\libufun.lib")
  28. #define VISUALSAN_NUAA_202_RUN(x)\
  29. if(0!=x)\
  30. {\
  31.     char msg[133];\
  32.     UF_get_fail_message( x,msg );\
  33.     cout<<msg;\
  34.     return -1;\
  35. }

  36. int  main(int argc,char **argv)
  37. {

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

  40.     //文件路径
  41.     string  prt,ep;
  42.     string  x_t;//x_t格式文件地址

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

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

  51.     if( argc<3 )
  52.     {
  53.         cerr<<"参数个数不足";
  54.         return  -1;
  55.     }
  56.     //默认你是用createprocess创建线程的
  57.     if(argc==3)
  58.     {
  59.         prt = argv[0];  //prt文件
  60.         ep  = argv[1];  //exp文件
  61.         x_t = argv[2]; //x_t文件
  62.     }
  63.     //否则是用system调用的
  64.     else
  65.     {
  66.         prt = argv[1]; //prt文件
  67.         ep  = argv[2]; //exp文件
  68.         x_t = argv[3]; //x_t文件
  69.     }

  70.     //打开模型文件
  71.     UF_PART_load_status_t st;
  72.     tag_t  prt_id;
  73.     //打开prt文件
  74.     VISUALSAN_NUAA_202_RUN( UF_PART_open( prt.c_str(), &prt_id, &st ) );
  75.     //更新模型文件
  76.     VISUALSAN_NUAA_202_RUN( UF_MODL_import_exp( (char*)ep.c_str() , 0) );
  77.     //更新模型
  78.     VISUALSAN_NUAA_202_RUN( UF_MODL_update() );
  79.     //写入文件
  80.     VISUALSAN_NUAA_202_RUN( UF_PART_save() );

  81.     //另存为x_t文件
  82.     if( -1 == prt_save_as_xt(prt_id,x_t) )
  83.         return -1;
  84.    
  85.     //关闭prt文件
  86.     VISUALSAN_NUAA_202_RUN( UF_PART_close(prt_id,1,1) );
  87.     VISUALSAN_NUAA_202_RUN( UF_PART_free_load_status(&st) );
  88.     //退出前UF_terminate调用清理
  89.     VISUALSAN_NUAA_202_RUN( UF_terminate() );

  90.     return 0;
  91. }
  92. int  prt_save_as_xt(tag_t body_tag,string ps)
  93. {
  94.     //没有后缀名时,加上后缀名
  95.     if( std::string::npos == ps.find( ".x_t" ))
  96.         ps += ".x_t";
  97.     //引用代码:Ug2Ansys.cpp  李 响, 中国地质大学(北京) 2006.12.31
  98.     uf_list_p_t body_list;
  99.     // 获得装配树根事例root_part_occ, 当函数返回NULL_TAG时, 表明当前部件文件中没有装配(即单个部件)
  100.     tag_t root_part_occ = UF_ASSEM_ask_root_part_occ( body_tag );
  101.     VISUALSAN_NUAA_202_RUN( UF_MODL_create_list(&body_list) );
  102.     // 如果是单个部件
  103.     if(root_part_occ == NULL_TAG)
  104.     {
  105.         tag_t object = NULL_TAG;
  106.         int UF_body_type;
  107.         int type;
  108.         int subtype;   
  109.         do{
  110.             VISUALSAN_NUAA_202_RUN(
  111.                 UF_OBJ_cycle_objs_in_part(body_tag, UF_solid_type, &object)
  112.                 );
  113.             if(object != NULL_TAG)
  114.             {
  115.                 VISUALSAN_NUAA_202_RUN(
  116.                     UF_OBJ_ask_type_and_subtype(object, &type, &subtype)
  117.                     );
  118.                 VISUALSAN_NUAA_202_RUN(
  119.                     UF_MODL_ask_body_type(object, &UF_body_type)
  120.                     );
  121.                
  122.                 if(subtype != UF_solid_body_subtype)
  123.                     continue;
  124.                 if(UF_body_type == UF_MODL_SOLID_BODY)
  125.                 {
  126.                     VISUALSAN_NUAA_202_RUN(
  127.                         UF_MODL_put_list_item(body_list, object)
  128.                         );
  129.                     break;
  130.                 }
  131.             }
  132.         }while(1);

  133.     }
  134.     //如果是装配体
  135.     else
  136.     {
  137.         tag_t obj = UF_ASSEM_ask_prototype_of_occ(root_part_occ);
  138.         tag_t object = NULL_TAG;
  139.         int UF_body_type;
  140.         int type;
  141.         int subtype;
  142.         do
  143.         {
  144.             VISUALSAN_NUAA_202_RUN(
  145.                 UF_OBJ_cycle_objs_in_part(body_tag, UF_solid_type, &object) );
  146.             if(object != NULL_TAG)
  147.             {
  148.                 VISUALSAN_NUAA_202_RUN(
  149.                     UF_OBJ_ask_type_and_subtype(object, &type, &subtype) );
  150.                 // 判断body是否是一个Solid或Sheet
  151.                 VISUALSAN_NUAA_202_RUN(
  152.                     UF_MODL_ask_body_type(object, &UF_body_type) );
  153.    
  154.                 if(subtype != UF_solid_body_subtype)
  155.                     continue;
  156.                 if(UF_body_type == UF_MODL_SOLID_BODY)
  157.                 {
  158.                     // 将对象加入到链表的尾部
  159.                     VISUALSAN_NUAA_202_RUN(
  160.                         UF_MODL_put_list_item(body_list, object) );
  161.                 }
  162.             }
  163.             else
  164.             {
  165.                 break;
  166.             }

  167.         }while(1);

  168.     }

  169.     // 如果文件存在, 先删除
  170.     remove( ps.c_str() );
  171.     // 创建Parasolid文件
  172.     VISUALSAN_NUAA_202_RUN(
  173.         UF_PS_export_data(body_list,  (char*)ps.c_str() ) );
  174.     // 删除链表
  175.     VISUALSAN_NUAA_202_RUN(
  176.         UF_MODL_delete_list(&body_list) );

  177.     return 0;
  178. }
复制代码




麻烦高手帮忙看看哪里出问题了,万分感谢啊!

有奖推广贴子: 

回复

使用道具 举报

上等兵

Rank: 1

1

主题

0

帖子

51

积分
 楼主| 发表于 2014-9-12 09:02:18 | 显示全部楼层
高手都去哪了?
回复 支持 反对

使用道具 举报

上等兵

Rank: 1

1

主题

0

帖子

51

积分
 楼主| 发表于 2014-9-12 16:13:38 | 显示全部楼层
怎么没人理啊
回复 支持 反对

使用道具 举报

上等兵

Rank: 1

0

主题

4

帖子

61

积分
发表于 2015-3-20 09:32:27 | 显示全部楼层
这个生成的exe怎么用尼?求告知~~~
回复 支持 反对

使用道具 举报

列兵

Rank: 1

0

主题

7

帖子

47

积分
发表于 2015-4-21 10:14:56 | 显示全部楼层
shijiulujun,您好,我复制你的这个代码,然后用VC编译可以通过,可是链接的时候出现error,“Linking...
C:\PROGRAM FILES\SIEMENS\NX 9.0\UGOPEN\libufun.lib : fatal error LNK1113: invalid machine type
执行 link.exe 时出错.”,可否告知这是什么原因?感激不尽!
回复 支持 反对

使用道具 举报

六级士官

Rank: 4

0

主题

230

帖子

1250

积分
发表于 2015-10-27 10:08:45 | 显示全部楼层
很好很好很好很好很好很好很好
回复 支持 反对

使用道具 举报

列兵

Rank: 1

0

主题

1

帖子

27

积分
发表于 2022-4-12 14:49:46 | 显示全部楼层
楼主,目前我也遇到了和您同样的问题,多年过去了,请问您解决了吗
回复 支持 反对

使用道具 举报

列兵

Rank: 1

0

主题

1

帖子

11

积分
发表于 2023-1-4 21:08:02 | 显示全部楼层
1117jc 发表于 2022-4-12 14:49
楼主,目前我也遇到了和您同样的问题,多年过去了,请问您解决了吗

您好,我目前导入自己模型的时候也遇到了这个问题,报错是Nonbody Eid input,请问您了解吗
回复 支持 反对

使用道具 举报

二级士官

Rank: 2

2

主题

26

帖子

255

积分
发表于 2023-2-24 16:38:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-3-29 00:05

返回顶部