日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集成UG和ANSYS之二----upupdate之x_t 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

集成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.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 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男女啪啪免费网站 | 国产精品一区在线观看 | 久久久国产精品黄毛片 | 91看片在线| 男女av| 91亚洲精选 | 国产视频不卡一区 | 97视频资源 | 第一av| 韩国av在线播放 | 蜜臀久久精品久久久久 | 久久精彩视频 | 看国产一级片 | 无码人妻aⅴ一区二区三区日本 | 亚洲成人mv | 污视频在线观看网站 | 激情另类小说 | 污污视频网站在线免费观看 | 好吊色网站 | 日本大乳美女 | 亚洲精品国 | 人人爽人人干 | 亚洲无吗在线 | 精品国产亚洲一区二区麻豆 | 伊人动漫 | 精品少妇人妻一区二区黑料社区 | 黄网在线播放 | aaaa黄色片| 日韩一二区 | 美国三级视频 | 亚洲精品视频在线 | 欧美做受高潮中文字幕 | 青青草视频偷拍 | 国产21区 | 日韩电影在线观看一区二区 | 欧美黄色免费 | 99精品在线播放 | 经典三级第一页 | 国产精品美女久久久久 | 一本色道久久88加勒比—综合 | 91tv国产成人福利 | 第一福利丝瓜av导航 | 伊人蕉久影院 | 91免费在线观看网站 | 激情文学久久 | 国产a级免费视频 | 91蜜桃在线观看 | 国产乱人乱偷精品视频 | 亚洲午夜网站 | 色偷偷av一区二区三区 | 亚洲涩涩爱 | 国产亚洲成av人片在线观看桃 | 国产精品xxxx | 欧美日一区二区 | 伊人青青久 | 欧美熟妇精品久久久久久 | 草草视频在线免费观看 | sm在线观看 | 国产中文字幕第一页 | 国产3级在线 | 污视频在线免费 | www日韩欧美| 国产 xxxx| 二区三区在线观看 | 99国产超薄肉色丝袜交足 | 天天操天天干天天爱 | 可以免费看黄的网站 | 97久久久| 激情涩涩 | 一区在线免费观看 | 中文字幕乱轮 | 日本美女黄视频 | 91干网| 国产成人主播 | 人人澡人人爱 | 久久咪咪 | 一区二区三区 日韩 | 天堂成人av | 伊人在线视频 | 黄色一及片 | 黄色动漫在线免费观看 | 搞中出| 狠狠干2024| 99人妻少妇精品视频一区 | 日韩一级片中文字幕 | 伊人春色av | 成人欧美一区二区三区黑人动态图 | 欧美日韩在线免费视频 | 国产精品人妻一区二区三区 | kendra lust free xxx| 久久天堂av综合合色蜜桃网 | 美女精品在线 | 欧美国产在线观看 | 国产剧情在线视频 | 久久久久久无码精品人妻一区二区 | 国产自产 | 中国黄色一级视频 | 日本免费一区二区三区 | 人人爱国产 |