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

基于Pro/E二次開發的余量求解應用程序設計

2020-11-12 10:38:40李文靜干為民
計算機應用與軟件 2020年11期
關鍵詞:二次開發按鈕程序

李文靜 干為民 徐 波

1(江蘇省特種加工重點實驗室(常州工學院) 江蘇 常州 213032) 2(常州大學機械工程學院 江蘇 常州 213164)

0 引 言

常用的CAD/CAM軟件功能多樣且強大,但不能滿足特定用途的設計要求。若能基于此類軟件進行針對產品的二次開發,將能顯著提升現有的生產效率。 “二次開發”就是基于類似UG、Pro/E的軟件系統,開發出有針對性的,將軟件本地化的程序的過程。目前,國內外有許多專家學者都對Pro/E的二次開發進行了研究。張峰[1]以弧面狀的凸輪機械手產品為研究對象,利用Pro/Program模塊對Pro/E進行二次開發,實現了產品模型的結構參數化設計,提高了設計效率和設計質量。王冰冰等[2]研究了Pro/E軟件二次開發的包裝機械的參數化設計和實施方法,通過在系統中輸入參數,可以自動生成三維實體模型和二維工程圖,從而提高設計效率。劉穎等[3]研究了Pro/E二次開發在圓柱齒輪減速器建模中的應用,并闡述了Pro/Toolkit二次開發的基本步驟,詳細介紹了源文件編譯,可執行文件的生成、注冊和運行等關鍵技術。Hsu等[4]以Pro/E軟件為平臺,通過編程C語言開發了一套裝配設計分析和產品概念設計系統,系統通過五個模塊實現了自動化產品。Haapala等[5]利用Pro/E建立了頭骨的三維模型,并賦予其質量屬性,如密度、表面積和慣性矩,然后編制了相應的Pro/Toolkit應用程序以標記兩個肌肉集合的位置,最后創建了一個3D同胚掃視眼和頭部運動系統。

電解加工具有工具無損耗和加工過程無切削應力的特性,故經常采用該方式加工復雜的葉輪類零件[6]。整體葉輪粗加工后,其葉片呈不規則曲面,與預期達到的圖紙上的尺寸還有一定的差距。本文二次開發的模塊程序就是為了簡化測量加工后零件余量大小,從而生成誤差報告,為后續的加工提供了很大的便捷。二次開發的程序不僅可以縮短測量的周期,而且大大提高測量的精度,更是后續加工過程的一個重要的環節。

1 Pro/E二次開發方法及工作模式

Pro/E軟件是PTC在美國開發的3D設計軟件,不僅具有參數化、相關化的特點,而且具有更加細致而強大的設計、分析和制造功能,應用比較廣泛[7]。其二次開發主要有基于Pro/Toolkit、 Automation GATEWAY、J-Link、Pro/Web Link、VB API的五種二次開發方法。本文選擇基于 Pro/Toolkit的二次開發方法,該方法不僅可以自動建模,還可以集成需要訪問Pro/E數據或操作的外部應用程序,而且可以擴展軟件用戶界面,讓定制的流程無縫嵌入到用戶界面中[8]。

Pro/Toolkit有異步和同步兩種工作模式。異步模式的優點是Pro/Toolkit應用程序可以在Pro/E系統關閉時單獨運行,但缺點是其程序代碼復雜且運行速度較慢,因此通常不使用異步模式。在同步模式下,Pro/Toolkit應用程序與Pro/E系統必須同步運行,并且在Pro/E系統關閉時無法運行。同步模式分為DLL和多進程模式,Pro/Toolkit和Pro/E集成時采用的標準方法就是DLL模式[9]。由于Pro/Toolkit應用程序在Pro/E系統上運行,所以一般采用同步模式。

2 余量求解二次開發過程

2.1 二次開發設計流程

