999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于NX自動計算沖壓方向旋轉(zhuǎn)角度的二次開發(fā)

2022-04-20 09:17:42劉麗莉李麗芳周燕芳
模具制造 2022年3期
關(guān)鍵詞:二次開發(fā)界面程序

劉麗莉,李麗芳,周燕芳

(上汽通用汽車有限公司,上海 201206)

1 引言

確定沖壓零件的沖壓方向是沖壓工藝排布過程中的第一步,沖壓方向的選擇是否合理直接影響了工藝質(zhì)量的好壞,因此是非常重要的一個步驟。目前,沖壓件的沖壓方向一般是在Autoform里確定好后,再將沖壓坐標(biāo)系導(dǎo)出至NX中。沖壓坐標(biāo)系相對于絕對坐標(biāo)系的繞軸旋轉(zhuǎn)順序以及旋轉(zhuǎn)角度僅在Autoform軟件中記錄顯示,導(dǎo)出后在NX中并無信息記錄,信息的傳遞一般為人工記錄。另外,一旦在NX中發(fā)現(xiàn)需要重新調(diào)整沖壓方向時,仍需回到Autoform中對零件進行旋轉(zhuǎn)調(diào)整并再次導(dǎo)出至NX中,反復(fù)操作導(dǎo)致效率相對較低。

因此,非常有必要在NX中開發(fā)一款能自動計算出指定沖壓坐標(biāo)系相對絕對坐標(biāo)系在某一特定旋轉(zhuǎn)順序下的旋轉(zhuǎn)角度值,并且可以支持直接在NX中繼續(xù)優(yōu)化調(diào)整沖壓方向的插件。本文基于C++對NX進行二次開發(fā),利用Visual Studio編程工具,開發(fā)了一款能自動計算指定坐標(biāo)系相對于絕對坐標(biāo)系在特定旋轉(zhuǎn)順序下的旋轉(zhuǎn)角度值,同時還在NX中建立交互界面,可以實現(xiàn)對沖壓坐標(biāo)系繞指定坐標(biāo)軸進一步旋轉(zhuǎn)調(diào)整,建立新的沖壓坐標(biāo)系,并實時顯示調(diào)整之后的坐標(biāo)系的旋轉(zhuǎn)角度值,避免了用戶在兩款軟件之間來回切換操作,提高了用戶在NX內(nèi)處理沖壓方向的效率。

2 基本原理

2.1 繞單一軸旋轉(zhuǎn)

假定絕對坐標(biāo)系按照X軸旋轉(zhuǎn)α°,根據(jù)三角函數(shù)計算可得繞X軸旋轉(zhuǎn)的旋轉(zhuǎn)矩陣TX,同理得到繞Y軸旋轉(zhuǎn)β°,繞Z軸旋轉(zhuǎn)γ°的旋轉(zhuǎn)矩陣TY和TZ。

2.2 繞多個軸旋轉(zhuǎn)

沖壓坐標(biāo)系的旋轉(zhuǎn)過程屬于圍繞當(dāng)下自身坐標(biāo)系某軸轉(zhuǎn)動,即每次旋轉(zhuǎn)都固定被圍繞的某一軸,另兩軸動。同時,由于旋轉(zhuǎn)順序不固定,可以隨意組合,例如可以先繞X軸,再繞Y軸,最后繞Z軸旋轉(zhuǎn),也可根據(jù)需要調(diào)整為先繞Y軸,再繞Z軸,最后繞X軸旋轉(zhuǎn)。根據(jù)歐拉旋轉(zhuǎn)公式,只需根據(jù)旋轉(zhuǎn)順序,將先旋轉(zhuǎn)的矩陣放前面,即可推算出在不同旋轉(zhuǎn)順序繞多個軸旋轉(zhuǎn)的旋轉(zhuǎn)矩陣。以旋轉(zhuǎn)順序為X、Y、Z為例:

2.3 角度計算

根據(jù)以上公式推斷,不難看出,若已知旋轉(zhuǎn)順序及旋轉(zhuǎn)角度,可以根據(jù)旋轉(zhuǎn)矩陣推算出旋轉(zhuǎn)后坐標(biāo)系的矩陣方程,通過NX二次開發(fā)過程中的坐標(biāo)系創(chuàng)建即可以得到我們所希望的坐標(biāo)系。這就為在NX二次開發(fā)中實現(xiàn)通過旋轉(zhuǎn)順序和旋轉(zhuǎn)角度的輸入更新沖壓坐標(biāo)系提供了依據(jù)。

