集成UG和ANSYS之二----upupdate之x_t

author:  san

email:   visualsan@yahoo.cn

write by san,nuaa 202
                                                              2011,11,13

--------------------------------------------------------------------

  将UG的prt文件先储存文x_t格式文件,然后再导入ANSYS计算。文将探讨ANSYS集成UG进行优化方面的问题,将实现一个ugupdate.exe,功能除了更新prt文件文还将prt文件另存为x_t文件,以供ANSYS调用。

  关于prt格式转换为x_t格式的方法用UG/OPEN API可以实现,查阅网络资料,已有先例,故prt文件转x_t格式的代码取自网络,本人不造车轮。改进后的ugupdate.exe调用方法如下

system("you.prt   you.exp   you.x_t")

createprocess("you.prt“,”you.exp   you.x_t"...)

功能描写:

  用you.exp里的参数更新you.exp并另存为you.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,"F:\\Program Files\\UGS\\NX 4.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;}

程序编译后生成update.exe备用

使用方法之一:system("update.exe  you.prt  you.exp  you.x_t ");

代码:

#include <iostream>using namespace std;//san,nuaa,202,visualsan@yahoo.cn//2011.11.13 void main(){    cout<<"ug1\n";    system("UG_UPDATE.exe  box.prt box.exp  you.x_t");}

使用方法之二:

新建一个  xx.bat,内容如下

ug_update.exe  you.prt  you.exp  you.x_t

保存,把所有文件放在一起,运行,ok.

所示方法之三:createprocess

代码如下:

#include <windows.h>#include <iostream>using namespace std;//write by san  ,nuaa 202,2011.11.13//                       visualsan@yahoo.cnint main(int argc,char**argv){//是否显示窗口    bool bShowWnd=1;

    STARTUPINFO si;    PROCESS_INFORMATION pi;    ZeroMemory( &si, sizeof(si) );    si.cb = sizeof(si);    ZeroMemory( &pi, sizeof(pi) );    si.dwFlags=STARTF_USESHOWWINDOW;    si.wShowWindow=bShowWnd?SW_SHOW:SW_HIDE;if( !CreateProcess("UG_UPDATE.exe",// module name (use command line)        "D:\\ug\\box.prt D:\\ug\\box.exp  D:\\ug\\box.x_t",                  // Command line        NULL,                  // Process handle not inheritable        NULL,                 // Thread handle not inheritable        FALSE,                // Set handle inheritance to FALSE        0,                      // No creation flags        NULL,                 // Use parent's environment block        NULL,                 // Use parent's starting directory        &si,                    // Pointer to STARTUPINFO structure        &pi )                  // Pointer to PROCESS_INFORMATION structure        )

    {        cerr<<"CreateProcess failed ";return  -1;        }//wait until end    WaitForSingleObject( pi.hProcess, INFINITE );// Close process and thread handles.    CloseHandle( pi.hProcess );    CloseHandle( pi.hThread );

return 0;}

使用实例

1.UG新建一个正方体

2.保存为box.prt ,将参数导出为box.exp

3.采用第二种方法,运行xx.bat更新程序,注意导出文件一定要写完整路径

4.导入ansys,如图所示,ok

-----------------------------------------------------------------------------------

write by san,nuaa 202

Email:visualsan@yahoo.cn

2011,11,13

转载于:https://www.cnblogs.com/JustHaveFun-SAN/archive/2011/11/13/visualsan_nuaa_202_2.html

集成UG和ANSYS之二----upupdate之x_t相关推荐

  1. 集成学习:lightGBM(二)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 集成学习:Bagging.随机森林.Boosting.GBDT ...

  2. Android 融云IM集成以及使用详解(二)

    Android 融云IM集成以及使用详解(二) 上篇讲解了集成和好友列表和消息记录的使用,这篇将讲解聊天界面和群聊界面的使用 先附上一张效果图 先介绍布局文件 <LinearLayout xml ...

  3. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  4. 【Jmeter篇】jmeter Ant Jenkins接口自动化测试集成之半路逆转(二)

    一.更改方案 由于上一篇文章[Jmeter篇]jmeter+Ant+Jenkins实现自动化测试集成(一)https://blog.csdn.net/qq_36502272/article/detai ...

  5. Android开发丶openinstall的集成和使用(推广二维码)

    在项目开发过程中,负责的推广二维码模块需要加入openinstall三方框架,该框架可以在推广二维码中搭建一层上下级关系,加上一定的积分奖励,极大地提高了用户的推广热情,并且不同于以往常规的手动填写邀 ...

  6. 在网页项目中集成扫码枪设备,实现二维码扫码识别实战

    我寻寻觅觅,寻寻觅觅一个可以二次开发的扫码枪.然而,店小二总是告诉我:"这个--额--额--俺也不知道呢--".本文将一步一步实现在网页项目中集成扫码枪设备. 目录 1.项目背景 ...

  7. ANSYS FLUENT二维结构网络数值计算及后处理——流动传热

    用ANSYS ICEM CFD划分网格的网格步骤在这篇文章中:ANSYS ICEM CFD二维结构网络生成实例--流动传热 下面将在FLUENT软件中通过数值计算检验生成的网格是否满足计算要求. 读入 ...

  8. Android平台上集成海康SDK(二)

    Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  9. ansys怎么批量输入点坐标_当SpaceClaim 遇上ANSYS (二)

    在使用ANSYS 进行工程计算时,经常会遇到优化设计问题,通过仿真对比某一个或几个尺寸的不同来判断影响产品性能的关键尺寸.这时候,在Space Claim中将几何参数化后再批量计算会大大减小我们在几何 ...

最新文章

  1. Linux命令——mv
  2. html中嵌套iframe页面_selenium表单切换(iframe)
  3. 织梦php调用字段,织梦dedecms搜索页调用自定义字段的方法
  4. FFT-Matlab初步实现
  5. Linux——分区时出现This partition should be marked for use as an EFI boot partition
  6. QGIS for Android 开发:一、Ubuntu环境搭建
  7. js获取当前时间戳,仿PHP函数模式
  8. CHtmlCtrl在VC中的使用
  9. TOP100summit:【分享实录-QQ空间】10亿级直播背后的技术优化
  10. 详解:Sqoop的安装
  11. pytorch查看模型weight与grad
  12. IDEA插件系列(84):MultiHighlight插件——高亮代码中的标识符
  13. Python-移位密码、仿射变换解密
  14. Java - 批量生成二维码压缩包
  15. LaTeX写数学公式
  16. ESD笔记(四)_击穿电压规律
  17. 千万别用MongoDB?
  18. LINUX rhcsa小练习题(创建文件/目录,移动/复制文件,重定向/追加重定向,创建别名)
  19. thinkphp5 layui分页样式
  20. ui设计需要学编程吗难不难学习

热门文章

  1. Java笔记-对称加密AES的使用
  2. cuda笔记-流的使用(定义、创建、消耗、同步)
  3. Qt文档阅读笔记-Text QML Type官方解析及实例
  4. Qt文档阅读笔记-QUdpSocket基本表述及简单实现
  5. Qt工作笔记-Qt元对象系统解析【2合1】
  6. python3.0如何画表格_Python图表绘制工具:Matplotlib_Part 3
  7. JS判断视频Video的播放、暂停、结束完成及获取长度事件监听处理
  8. 莫烦python简历_Matplotlib画图教程
  9. java 连等_java并发之LBQ和ABQ(1)
  10. linux跨ip拷贝,Linux的虚拟机拷贝到另外的操作系统时,NAT方式的静态IP无效,一直是获取的DHCP动态地址...