圖1為Pro/E二次開發的余量求解的設計流程圖。首先,在安裝好的Pro/Toolkit中對DLL文件進行創建和設置,其中包含關鍵的“庫文件”設置,若設置不對或缺少會導致后期出錯。在二次開發的整個流程中,最為關鍵的就是程序編譯,程序編寫主要分為三大模塊:導入模型、導入數據、誤差分析計算。其中誤差分析是本程序二次開發的核心,其目的是對導入點進行信息收集(主要是坐標屬性信息),對葉片曲面進行分解(可以看成無數的點組成),比對點到葉片距離最近的點,并拾取出來,轉換成點到點的距離計算,并得出測量結果。最后只要導入原設計模型和三坐標測得的云點數據,就可以直接計算出加工后零件尺寸與圖紙設計尺寸的誤差,同時生成誤差數據表。

圖1 總體設計流程圖

2.2 二次開發程序的準備工作

在二次開發工具包Pro/Toolkit安裝成功的基礎上,需創建和配置DLL文件。創建DLL文件需先創建一個項目MFC DLL文件,新建一個名稱AnalyticalTools的解決方案后完成MFC DLL文件的創建。然后,設置包含文件和庫文件,在“配置屬性”中“VC++目錄”中添加“包含目錄”,如圖2所示。將庫文件添加到“顯示以下內容的目錄”中,如圖3所示,編輯“預處理器定義”,添加 PRO_USE_VAR_ARGS。最后,編輯“附加依賴庫”,完成二次開發的準備工作。

圖2 添加包含目錄

圖3 添加庫文件

2.3 創建菜單按鈕

1) 程序頭文件。在主文件中需添加Pro/Toolkit頭文件,常用的頭文件亦可添加,這樣無須在添加新的CPP文件時設置一次頭文件。如果使用了Pro/Toolkit對象函數,則應用程序必須包含ProToolkit.h頭文件。

2) 菜單按鈕的創建。余量求解的程序中有三個按鈕,分別是“加載葉輪模型”、“添加云點數據”和“點面測量分析”。菜單按鈕的創建也分為三個部分:(1) 添加菜單按鈕;(2) 讀取信息文本文件;(3) 添加父菜單。最后編寫信息文本文件,即按鈕的名稱。創建完成后如圖4所示。

int AnalyticalToolsmenu::menuAddexcute()

{return menuAdding();

}

//添加菜單按鈕

int AnalyticalToolsmenu::menuAdding()