同時,若已知最終坐標(biāo)系的矩陣,根據(jù)不同的旋轉(zhuǎn)順序,亦可推算出每次旋轉(zhuǎn)的旋轉(zhuǎn)角度。還是以旋轉(zhuǎn)順序為X、Y、Z為例,具體計算過程如下。

如 果β=90°,則α=0°,γ=atan2(r21,r22),如 果β=-90°,則α=0°,γ=-atan2(r21,r22)。

在NX二次開發(fā)過程中,通過NXopen數(shù)據(jù)庫的調(diào)用,求出當(dāng)前制件的工作坐標(biāo)系即沖壓坐標(biāo)系的矩陣,再根據(jù)上述公式,即可計算出當(dāng)前沖壓坐標(biāo)系相對于絕對坐標(biāo)系的旋轉(zhuǎn)角度值。

3 界面設(shè)計

界面設(shè)計主要考慮界面簡潔,操作簡單,靈活方便等原則,UI界面如圖1所示。打開dll調(diào)用應(yīng)用程序后,會自動計算出當(dāng)前工作坐標(biāo)系相對于絕對坐標(biāo)系按先X軸,再Y軸,再Z軸的旋轉(zhuǎn)順序的各自旋轉(zhuǎn)的角度,并在下側(cè)信息欄同步顯示。同時用戶也可以通過Tip Order指令選擇旋轉(zhuǎn)先后順序,系統(tǒng)會自動計算出當(dāng)前順序下的各自旋轉(zhuǎn)角度,并在信息窗口欄處更新輸出。

圖1 程序UI界面設(shè)計

如果用戶對當(dāng)前的沖壓坐標(biāo)方向不滿意,仍可繼續(xù)調(diào)整當(dāng)前坐標(biāo)系。可以通過Tip Vector控件對其進行修正,首先在Rotate By中選擇此次調(diào)整的角度值,然后在相應(yīng)的旋轉(zhuǎn)軸(X軸/Y軸/Z軸)處選擇所需調(diào)整的“+”或“-”按鈕作相應(yīng)的調(diào)整(“+”表示順時針旋轉(zhuǎn),“-”表示逆時針旋轉(zhuǎn)),并在信息欄中實時顯示當(dāng)前工作坐標(biāo)系相對于絕對坐標(biāo)系的旋轉(zhuǎn)角度。

4 開發(fā)流程

本次二次開發(fā)為了盡可能減少用戶的選擇,打開該程序后,會自動識別出當(dāng)前工作坐標(biāo)系,默認旋轉(zhuǎn)順序為X-Y-Z,通過2.3節(jié)中的角度計算關(guān)系通過當(dāng)前沖壓坐標(biāo)系矩陣計算出旋轉(zhuǎn)角度,并實時顯示在信息欄中,實現(xiàn)信息的自動識別和顯示。

當(dāng)用戶選擇調(diào)整當(dāng)前坐標(biāo)系時,程序讀取當(dāng)前工作坐標(biāo)系的旋轉(zhuǎn)順序以及旋轉(zhuǎn)角度,根據(jù)用戶選擇的調(diào)整角度,結(jié)合已有的旋轉(zhuǎn)角度值,計算出新的坐標(biāo)系的旋轉(zhuǎn)角度。根據(jù)2.2旋轉(zhuǎn)矩陣計算公式推算出坐標(biāo)系的新的矩陣值,并在NX中更新沖壓坐標(biāo)系,實現(xiàn)對零件沖壓方向的優(yōu)化調(diào)整。

程序核心算法流程圖如圖2所示。

圖2 程序核心算法流程

5 代碼開發(fā)

本案例是針對UI界面的NX二次開發(fā),首先在NX中設(shè)計出圖1所示的UI界面,在代碼生成模塊語言選擇C++,保存后生成dlx、hpp和cpp文件。

在Visual Studio中創(chuàng)建工程項目文件,選擇NXOpen C++Wizard模板,選擇相應(yīng)的設(shè)置后完成工程項目創(chuàng)建,并將之前生成的hpp和cpp復(fù)制到工程項目中,即可完成項目框架的搭建工作。基本上所有代碼均使用C++程序語言編寫在hpp和cpp中,通過編譯和調(diào)試后生成后綴名為dll的文件,在NX中通過Ctrl+U命令調(diào)用dll文件即可實現(xiàn)二次開發(fā)的功能。NX二次開發(fā)需特別注意NX版本和Visual Studio版本的匹配。

