集成UG和ANSYS之一----UGUPDATE.EXE
集成UG和ANSYS之一----UGUPDATE.EXE
author: san
email: visualsan@yahoo.cn
前言
写给那些需要调用UG二次开发或者正在寻找ugupdate.exe的同学
write by san,nuaa 202
2011,11,13
-----------------------------------------------------------------------------------------------
根据表达式文件更新ug模型,通常是进行ug集成的方式之一。比如优化过程
首先更新exp文件,然后调用UG update更新prt模型,再导入ANSYS
计算。exp文件是一个表达式文件,可以用文本编辑器编辑,也可以
在应用程序中动态修改。这是结构优化中调用ug的经典模式。
不过这种调用UG update的模式效率很低,因为每次都要初始化ug api,
所以更明智的做法是将UG update集成到系统中去,每次更新完部件
后调用UG_MODL_SAVE保存,然后进行计算。而初始化只进行一次,这样的
效率较高。
当然进行prt文件参数化的方法很多,有直接调用UF_MODL_edit_exp
更新表达式,然后UF_MODL_update更新模型,最后UG_MODL_SAVE保存
模型;还有是重写exp文件,更新表达式。第一种对编程要求较高;
第二种方式则有傻瓜式的编译生成UG_update.exe,然后批处理更新
模型,isight软件好像提供一个叫UG_update.exe,每次重新初始化
API,然后更新关闭,慢的一比;还有一种则是将优化算法和ug open api集成
,ug初始化一次。
很多人找这个UG_update.exe,这里我就写一个
简单的UG_update.exe。(如果想在ANSYS优化中使用UG,本人愚钝,无法
导入PRT文件,好像需要转换层x_t格式,ug api有)。
使用方法:
1.调用语句:简单的--》system("UG_update.exe you.prt you.exp");
复杂的--》createprocess(...)
2.其中you.prt是你的prt文件每次;you.exp是你的exp文件名称。
UG_update.exe代码如下:
#include <iostream>
#include <string>
#include <uf.h>
#include <uf_modl.h>
#include <uf_part.h>
#include <uf_modl_expressions.h>
using namespace std;
//write by san ,nuaa 202,2011.11.13
// visualsan@yahoo.cn
//引入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;
/*参数个数检查,
注意用system("ugupdate.exe xx.prt xx.exp")调用时,默认第一个参数为exe地址,所以你的参数
是第二个开始;用createprocess时,参数和你传递的一样
system("UG_update.exe xx.prt yy.exp")
argv[0]=UG_update.exe argv[1]=xx.prt argv[2]=yy.exp
createprocess("UG_update.exe","xx.prt yy.exp",....)
argv[0]=xx.prt argv[1]=yy.exp
在参数位置上有所差别
*/
if( argc<2 )
{
cerr<<"参数个数不足";
return -1;
}
//默认你是用createprocess创建线程的
if(argc==2)
{
prt = argv[0]; //prt文件
ep = argv[1]; //exp文件
}
//否则是用system调用的
else
{
prt = argv[1]; //prt文件
ep = argv[2]; //exp文件
}
//打开模型文件
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() );
//关闭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;
}
代码编译生成ugupdate.exe
代码使用:
1、新建一个长方体模型,参数为w,h,length.,另存为box.prt文件。
2.导出exp文件,另存为box.exp文件,如图
打开box.exp,可以看见表达式:
修改box.exp为 h=200,length=300,w=400
保存备用。
调用方式1:system("ugupdate.exe box.prt box.exp")
#include <iostream>
//write by san,nuaa,202
using namespace std;
void main()
{
cout<<"ug1\n";
system("UG_UPDATE.exe box.prt box.exp");
}
调用方式2:createprocess
#include <windows.h>
#include <iostream>
using namespace std;
//write by san ,nuaa 202,2011.11.13
// visualsan@yahoo.cn
int 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", // 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;
}
调用完后你会发现模型的参数变了。
------------------------------------------------------------------------------------------------------------
write by san,nuaa 202
Email:visualsan@yahoo.cn
2011,11,13
posted on 2011-11-13 17:06 DoJustForFun 阅读(4733) 评论(2) 编辑 收藏 举报