{

OTK::pfcUICommand uicmd;

uicmd.SetMsgFile(_T(″AnalyticalTools_msg.txt″));

//讀取信息文本文件

uicmd.parent_designate(″AnalyticalToolsMenubar″,″AnalyticalTools_Menubar″,″Utilities″);

//添加父菜單

//信息文本文件:

AnalyticalTools_Menubar

Creo2 Wizard

#

AnalyticalToolschildmenu0

AnalyticalToolschildmenu0

加載葉輪模型

#

?

圖4 菜單按鈕的創建

2.4 導入模型模塊

“加載葉輪模型”按鈕的開發其實質是對原有功能“打開文件”的調用,先添加菜單按鈕,再去調用已有函數按鈕ProCmdModelOpen,可以實現打開選擇模型的模塊。

uicmd.Designate(″AnalyticalTools_child_action0″,″AnalyticalToolschildmenu0″,″AnalyticalToolschildmenu0-help″,″button.gif″,AnalyticalToolschildmenu0action);

//添加菜單按鈕0

void Designate(IN CharPtr action_name,IN CharPtr Label,IN CharPtr pHelp,IN CharPtr icon,IN MyFunction func,IN MyuiCmdAccessFn acc=uiAccess )

//對Designate的定義

//菜單按鈕0的主函數:

extern ProError AnalyticalToolsmenu::AnalyticalToolschildmenu0action()

{

return ProMacroLoad(L″~Command ′ProCmdModelOpen′;″);

//調用函數按鈕ProCmdModelOpen使用“摘要”樣式

}

2.5 導入點云文件模塊

導入點云文件模塊其實質和打開模型模塊的實質相似,是對按鈕“導入”的調用,故與打開模型模塊程序編寫類似,只是改變要調用的函數按鈕。

exter ProError AnalyticalToolsmenu::AnalyticalToolschildmenu1action()

{return ProMacroLoad(L″~Command ′ProCmdModelImpAppendNew′;″);}

//調用已有函數按鈕

ProCmdModelImpAppendNew

2.6 余量求解模塊

余量求解模塊是本次二次開發程序的核心,依舊是先創建菜單按鈕,這與先前模塊一致,再對菜單按鈕的主要函數進行編寫這是關鍵一步。主要分為以下幾個部分:

(1) 對輸入的pts云點數據文件進行添加:

ProError getfeats(ProFeature p_feat,ProError status,ProAppData app_data)

{ProArrayObjectAdd((ProArray*)app_data, PRO_VALUE_UNUSED, 1, &p_feat);

//將指定位置的對象添加到數組中,或者將一個對象追加

//到數組的末尾

return (status);}

(2) 對輸入點進行特征收集:

ProError getfeats(ProFeature p_feat,ProError status,ProAppData app_data) {ProArrayObjectAdd((ProArray*)app_data, PRO_VALUE_UNUSED, 1, &p_feat);return (status);} extern ProError ProArrayObjectAdd (ProArray* p_array,int index,int n_objects,void* p_object); For example, if you want to insert one integer in an integer array, call the function as follows: ProArrayObjectAdd (&int_array, 0, 1, (void *)&int_val);

(3) 收集模型上云點投影的基準點:

ProError getGeoms(ProGeomitem*geom,ProError err,ProAppData data)

{err=ProArrayObjectAdd((ProArray*)data, PRO_VALUE_UNUSED, 1, (void*)geom);

return err;

}

ProError featGeomsCollect (ProFeature*feat, vector &p_POINT_data)

{ProError status;

ProFeature *p_data;

Int nsize=0;

status=ProArrayAlloc(0,sizeof(ProGeomitem),1,(ProArray*)&p_data);

status=ProFeatureGeomitemVisit(feat, PRO_POINT, (ProGeomitemAction)getGeoms, NULL, (ProAppData)&p_data);

//對項目進行編譯

ProArraySizeGet((ProArray)p_data, &nsize);

for(int i=0; i < nsize; i++)

{p_POINT_data.push_back(p_data[i]);}

return ProArrayFree((ProArray*)&p_data);

}

(4) 對話框顯示數據:

class SolidOutlineUI

public: static void UI_Create()

{char *dialog_name=″SolidOutline″;

int ActiveDialog_status;

ProError err;

err=ProUIDialogCreate(dialog_name,dialog_name );

(5) 對固定面ID的拾取:

ProError status;

ProSelection surface_sel, cansel;

ProModelitem surface_item;

//信息過濾函數

surface_item.id=11626;

//面ID

surface_item.type=PRO_SURFACE;

//模型曲面

surface_item.owner=Curmdl;

(6) 如果不成功手動選取面:

status=ProSelectionAlloc(NULL, &surface_item, &surface_sel); if (status !=PRO_TK_NO_ERROR) {ProError err;ProSelection *p_Selection;int n_sels; err=ProSelect(″surface″,1, NULL, NULL, NULL, NULL,&p_Selection,&n_sels); if (err !=PRO_TK_NO_ERROR||n_sels==0)

{return;} ProSelectionCopy (p_Selection[0], &surface_sel); } vector p_POINT_data; for(int i=1; i

Pro2dPnt uv1, uv2;

Pro3dPnt xyz1, xyz2;

(7) 對應面的最短距離坐標顯示:

CString strHead[]={L“面坐標”,L“點坐標”,“測量值”};

int Widths[]={ 11, 11, 7 };

TableHeadSet(dialog, ″Table1″,p_POINT_data.size(), 3, strHead, Widths ); for(int i=0; i < p_POINT_data.size();i++) {status=ProSelectionAlloc(NULL, &p_POINT_data[i], &cansel);if (status==PRO_TK_NO_ERROR)

{status=ProSelectionDistanceEval(surface_sel, cansel, uv1, uv2, xyz1, xyz2, &distance);

//計算兩個點之間的距離

(8) 對話框輸出表格建立:

private:static ProError TableItemTextSet(IN char* dialog_name,

IN char* TitleName,

IN int row,

IN int column,

IN CString ItemText)

{

ProCharLine strtmp, strtmp1;

sprintf_s(strtmp,″col%d″,column);

sprintf_s(strtmp1,″row%d″,row);

return ProUITableCellLabelSet(dialog_name, TitleName, strtmp1, strtmp, (wchar_t*)(LPCTSTR)ItemText);}

//設置表單元格中包含的文本

(9) 對話框表格的劃分:

for(int i=0; i < column; i++)

{names[i]=(char *)calloc(PRO_NAME_SIZE, sizeof(char));

labels[i]=(wchar_t *)calloc(PRO_PATH_SIZE, sizeof(wchar_t));

sprintf_s(strtmp,″col%d″,i+1);strcpy(names[i],strtmp);

wcscpy(labels[i],(wchar_t*)(LPCTSTR)pHead[i]);

}

status=ProUITableColumnnamesSet(dialog_name, TitleName,column, names);

//表格分列

status=ProUITableColumnlabelsSet(dialog_name, TitleName,column, labels);

//設置表格中每列標簽的名稱

ProUITableColumnwidthsSet(dialog_name, TitleName, column, pHeadWidths);

//設置表格中每列的寬度

?

ProUITableShowgridSet(dialog_name, TitleName, pGrid);

return status;}}

//表格顯示

2.7 其他輔助程序模塊

最后,還需編寫一些輔助程序如注冊文件程序和菜單圖標程序。菜單圖標如圖5所示。

NAME AnalyticalTools

startup dll

EXEC_FILE AnalyticalTools_dirPRO_MACHINE_TYPEAnalyticalTools.dll

TEXT_DIR AnalyticalTools_dir ext

allow_stop true

DELAY_START false

revision Wildfire

END

//注冊文件

Button.gif

//菜單圖標文件

圖5 菜單圖標

3 程序的配置與運行

在以上設置完成基礎上,再在“資源管理器”項目中生成程序,生成程序如圖6所示,然后對程序進行調試,調試結果如圖7所示。

圖6 生成程序

圖7 程序調試成功

調試成功后需進行創建快捷啟動方式,創建程序如下:

@echo off

set AnalyticalTools_dir=..

set lang=chs

start″″″E:Program FilesPTCCreo 2.0Parametricinparametric.exe″

Exit

//創建快捷方式

4 電解加工整體葉輪葉片余量求解實例

4.1 三坐標機采集點云坐標

運用三坐標測量機進行數據采集, 得到點云數據, 對粗加工后葉輪葉片用三坐標機進行劃線測量取點,如圖8所示,得到點云坐標。由于人為或隨機因素在測量過程中的影響,測量中存在不穩定噪聲點,文件需要點轉換,并且去除不滿足的點。對云點坐標進行處理并轉換成可以導入Pro/E點文件.pts格式文件,轉換后的.pts格式點文件如圖9所示。

圖8 劃線測量

圖9 處理后點云數據

4.2 余量求解實際應用

針對電解加工后的整體葉輪葉片進行余量求解,打開“工具”菜單欄,子菜單為二次開發程序菜單,包含“加載葉輪模型”“加載點云數據”“點面測量分析”三個按鈕。第一步,點擊按鈕“加載葉輪模型”,加載完成后如圖10所示。第二步,點擊“加載點云數據”即導入之前的.pts格式的點云文件,加載完成后如圖11所示。第三步,點擊“點面測量分析”,由于一個葉片是由至少兩個曲面組成,所以葉輪葉片存在正面與反面的誤差求解。選擇需要測量的曲面,葉片正反面余量求解的結果如圖12所示。

圖10 加載葉輪模型

圖11 加載點云數據

圖12 整體葉輪葉片余量求解結果

4.3 余量求解結果分析

一般誤差分析方法,針對簡單的有規則形狀零件可以直接用現有的測量工具測量,但數據不精確,而復雜的零件如整體葉輪葉片之類曲面結構較多的零件會利用算法來進行測量,工作量較大且易出錯。相比之下,二次開發余量求解程序響應快,只需很短的時間就可以得到結果并且不易出錯。

5 結 語

本文以Pro/E2.0為平臺,基于開發語言VC++6.0,以Pro/Toolkit為二次開發工具,使用編譯平臺VS2010,開發出一套能在Pro/E中實現粗加工模型到設計模型的余量計算的應用程序,并成功地應用在電解加工整體葉輪中,代替傳統的誤差分析方法,大大縮短測量周期,提高加工效率,降低生產成本,成為后續加工設計的重要組成部分。

猜你喜歡
二次開發按鈕程序
這些按鈕能隨便按嗎?
當你面前有個按鈕
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
西門子Easy Screen對倒棱機床界面二次開發
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
內心不能碰的按鈕
商業評論(2014年9期)2015-02-28 04:32:41
主站蜘蛛池模板: 国产在线观看人成激情视频| 亚洲中文制服丝袜欧美精品| 国模在线视频一区二区三区| 女人18毛片久久| 中文字幕在线看| 色偷偷综合网| 日本人妻一区二区三区不卡影院| 午夜电影在线观看国产1区| 欧洲熟妇精品视频| 另类欧美日韩| 欧美亚洲一区二区三区在线| 美女被操91视频| 亚洲天堂精品在线| 美女被躁出白浆视频播放| 制服丝袜无码每日更新| 国产簧片免费在线播放| 午夜毛片福利| 男女男免费视频网站国产| 激情六月丁香婷婷四房播| 中日无码在线观看| 综合色88| 中文天堂在线视频| 欧美国产成人在线| 色综合综合网| 亚洲精品卡2卡3卡4卡5卡区| 日本欧美午夜| 最近最新中文字幕在线第一页| 亚洲人成日本在线观看| 免费99精品国产自在现线| 免费一看一级毛片| www.91在线播放| 4虎影视国产在线观看精品| 熟女日韩精品2区| 成人精品午夜福利在线播放| 成人福利在线视频免费观看| 日本欧美视频在线观看| 亚洲精品无码在线播放网站| 国产高潮视频在线观看| 国产在线98福利播放视频免费| 毛片免费在线| 国产综合色在线视频播放线视| 欧美精品v欧洲精品| 中文字幕久久精品波多野结| 亚洲一级毛片免费观看| 青青极品在线| 精品综合久久久久久97| 国产人人乐人人爱| 欧美成人精品高清在线下载| 无码精品福利一区二区三区| 亚洲人成网站色7799在线播放| 国内精品久久久久久久久久影视| 欧美在线黄| 日本三区视频| 国产精品成人AⅤ在线一二三四| 久久99精品久久久久纯品| 亚洲丝袜第一页| 久久精品最新免费国产成人| 福利一区在线| 亚洲视频在线观看免费视频| 亚洲午夜福利精品无码| 日韩欧美中文在线| 亚洲成网站| 波多野结衣亚洲一区| 亚洲国产天堂久久综合226114| 国产网站一区二区三区| 久久国产精品夜色| 露脸国产精品自产在线播| 国产91麻豆免费观看| 18禁不卡免费网站| 国产在线98福利播放视频免费| 国产91麻豆视频| 一本久道久综合久久鬼色| 亚洲侵犯无码网址在线观看| 好紧好深好大乳无码中文字幕| 男女男精品视频| 国产无码性爱一区二区三区| 国产精彩视频在线观看| 人妻少妇乱子伦精品无码专区毛片| 一级成人欧美一区在线观看| 国产精品网址在线观看你懂的| www.av男人.com| 99精品免费在线|