C++相對于C的增強,表現(xiàn)在兩個方面:①在原來基于過程的機制基礎(chǔ)上,對C語言做了不少的擴充;②增加了面向?qū)ο蟮臋C制。面向?qū)ο蟪绦蛟O(shè)計,是針對開發(fā)較大規(guī)模的程序而提出來的,目的是為了提高軟件開發(fā)的效率[1]。其最大特性是增加了面向?qū)ο蟪绦蛟O(shè)計的“類(class)”,通過設(shè)計類的成員及成員函數(shù),實現(xiàn)功能的封裝與調(diào)用,可以盡可能地提升程序的執(zhí)行效率。

本文整個程序的主要類及函數(shù)功能包括工作坐標(biāo)系角度計算、旋轉(zhuǎn)角度計算、根據(jù)角度設(shè)置坐標(biāo)系等等,部分代碼如下:

void Tip::Calculate_WCS_Angles()

{

tag_t wcs_id;

tag_t matrix_id_new;

double matrix_values[9];

UF_CSYS_ask_wcs(&wcs_id);

UF_CSYS_ask_matrix_of_object(wcs_id,&matrix_id_new);

UF_CSYS_ask_matrix_values(matrix_id_new,matrix_values);

double degree_x;

double degree_y;

double degree_z;

double degree_x_float;

double degree_y_float;

double degree_z_float;

degree_y = atan2(-matrix_values[2],sqrt(matrix_values[0]*matrix_values[0]+matrix_values[1]*matrix_values[1]));

if(degree_y!=PI/2||degree_y!=-PI/2)

{

degree_z = atan2(matrix_values[1]/cos(degree_y),matrix_values[0]/cos(degree_y));

degree_x = atan2(matrix_values[5]/cos(degree_y),matrix_values[8]/cos(degree_y));

}

else if(degree_y==PI/2)

{

degree_z=0;

degree_x=atan2(matrix_values[3],matrix_values[4]);

}

else if(degree_y==-PI/2)

{

degree_z=0;

degree_x=-atan2(matrix_values[3],matrix_values[4]);

}

degree_x_float=degree_x/PI*180;

degree_y_float=degree_y/PI*180;

degree_z_float=degree_z/PI*180;

double03->SetValue(degree_x_float);

double04->SetValue(degree_y_float);

double05->SetValue(degree_z_float);

}

void View_CSYS_set(int n,tag_t csys_tag)

{

tag_t object_id;

tag_t matrix_id_new;

double matrix_values[9];

UF_CSYS_ask_matrix_of_object(csys_tag,&matrix_id_new);

UF_CSYS_ask_matrix_values(matrix_id_new,matrix_values);

double axes[6];

if(n==1)

{

axes[0]=matrix_values[3];

axes[1]=matrix_values[4];

axes[2]=matrix_values[5];

axes[3]=matrix_values[6];

axes[4]=matrix_values[7];

axes[5]=matrix_values[8];

}

if(n==2)

{

axes[0]=matrix_values[0];

axes[1]=matrix_values[1];

axes[2]=matrix_values[2];

axes[3]=matrix_values[6];

axes[4]=matrix_values[7];

axes[5]=matrix_values[8];

}

if(n==3)

{

axes[0]=matrix_values[0];

axes[1]=matrix_values[1];

axes[2]=matrix_values[2];

axes[3]=matrix_values[3];

axes[4]=matrix_values[4];

axes[5]=matrix_values[5];

}

UF_VIEW_set_rotation(NULL_TAG,axes);

NXOpen::Session*theSession=NXOpen::Session::GetSession();

NXOpen::Part*workPart(theSession->Parts()->Work());

NXOpen::Part*displayPart(theSession->Parts()->Display());

workPart->ModelingViews()->WorkView()->Fit();

}

6 實現(xiàn)案例

在NX中打開某車型翼子板的零件數(shù)模,調(diào)用此應(yīng)用程序,系統(tǒng)自動計算出在默認的先繞X軸、再Y軸、再Z軸的旋轉(zhuǎn)順序下的旋轉(zhuǎn)角度并顯示在信息區(qū)域,如圖3所示。當(dāng)用戶在Tip Order控件中選擇旋轉(zhuǎn)順序先Y軸、再Z軸、再X軸后,系統(tǒng)再次計算出新的旋轉(zhuǎn)順序下的旋轉(zhuǎn)角度并顯示在信息區(qū)域,如圖4所示。當(dāng)用戶使用Tip Vector控件對工作坐標(biāo)系進行調(diào)整時,調(diào)整后的繞各坐標(biāo)軸的旋轉(zhuǎn)角度會在信息區(qū)域?qū)崟r更新,同時程序也會自動執(zhí)行將NX中的工作坐標(biāo)系調(diào)整至相應(yīng)位置的操作。最后,程序?qū)X界面的視圖調(diào)整至當(dāng)前工作坐標(biāo)系下主視圖。對比前后兩個工作坐標(biāo)系下的零件,可見零件的沖壓方向已發(fā)生變化,如圖5所示。

圖3 首次調(diào)用程序

圖4 調(diào)整旋轉(zhuǎn)順序后

圖5 調(diào)整旋轉(zhuǎn)角度前后對比

7 結(jié)語

本文通過Visual Studio2019搭建了NX二次開發(fā)環(huán)境,基于C++開發(fā)了自動識別當(dāng)前工作坐標(biāo)系相對于絕對坐標(biāo)系的旋轉(zhuǎn)角度,并通過UI界面的設(shè)計,實現(xiàn)了在UI界面內(nèi)對當(dāng)前坐標(biāo)系進行旋轉(zhuǎn)調(diào)整并能計算最新的旋轉(zhuǎn)角度,同時更新沖壓坐標(biāo)系,并且可以讓用戶自定義選擇旋轉(zhuǎn)順序,增加了該程序的使用柔性。通過此程序,在制件沖壓方向設(shè)定過程中可以減少從NX到Autoform的轉(zhuǎn)換,同時若前后工序的沖壓方向存在偏差或希望繼續(xù)優(yōu)化沖壓方向,也可以在NX中進行靈活的調(diào)整,大大提高了工作效率,拓展了NX應(yīng)用范圍。

猜你喜歡
二次開發(fā)界面程序
國企黨委前置研究的“四個界面”
淺談基于Revit平臺的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
試論我國未決羈押程序的立法完善
基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開發(fā)方法研究
西門子Easy Screen對倒棱機床界面二次開發(fā)
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
人機交互界面發(fā)展趨勢研究
創(chuàng)衛(wèi)暗訪程序有待改進
主站蜘蛛池模板: 国产午夜人做人免费视频中文 | 色综合五月| 国产第二十一页| 99久久这里只精品麻豆| 91麻豆精品国产91久久久久| 97国产在线视频| 亚洲国产亚综合在线区| 伊伊人成亚洲综合人网7777| 亚洲无限乱码| 国产丝袜无码一区二区视频| 久久频这里精品99香蕉久网址| 高清乱码精品福利在线视频| 亚洲中文字幕无码爆乳| 国产99在线| 热这里只有精品国产热门精品| 久青草国产高清在线视频| 小13箩利洗澡无码视频免费网站| 全部无卡免费的毛片在线看| 99热这里只有精品2| 97无码免费人妻超级碰碰碰| 区国产精品搜索视频| 激情六月丁香婷婷| 青青草原国产| 欧美日韩第三页| 97精品国产高清久久久久蜜芽| 欧美日韩国产精品综合| 美女无遮挡被啪啪到高潮免费| 亚洲日韩精品无码专区| 最新亚洲av女人的天堂| 日本成人精品视频| 97se亚洲综合在线天天| 亚洲av色吊丝无码| 在线欧美日韩国产| 波多野结衣在线一区二区| 午夜免费小视频| 免费在线成人网| 99久久免费精品特色大片| 免费黄色国产视频| www.91在线播放| 日本欧美成人免费| 欧美成一级| 精品夜恋影院亚洲欧洲| 日韩AV无码一区| 中文字幕久久波多野结衣| 香蕉久人久人青草青草| 国产欧美日韩一区二区视频在线| 亚洲最大福利网站| 中国国语毛片免费观看视频| 国产打屁股免费区网站| 国产福利在线免费| 色偷偷一区| 国产sm重味一区二区三区| 欧美黑人欧美精品刺激| 国产色网站| 日韩视频免费| 免费AV在线播放观看18禁强制| 毛片网站观看| 91免费在线看| 精品国产免费观看一区| 少妇被粗大的猛烈进出免费视频| 中文字幕亚洲专区第19页| 精品一区二区久久久久网站| 天天躁夜夜躁狠狠躁图片| 国产精品白浆在线播放| 国产主播一区二区三区| 亚洲精品国产成人7777| 99久久精品国产自免费| 婷婷激情亚洲| 精品欧美视频| 99尹人香蕉国产免费天天拍| 香蕉久久国产精品免| 91丨九色丨首页在线播放| 91美女在线| 亚洲综合18p| 国产人人干| 亚州AV秘 一区二区三区| 久久亚洲AⅤ无码精品午夜麻豆| 40岁成熟女人牲交片免费| 国产成人91精品免费网址在线 | 美女被狂躁www在线观看| 欧美高清视频一区二区三区| 久久免费看片|