基于ProE二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn)
基于ProE二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn),基于,proe,二次開發(fā),參數(shù),模型,實現(xiàn)
湘 潭 大 學(xué)
畢業(yè)論文(設(shè)計)任務(wù)書
論文(設(shè)計)題目: 基于Pro/E二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn)
學(xué) 號: 2003070101 學(xué)生姓名: 蘇芬 專 業(yè):機械設(shè)計制造及其自動化
指導(dǎo)教師姓名: 毛美姣 系主任: 周善炳
一、主要內(nèi)容及基本要求
1、利用Pro/ENGINEER參數(shù)化創(chuàng)建各種端蓋模型;
2、運用Visual C++6.0及Pro/TOOLKIT函數(shù)編制自定義菜單、端蓋參數(shù)話框;
3、運用Visual C++6.0及Pro/TOOLKIT函數(shù)編寫端蓋參數(shù)化程序;
4、完成所建自定義菜單和對話框;
5、提交畢業(yè)設(shè)計說明書一份,字數(shù)要求在8000字以上;
6、完成英文文獻翻譯3000字左右。
二、重點研究的問題
1、在Pro/ENGINEER平臺上參數(shù)化建立各種端蓋模型;
2、運用Visual C++6.0及Pro/TOOLKIT編制菜單及對話框;
3、端蓋的Pro/TOOLKIT程序設(shè)計。
三、進度安排
序號
各階段完成的內(nèi)容
完成時間
1
學(xué)習(xí)Pro/E建模方法、Pro/E的二次開發(fā)工具 (Pro/TOOLKIT)及Visual C++ 6.0的程序編制;
2006年3月至4月
2
Pro/TOOLKIT菜單及對話框的設(shè)計;
2006年4月上旬
3
運用Visual C++6.0及Pro/TOOLKIT函數(shù)編制端蓋參數(shù)化程序;
2006年4月中旬至5月下旬
4
撰寫畢業(yè)設(shè)計說明書
2006年5月下旬
5
準備答辯
2006年6月初
四、應(yīng)收集的資料及主要參考文獻
1、李世國.Pro/TOOLKIT程序設(shè)計.北京:機械工業(yè)出版社,2003.6.
2、吳立軍,陳波.Pro/ENGINEER二次開發(fā)技術(shù)基礎(chǔ).北京:電子工業(yè)出版社,2006.7
3、何健輝,董方鵬,實用Visual C++6.0教程.北京:清華出版社,2002.1.
4、劉瑩,張福潤.Pro/Engineer二次開發(fā)中用戶界面的制作[J].現(xiàn)代機械,2004,
5 Pro/TOOLKIT的幫助文檔
湘 潭 大 學(xué)
畢業(yè)論文(設(shè)計)鑒定意見
學(xué) 號: 20030101 學(xué)生姓名: 蘇芬 專 業(yè): 機械設(shè)計制造及其自動化
畢業(yè)論文(設(shè)計說明書) 59 頁 圖 表 16 張
論文(設(shè)計)題目: 基于Pro/E的二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn)
內(nèi)容提要:
機械產(chǎn)品的開發(fā)過程中會用到大量的通用件、標(biāo)準件、相似件,如何方便地建立這些常用
零部件的圖庫,利用已有的資源,花費較少的時間完成產(chǎn)品設(shè)計是用戶所關(guān)心的。建立這
些通用件、標(biāo)準件、相似件零件庫作為一項可行方案,一方面可以避免不同設(shè)計者的重復(fù)
勞動,提高設(shè)計效率;另一方面還可以提高設(shè)計的標(biāo)準化程度,減少錯誤發(fā)生率,縮短產(chǎn)
品開發(fā)周期。
本課題針對端蓋,提出了基于Pro/E平臺進行二次開發(fā)的一種可行方案。
本文先對與本課題相關(guān)的三位CAD作了一個簡介。然后,講述了Pro/TOOLKIT的基礎(chǔ)知識。
重點介紹了自定義菜單的生成,對話框的制作,Pro/TOOLKIT程序的執(zhí)行。接著根據(jù)本課
題的要求分析了端蓋參數(shù)化的整體設(shè)計思路。然后以一典型零件為例,較詳細地說明了利用
Pro/TOOLKIT及Visual C++6.0在Pro/ENGINEER中進行三維建模程序聯(lián)合開發(fā)的方法。建
模迅速,大大提高了這類通用件在Pro/E平臺上的設(shè)計效率。
指導(dǎo)教師評語
指導(dǎo)教師姓名(職稱):
年 月 日
答辯簡要情況及評語
答辯小組組長:
年 月 日
答辯委員會意見
答辯委員會主任:
年 月 日
湘潭大學(xué)畢業(yè)論文(設(shè)計)評閱表
學(xué)號 2003070101 姓名 蘇芬 專業(yè) 機械設(shè)計制造及其自動化
畢業(yè)論文(設(shè)計)題目: 基于Pro/E的二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn)
評價項目
評 價 內(nèi) 容
選 題
1.是否符合培養(yǎng)目標(biāo),體現(xiàn)學(xué)科、專業(yè)特點和教學(xué)計劃的基本要求,達到綜合訓(xùn)練的目的;
2.難度、份量是否適當(dāng)。
能 力
1.是否有查閱文獻、綜合歸納資料的能力;
2.是否有綜合運用知識的能力;
3.是否具備研究方案的設(shè)計能力、研究方法和手段的運用能力;
4.是否具備一定的外文與計算機應(yīng)用能力;
5.工科是否有經(jīng)濟分析能力。
論文質(zhì)量
1.立論是否正確,論述是否充分,結(jié)構(gòu)是否嚴謹合理;實驗是否正確,設(shè)計、計算、分析處理是否科學(xué);技術(shù)用語是否準確,符號是否統(tǒng)一,圖表是否完備、整潔、正確,引文是否規(guī)范;
2.文字是否通順,有無觀點提煉,綜合概括能力如何;
3.有無理論價值或?qū)嶋H應(yīng)用價值,有無創(chuàng)新之處。
工作量
工作量是否飽滿,含論文篇幅、圖紙等是否達到規(guī)定要求。
綜
合
評
價
評閱人姓名(職稱):
年 月 日
湘潭大學(xué)畢業(yè)設(shè)計
目錄
第一章 緒 論 1
1.1 三維CAD技術(shù) 1
1.1.1CAD技術(shù)的發(fā)展 1
1.2 課題背景及意義 2
1.3 應(yīng)用程序的開發(fā)工具 3
1.4 課題的主要研究內(nèi)容 3
第二章 Pro/TOOLKIT二次開發(fā)的基礎(chǔ)理論 3
2.1 Pro/TOOLKIT的基本知識 3
2.1.1 Pro/TOOLKIT簡介 3
2.1.2 Pro/TOOLKIT的工作模式 4
2.1.3 Pro/TOOLKIT對象和動作 4
2.1.4 對象句柄 4
2.1.5 Pro/TOOLKIT函數(shù)返回值 5
2.2 創(chuàng)建Pro/TOOLKIT應(yīng)用程序的基本方法 5
2.3 Pro/TOOLKIT信息文件的建立 6
2.4 編譯和連接設(shè)置 7
2.5 編制注冊文件及應(yīng)用程序的運行 7
2.5.1 編制注冊文件 7
2.5.2 應(yīng)用程序的運行 7
第三章 用戶界面設(shè)計 8
3.1 菜單的設(shè)計 8
3.1.1 向菜單欄添加菜單條 8
3.1.2 向菜單條下添加下級子菜單 8
3.1.3 端蓋菜單設(shè)計 8
3.2 對話框的設(shè)計 12
3.2.1 MFC對話框 12
3.2.2 UI對話框 12
3.3 端蓋對話框設(shè)計 14
3.3.1 構(gòu)想 14
3.3.2 創(chuàng)建方法 14
第四章 端蓋的開發(fā) 24
4.1 總體方案 24
4.2 基于三維模型的參數(shù)化程序設(shè)計分析 25
4.2.1 端蓋三維模型的建立 25
4.2.2 端蓋參數(shù)化程序設(shè)計 30
4.3 注冊并運行程序 36
4.4 操作流程 36
第五章 零件圖形清單 37
結(jié)束語 41
參考文獻 42
附錄I 程序清單 43
附錄Ⅱ 外文文獻翻譯 44
附錄Ⅲ 外文文獻原文 51
基于Pro/E二次開發(fā)的端蓋參數(shù)化模型的實現(xiàn)
摘 要:CAD技術(shù)在機械設(shè)計中發(fā)揮著越來越突出的作用。而三維實體模型比二維圖形能更直觀、更全面地反映設(shè)計意圖,并且在三維模型的基礎(chǔ)上可以進行零件裝配、干涉檢查、有限元分析、運動分析等高級的計算機輔設(shè)計工作,因此目前機械設(shè)計中廣泛采用三維設(shè)計。而目前我國Pro/E應(yīng)用日益普及,而二次開發(fā)嚴重滯后。所以,進行二次開發(fā)是非常必要的。
論文介紹了其二次開發(fā)工具Pro/TOOLKIT,并以凸緣端蓋為例,詳細的論述了應(yīng)用Pro/Toolkit進行菜單開發(fā)、對話框開發(fā),即UI對話框,以及如何在VC++環(huán)境下編制C語言程序以激活、調(diào)用對話框界面,設(shè)計出更加友好透明的用戶界面,方便快捷地實現(xiàn)端蓋的參數(shù)化設(shè)計和修改,準確再生出新的實體模型。
關(guān)鍵詞:Pro/ENGINEER、Visual C++、Pro/TOOLKIT、二次開發(fā)、端蓋
The Realization of Cover Parametric Parts Based on the Redevelopment of Pro/E
Abstract:CAD technology is made more and more use in mechanical design.Design idea can be expressed more visualized and more comprehensive in three-dimensional full-scale mock-up than in two-dimensional drawing ,and based on three dimensional full—scale mock up,many other advanced CAD such as component assembly,interference check,finite element analysis,motion analysis and so on can be proceed.Hence,three—dimensional design is widely used in mechanical design .However,at the present the application development severely lags behind the increasing popularization of the Pro/E application in our country .So, it is very necessary to develop the Pro/E application.
This paper introduces the customization tool Pro/TOOLKIT, and taking cover flange for example, This article provides an example to introduce the technique how to design UI Dialog Boxes By way of Pro/E's secondary development tool Pro/TOOLKIT as well as compile c programs to activate and pick up UI dialog boxes in Visual C++. Taking Pro/Toolkit as development tool, a friendly design interface of Cover is established. This paper investigates the method of establishing parametric 3 D model and programming based on 3D model in Pro/E,auto-modeling of 3D parts is realized using Pro/Toolkit.
Keywords:Pro/ENGINEER、Visual C++、Pro/TOOLKIT 、secondary development
第一章 緒 論
1.1 三維CAD技術(shù)
設(shè)計和生產(chǎn)的方法隨著計算機的迅速發(fā)展每天都在發(fā)生著顯著的變化。以前許多只能靠手工完成的作業(yè),逐漸通過計算機實現(xiàn)了高效化和高精度化。這種利用計算機來達到高效化、高精度化,實現(xiàn)自動化設(shè)計、生產(chǎn)以及解析計算的方法稱為CAD(Computer Aided Design,計算機輔助設(shè)計)。CAD是指利用計算機的硬件和軟件進行的設(shè)計活動,它從根本上改變了過去的手工繪圖、發(fā)圖、憑圖紙組織整個生產(chǎn)過程的技術(shù)管理方式,使之變?yōu)橐越y(tǒng)一的產(chǎn)品數(shù)據(jù)庫為核心的交互式產(chǎn)品設(shè)計、分析、制造和維護的過程。它的迅速發(fā)展和廣泛應(yīng)用,給工程設(shè)計制造業(yè)帶來了蓬勃生機,使傳統(tǒng)的產(chǎn)品設(shè)計方法與生產(chǎn)組織模式發(fā)生了深刻的變革。
1.1.1CAD技術(shù)的發(fā)展
CAD技術(shù)起步于50年代后期,自從計算機出現(xiàn)之后人們就不斷地將計算機技術(shù)引入機械設(shè)計、制造領(lǐng)域。因為它順應(yīng)生產(chǎn)力的發(fā)展,在其產(chǎn)生之后就得到了迅速地發(fā)展。CAD技術(shù)經(jīng)歷了四次飛躍:曲面造型系統(tǒng)、實體造型技術(shù)、參數(shù)化技術(shù)、變量化技術(shù)。
(1)曲面造型系統(tǒng)
70年代是飛機和汽車工業(yè)的蓬勃發(fā)展時期。期間飛機及汽車的制造中遇到了大量的自由曲面問題,此時法國人提出了貝賽爾算法,法國的達索飛機制造公司的開發(fā)者們借此算法在二維繪圖系統(tǒng)的基礎(chǔ)上,開發(fā)出以表面模型為特點的自由曲面建模方法,推出了三維曲面造型系統(tǒng)CATIA。
(2)實體造型技術(shù)
表面模型基本上解決CAM的問題,但是由于表面模型技術(shù)只能表達形體的表面信息,很難準確地表達如質(zhì)量、重心、慣性矩等零件的其他特性?;趯AD一體化技術(shù)發(fā)展的探索,SDRC公司于1979年發(fā)布了世界上第一個完全基于實體造型技術(shù)的大型CAD軟件-I-DEAS。實體造型技術(shù)能夠精確表達零件的全部屬性,給設(shè)計帶來了很大的方便。
(3)參數(shù)化技術(shù)
正當(dāng)實體造型技術(shù)在CAD系統(tǒng)中廣泛運用時,出現(xiàn)了一種比無約束自由造型更好的算法-參數(shù)化實體造型方法。它主要的特點是:基于特征、全尺寸約束、全數(shù)據(jù)相關(guān)、尺寸驅(qū)動設(shè)計修改。參數(shù)化技術(shù)徹底克服了自由緘默的無約束狀態(tài),由尺寸決定實體造型的幾何形狀。尺寸驅(qū)動已經(jīng)成為當(dāng)今造型系統(tǒng)的基本功能。如果想修改零件形狀的話,只需修改一下尺寸的數(shù)值就可以實現(xiàn)形狀上的改變。這種新構(gòu)想最先在PTC公司(Parametric Technology Corp)的軟件PRO/ENGINEER中成為現(xiàn)實。由于參數(shù)化技術(shù)的成功應(yīng)用,使得它很快成為CAD業(yè)界的標(biāo)準,許多軟件廠商紛紛追趕。
(4) 變量化技術(shù)
變量化造型技術(shù)保留了參數(shù)化技術(shù)基于特征、全數(shù)據(jù)相關(guān)、尺寸驅(qū)動設(shè)計修改的優(yōu)點,但是在約束定義方面做了一定的改變。變量化造型技術(shù)將所需定義的尺寸“參數(shù)”進一步區(qū)分為形狀約束和尺寸約束,而不僅僅是用尺寸來約束全部幾何。通常在新產(chǎn)品開發(fā)的概念設(shè)計階段,設(shè)計者首先考慮的是設(shè)計思想及概念,并將其體現(xiàn)在某些幾何形狀之中。但是這些幾何形狀的嚴格的尺寸定位關(guān)系并不能在設(shè)計的初始階段完全確定,所以希望在初始階段能夠允許欠尺寸約束的存在。事實上,參數(shù)化技術(shù)和變量化技術(shù)已經(jīng)成為了當(dāng)今主流CAD軟件的兩大流派。兩種造型理論相互依存,共同發(fā)展。我國 CAD 技術(shù)的引進是從60年代開始的,最早起步于航空工業(yè),最近幾年發(fā)展很快,現(xiàn)已在機械、電子、建筑、汽車、服裝等行業(yè)逐步進入實用階段。
1.2 課題背景及意義
Pro /ENGINEER是美國PTC(Parametric Technology Corporation)公司于1988年開發(fā)的參數(shù)化設(shè)計系統(tǒng),是一套由設(shè)計至生產(chǎn)的機械自動化軟件。參數(shù)化設(shè)計就是將零件尺寸的設(shè)計用參數(shù)來描述,并在設(shè)計修改時通過修改參數(shù)的數(shù)值來更改零件的外形。Pro/ENGINEER與傳統(tǒng)的CAD系統(tǒng)僅提供繪圖工具有著極大的不同,它提供了一套完整的機械產(chǎn)品解決方案,包括機械設(shè)計、板金設(shè)計、加工制造、機構(gòu)分析、有限元分析等,它使產(chǎn)品的設(shè)計效率大大提高,使產(chǎn)品在設(shè)計初期具有更多的靈活性,保證在日后根據(jù)系統(tǒng)要求進行相應(yīng)的更改和計算;另外在產(chǎn)品的設(shè)計方案階段,可以形象的表現(xiàn)系統(tǒng)的組成特點,而在產(chǎn)品的生產(chǎn)階段可以方便與加工中心數(shù)據(jù)連接。
Pro/ENGINEER的特性如下:3D實體模型,單一數(shù)據(jù)庫,以特征作為設(shè)計的單位, 參數(shù)式設(shè)計,數(shù)據(jù)管理(Data Management),裝配管理(Assemble Management),工程數(shù)據(jù)庫再利用(Engineering Data Reuse),易用性(Ease of Use),硬件獨立性(Hardware Independence)。
由于Pro/ENGINEER的功能強大并且通用性非常強,然而,由于Pro/ENGINEER軟件的通用性,使得該軟件在進行具體的產(chǎn)品設(shè)計時感到不方便。對系列化產(chǎn)品,可以通過抽取關(guān)鍵的參數(shù)值,再依設(shè)計規(guī)范計算出各尺寸值并傳遞給下級零件和子裝配,自動的將模型建造出來。為了使Pro/ENGINEER軟件能在特定的企業(yè)單位的特定產(chǎn)品設(shè)計中最大限度的發(fā)揮潛力,創(chuàng)造效益,需Pro/ENGINEER進行二次開發(fā),換句話說,二次開發(fā)就是對Pro/ENGINEER進一步的充實、完善。基于上述原因,利用Pro/TOOLKIT工具箱及VC++開發(fā)操作簡單的端蓋是很有必要。
1.3 應(yīng)用程序的開發(fā)工具
系統(tǒng)程序模塊的設(shè)計選擇Visual C++6.0作為開發(fā)平臺。Visual C++6.0是運行于Windows上的交互式可視化集成開發(fā)環(huán)境,是美國Microsoft Visual Studio的一部分。像其它的可視化開發(fā)環(huán)境一樣,Visual C++6.0集程序的代碼編輯編譯連接調(diào)試于一體,給編程人員提供了一個完整而又方便的開發(fā)界面和許多有效的輔助開發(fā)工具。VC++6.0的應(yīng)用程序向?qū)Вˋpp Wizard)可以為很大一部分類型的程序提供框架代碼,用戶不需要書寫代碼,只需要幾個按鈕就可以生成一個完整的可以運行的程序。在Pro/TOOLKIT中,PTC向用戶提供了大量的C語言函數(shù)庫,函數(shù)采用面向?qū)ο蟮娘L(fēng)格。通過調(diào)用這些底層函數(shù),用戶能方便而又安全地訪問Pro/ENGINEER的數(shù)據(jù)庫及內(nèi)部應(yīng)用程序,進行二次開發(fā),擴展一些特定功能。
1.4 課題的主要研究內(nèi)容
本課題的主要研究內(nèi)容是端蓋的開發(fā)設(shè)計,當(dāng)用戶選擇不同的樣式后,應(yīng)用程序可以在基礎(chǔ)模型上自動生成相應(yīng)的端蓋。具體工作包括:
(1)Pro/TOOLKIT基本特點和基本數(shù)據(jù)結(jié)構(gòu)的研究。分析Pro/TOOLKIT內(nèi)部的基本數(shù)據(jù)結(jié)構(gòu)、功能函數(shù)及其使用方法;探討Pro/TOOLKIT中的一些基本的自定義對象。
(2)用戶界面的設(shè)計。研究菜單信息文件,制作端蓋的菜單界面;研究對話框資源文件,創(chuàng)建主對話框,并在主對話框中彈出一個自定義對話框;研究Pro/TOOLKIT與Visual C++6.0的接口技術(shù);在VC中制作Pro/TOOLKIT用戶界面。
(3)參數(shù)化建模的研究。Pro/ENGINEER軟件對于每個模型都有一個主要設(shè)計步驟和參數(shù)列表,所以要先繪制三維模型,定出參數(shù)列表;設(shè)計端蓋程序,實現(xiàn)自動加載菜單、選擇不同的端蓋、彈出對話框、修改端蓋模型參數(shù)值、生成零件等功能。
第二章 Pro/TOOLKIT二次開發(fā)的基礎(chǔ)理論
2.1 Pro/TOOLKIT的基本知識
2.1.1 Pro/TOOLKIT簡介
Pro/TOOLKIT是PTC公司為Pro/ENGINEER軟件提供的用戶化開發(fā)工具箱,該工具箱為用戶程序及第三方程序提供了與Pro/ENGINEER的無縫連接。用戶程序或第三方的程序是用C語言編寫的。Pro/TOOLKIT提供了一個C語言的函數(shù)庫,該函數(shù)庫能夠使用戶或第三方的應(yīng)用程序以一種可控的、安全的方式訪問Pro/ENGINEER的數(shù)據(jù)庫和應(yīng)用程序。用戶或第三方通過C程序代碼擴充Pro/ENGINEER系統(tǒng)的功能,開發(fā)基于Pro/ENGINEER系統(tǒng)的應(yīng)用程序模塊,從而滿足用戶的特殊要求。Pro/TOOLKIT采用的是功能強大的面向?qū)ο蟮姆绞絹砭帉懙?。因此,用來在Pro/ENGINEER和應(yīng)用程序之間傳遞信息的數(shù)據(jù)結(jié)構(gòu)對應(yīng)用程序來講是不可見的,而只能通過Pro/TOOLKIT中的函數(shù)來訪問。Pro/Toolkit支持在windows2000NT/XP操作系統(tǒng)中使用C和C++語言設(shè)計程序,采用Microsoft Visual C++6.0的集成環(huán)境下完成程序的設(shè)計、調(diào)試和編譯。
2.1.2 Pro/TOOLKIT的工作模式
Pro/TOOLKIT有兩種工作模式,即同步模式和異步模式。
同步模式分為兩種模式,一種是標(biāo)準的使用模式,即DLL模式。Pro/TOOLKIT應(yīng)用程序與Pro/ENGINEER的集成是通過DLL模式來實現(xiàn)的,在DLL模式中,通過編譯和連接Pro/TOOLKIT的C代碼生成一個目標(biāo)文件,該目標(biāo)文件在Pro/ENGINEER啟動時與Pro/ENGINEER連接在一起,就像是Pro/ENGINEER本身的程序一樣;Pro/TOOLKIT應(yīng)用程序和Pro/ENGINEER之間的信息交換是直接通過函數(shù)調(diào)用來實現(xiàn)的。另一種模式是多進程模式。
異步模式分為簡單異步模式和全異步模式。
本課題通過菜單對話框向Pro/ENGINEER發(fā)送消息,采用同步DLL模式。
2.1.3 Pro/TOOLKIT對象和動作
Pro/TOOLKIT采用面向?qū)ο蟮某绦蛟O(shè)計方法。對象 ( Object)和動作(Action)是Pro/TOOLKIT中最基本的概念。
Pro /T OO LKIT的對象實質(zhì)上是一種類型為結(jié)構(gòu)體的數(shù)據(jù),結(jié)構(gòu)體中的成員描述了該對象的屬性。所有對象的命名約定為Pro+<對象名>,其中對象名用英文單詞表示,第一個字母大寫,如ProFeature(特征對象)。
Pro/TOOLKIT對象執(zhí)行的某種特定操作稱為動作,動作的執(zhí)行是通過調(diào)用Pro/TOOLKIT函數(shù)庫提供的C函數(shù)來實現(xiàn)了。與動作相關(guān)的Pro/TOOLKIT函數(shù)名約定為:Pro+<對象名>+<動作>。特別要注意的是Pro/TOOLKIT函數(shù)的參數(shù)規(guī)則,規(guī)定為:ProFunction(參數(shù)1、參數(shù)2、參數(shù)3),其中第一個參數(shù)用來識別對象(通常為ID值),輸入?yún)?shù)在輸出參數(shù)之前。
2.1.4 對象句柄
每個Pro/TOOLKIT對象都對應(yīng)于一個結(jié)構(gòu)體,定義該結(jié)構(gòu)類型的一個具體的結(jié)構(gòu)體變量稱之對象句柄。按照對象句柄的定義和使用方式分成兩種類型:Ohandle(Opaque Handle,非透明句柄)和DHandle(Database Handle,數(shù)據(jù)結(jié)構(gòu)句柄)。
非透明句柄(Opaque Handle)是使用Pro/ENGINEER數(shù)據(jù)結(jié)構(gòu)的內(nèi)存地址引用Pro/ENGINEER對象,這種方式最簡單。使用非透明句柄Pro/TOOLKIT應(yīng)用程序只能獲得該對象的內(nèi)存地址,不能訪問該結(jié)構(gòu)體具體成員,其目的是防止PIDITOOLKIT應(yīng)用程序訪問結(jié)構(gòu)體中的成員。其特點是使用簡單高效,缺點是由于它是一個內(nèi)存指針,所以具有可變性。
數(shù)據(jù)結(jié)構(gòu)句柄(DatabaseH andle)則可訪問該對象結(jié)構(gòu)體的具體成員。數(shù)據(jù)結(jié)構(gòu)句柄是一個十分清晰的數(shù)據(jù)結(jié)構(gòu),它包含了足夠的信息— 包括類型、整型標(biāo)識符和指向所屬模型的句柄,由于數(shù)據(jù)結(jié)構(gòu)句柄至少包含一個整型標(biāo)識,所以它具有穩(wěn)定不變的優(yōu)點。當(dāng)利用Pro/TOOLKIT在Pro/ENGINEER中創(chuàng)建一個包含很多信息的對象時,非常重要的一點就是必須先建立該對象的所有相關(guān)信息,然后把這個對象添加到Pro/ENGINEER數(shù)據(jù)庫中去。然而采用面向?qū)ο蠹夹g(shù)的Pro/TOOLKIT不允許直接訪問這些結(jié)構(gòu)的內(nèi)容。
2.1.5 Pro/TOOLKIT函數(shù)返回值
大多數(shù)Pro/TOOLKIT函數(shù)的返回值類型為ProError,用來表示調(diào)用函數(shù)執(zhí)行狀態(tài)。最常用返回值是PRO_TK_NO_ERROR,表示函數(shù)調(diào)用成功。在程序中,通過檢查函數(shù)的返回值不僅便于在調(diào)試是找出錯誤,更重要的是可以避免在執(zhí)行時出現(xiàn)異常情況,提高了程序的可靠性。
2.2 創(chuàng)建Pro/TOOLKIT應(yīng)用程序的基本方法
創(chuàng)建基本方法;利用Make文件創(chuàng)建Pro/TOOLKIT應(yīng)用程序;利用VC向?qū)?chuàng)建Pro/TOOLKIT應(yīng)用程序。
采用Make文件的方法創(chuàng)建Pro/TOOLKIT應(yīng)用程序必須手工修改make文件,程序的設(shè)置與調(diào)試均不方便,且不能充分利用VC的資源。所以本課題利用VC向?qū)?chuàng)建Pro/TOOLKIT應(yīng)用程序。
在Visual C++6.0環(huán)境下新建一個dll工程。
(1)進入Visual C++6.0集成開發(fā)環(huán)境,選擇“File/New...”選項,啟動 “New”對話框。
在“New”對話框中選擇“Projects”選項卡,選擇MFC AppWizard(dll)項。在“Project nam”輸入工程文件名,在“Location”輸入框中輸入路徑。單擊OK按鈕。
(2)在“MFC AppWizard”對話框中選擇“Regular DLL using shared MFC DLL”單選框,使Pro/TOOLKIT應(yīng)用程序使用共享的MFC。單擊Finish按鈕,進入New Project Information窗口后,單擊OK按鈕,完成工程文件框架的建立。
(3)選擇FileView打開VC應(yīng)用程序向?qū)ё詣由沙绦蛭募?
VC應(yīng)用程序設(shè)計向?qū)г贔ileView中自動加入了ReadMe.txt、StdAfx.cpp和以工程文件名為前綴的cpp資源文件、def模塊定義文件以及rc資源文件等。如下圖2.1:
圖2.1 VC文件圖
2.3 Pro/TOOLKIT信息文件的建立
信息文件是一種ASCII碼文件,用來定義菜單項、菜單項提示等信息,可以用Word記事本和寫字板等文字處理軟件建立,也可在VC的集成開發(fā)環(huán)境中建立,但必須以純文本格式保存且信息文件以四行為一組。
其含義分別如下:
第一行:Pro/ENGINEER系統(tǒng)可以識別的關(guān)鍵字,該關(guān)鍵字必須與該信息文件函數(shù)中的相關(guān)字符串相同。
第二行:再菜單項或菜單項提示上顯示的英語文本。
第三行:另一種語言的譯文或為空。
第四行:當(dāng)前的Pro/ENGINEER版本為空。
其中,第二﹑第四行的語言顯示取決于系統(tǒng)環(huán)境變量lang的設(shè)置。同時,信息文件必須位于\text或\text\文件夾,為chinese-cn時表示信息為中文,為usascii表示信息為英語。由此,可以通過系統(tǒng)的環(huán)境變量控制顯示的語種,不必修改程序。
2.4 編譯和連接設(shè)置
設(shè)置包含文件路徑,加入“\PROTOOLKIT\INCLUDES”;設(shè)置庫文件路徑,加入“\PROTOOLKIT\I486_NT\OBJ”;設(shè)置連接所需庫文件,加入“mpr.lib protk_dll.lib”兩庫文件;在菜單“Project/Settings”的“Link”選項頁設(shè)定強制文件輸出,即選中“Force file output”的復(fù)選項。
2.5 編制注冊文件及應(yīng)用程序的運行
2.5.1 編制注冊文件
在Pro/ENGINEER中運行Pro/TOOLKIT應(yīng)用程序,必須先進行注冊。注冊文件的作用是向Pro/ENGINEER系統(tǒng)傳遞應(yīng)用程序的信息。一般可只選擇Name EXEC_FILE TEXT_DIR STARTUP ALLOW_STOP REVISION和END項即可。保存注冊文件時,要以.dat為擴展名。建立端蓋的注冊文件如圖2.2:
圖2.2 端蓋注冊文件圖
2.5.2 應(yīng)用程序的運行
1注冊運行分為自動注冊和手動注冊。端蓋采用自動注冊,并將注冊文件名取為“Protk.dat”將此文件位于Pro/ENGINEER的起始位置設(shè)定的目錄。其注冊文件設(shè)置DELAY_START的值為FALSE,應(yīng)用程序自動運行。
2卸載應(yīng)用程序。將注冊文件中ALLOW_STOP設(shè)為TRUE,可以手工終止運行。如果啟動應(yīng)用程序失敗,可以選擇信息按鈕來顯示應(yīng)用程序的有關(guān)注冊信息,以便找出錯的原因。
第三章 用戶界面設(shè)計
Pro/ENGINEER可以利用Pro/TOOLKIT提供的菜單UI對話框以及VC的可視化界面技術(shù),設(shè)計出方便實用的人機交互界面,從而大大提高系統(tǒng)的使用效率。在設(shè)計人機交互界面時,要盡量能使操作自然簡便快捷。
3.1 菜單的設(shè)計
菜單是Pro/ENGINEER的主要用戶界面,Pro/TOOLKIT提供了一系列菜單操作函數(shù),允許應(yīng)用程序創(chuàng)建何管理菜單。在應(yīng)用Pro/TOOLKIT對Pro/ENGINEER進行開發(fā)的過程中,添加用戶自定義菜單是最常用的技術(shù)。菜單在Pro/ENGINEER界面上的生成代表著動態(tài)鏈接庫加載成功,這是進行后續(xù)工作的基礎(chǔ)。
3.1.1 向菜單欄添加菜單條
Pro/ENGINEER是一個不斷發(fā)展不斷更新的軟件,某個版本下有的菜單在另外一個版本下可能沒有,因此,如果用戶自定義菜單依賴某個菜單條,很有可能在另外一個版本中就不能正常使用。這樣只能修改應(yīng)用程序來適應(yīng)這種變化,其軟件的通用性較差。因此,決定在Pro/ENGINEER界面上添加新的菜單條。
菜單條是Pro/ENGINEER菜單體系的最頂層菜單,其創(chuàng)建的方法是:直接調(diào)用ProMenubarMenuAdd()函數(shù)向Pro/ENGINEER添加所需的菜單,要實現(xiàn)函數(shù)的功能,就必須將改按鈕和命令捆綁在一起。該命令調(diào)用某個函數(shù)實現(xiàn)按鈕功能,在Pro/TOOLKIT中,完成命令添加的函數(shù)是ProCmdAction(),函數(shù)調(diào)用成功返回PRO_TK_NO_ERROR(0),否則返回PRO_TK_GENERAL_ERROR(-1)。
3.1.2 向菜單條下添加下級子菜單
端蓋分為嵌入悶蓋、嵌入透蓋、凸緣悶、凸緣透蓋,不可能每個都建立一個菜單條。因此必須添加下級菜單以達到建立一個自然便捷的界面的目的。調(diào)用ProMenubarmenuMenuAdd()函數(shù),并在此菜單下添加菜單項。
3.1.3 端蓋菜單設(shè)計
在旁邊插入一個菜單條(UserMenu) “Pro/e二次開發(fā)(&E)”,在其下添加一個下級子菜單(SubMenu )“端蓋”。在子菜單下建立四個菜單按鈕:PushButton1嵌入悶蓋,PushButton2嵌入透蓋,PushButton3凸緣悶蓋,PushButton4凸緣透蓋。建立的程序清單如下:
/*=========================================================*\
FUNCTION: user_initialize()
\*=========================================================*/
extern "C" int user_initialize()
{
ProError status;
ProFileName MsgFile;
uiCmdCmdId PushButton_cmd_id1,PushButton_cmd_id2,
PushButton_cmd_id3,PushButton_cmd_id4;
ProStringToWstring(MsgFile, "Message.txt");//設(shè)置菜單信息文件名
/*=========================================================*\
添加菜單條
\*=========================================================*/
status=ProMenubarMenuAdd ("UserMenuBar", "UserMenu",
"Utilities", PRO_B_TRUE, MsgFile);
/*=======================================================*\
菜單條的下級子菜單設(shè)置
\*=========================================================*/
//添加下級子菜單項
ProMenubarmenuMenuAdd("UserMenuBar", "SubMenu", "SubMenu",
NULL, PRO_B_TRUE, MsgFile);
//設(shè)置菜單按鈕的動作函數(shù)
ProCmdActionAdd("PushButtonAct1",(uiCmdCmdActFn)Duangai1Fn,
uiCmdPrioDefault,AccessAvailable,
PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id1);
//添加菜單按鈕
ProMenubarmenuPushbuttonAdd("SubMenu", "PushButton1", "PushButton1",
"Adding a push button to the ProE menu bar", NULL,
PRO_B_TRUE, PushButton_cmd_id1, MsgFile);
//設(shè)置菜單按鈕的動作函數(shù)
ProCmdActionAdd("PushButtonAct2",(uiCmdCmdActFn)Duangai2Fn,
uiCmdPrioDefault,AccessAvailable,
PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id2);
//添加菜單按鈕
ProMenubarmenuPushbuttonAdd("SubMenu","PushButton2","PushButton2",
"Adding another push button to the ProE menu bar",NULL,
PRO_B_TRUE, PushButton_cmd_id2, MsgFile);
//設(shè)置菜單按鈕的動作函數(shù)
ProCmdActionAdd("PushButtonAct3",(uiCmdCmdActFn)Duangai3Fn,
uiCmdPrioDefault,AccessAvailable,
PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id3);
//添加菜單按鈕
ProMenubarmenuPushbuttonAdd("SubMenu","PushButton3","PushButton3",
"Adding the third push button to the ProE menu bar",NULL,
PRO_B_TRUE, PushButton_cmd_id3, MsgFile);
//設(shè)置菜單按鈕的動作函數(shù)
ProCmdActionAdd("PushButtonAct4",(uiCmdCmdActFn)Duangai4Fn,
uiCmdPrioDefault,AccessAvailable,
PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id4);
//添加菜單按鈕
ProMenubarmenuPushbuttonAdd("SubMenu","PushButton4", "PushButton4",
"Adding the forth push button to the ProE menu bar", NULL,
PRO_B_TRUE, PushButton_cmd_id4, MsgFile);
return status;
}
/*=========================================================*\
FUNCTION: user_terminate()
\*=========================================================*/
extern "C" void user_terminate()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
}
/*=========================================================*\
FUNCTION: AccessAvailable (菜單項的訪問權(quán)限設(shè)置:可選)
\*=========================================================*/
static uiCmdAccessState AccessAvailable (uiCmdAccessMode access_mode)
{
return (ACCESS_AVAILABLE);
}
建立端蓋的菜單信息文件(中文版)如下:
SubMenu
SubMenu
端蓋
#
PushButton1
PushButton1
嵌入悶蓋
#
Adding a push button to the ProE menu bar
Adding a push button to the ProE menu bar
嵌入悶蓋
#
PushButton2
PushButton2
嵌入透蓋
#
Adding another push button to the ProE menu bar
Adding another push button to the ProE menu bar
嵌入透蓋
#
PushButton3
PushButton3
凸緣悶蓋
#
Adding the third push button to the ProE menu bar
Adding the third push button to the ProE menu bar
凸緣悶蓋
#
PushButton4
PushButton4
凸緣透蓋
#
Adding the forth push button to the ProE menu bar
Adding the forth push button to the ProE menu bar
凸緣透蓋
#
創(chuàng)建端蓋菜單如下圖3.1:
圖3.1 模型菜單圖
3.2 對話框的設(shè)計
彈出式對話框是目前最先進最流行的一種人機交互方式,它能提供圖形與文字共存的可視化環(huán)境,使操作更為自然快捷。在進行Pro/TOOLKIT程序設(shè)計時,有兩種方法建立對話框,一種是通過VC提供的MFC可視化對話框設(shè)計技術(shù),另一種是通過Pro/TOOLKIT提供的用戶界面對話框(User Interface Dialog Boxes,簡稱UI對話框)。
3.2.1 MFC對話框
MFC是VC++程序的一個重要的軟件資源,為開發(fā)Windows應(yīng)用程序提供了強大的支持,使用MFC可以實現(xiàn)程序界面的可視化設(shè)計。MFC對話框作為一種窗口,具有窗口的一切功能,與UI對話框相比,使用MFC對話框界面布局更加容易,設(shè)計﹑調(diào)試都比較容易。但它建立的對話框與Pro/ENGINEER的風(fēng)格不一樣,不利于用戶的操作。
3.2.2 UI對話框
利用UI對話框技術(shù)可以在Pro/TOOLKIT應(yīng)用程序中設(shè)計出風(fēng)格與Pro/ENGINEER系統(tǒng)本身具有的對話框相似的人機交互界面??刂瞥绦蛴肅或C++語言編寫,用來在Pro/ENGINEER環(huán)境裝入對話框資源、顯示對話框、設(shè)置動作和退出對話框等。UI對話框的設(shè)計主要涉及兩個方面:一是按界面的布局編寫資源文件;二是針對UI對話框的功能編寫相應(yīng)的控制程序。
1.資源文件
資源文件是用來定義和描述UI對話框外觀及屬性的文本文件。主要內(nèi)容包括UI對話框的組成部分元件(component)或稱控件、各元件的屬性定義和元件的布局形式。編寫資源文件進應(yīng)注意以下幾點:(1)區(qū)分大小寫;(2)括號必須成對;(3)對話框名應(yīng)與資源文件名相同;(4)“!”后面的內(nèi)容為注釋部分,對對話框的定義沒有任何影響;(5)資源文件可用任何一種支持純文本格式的文字處理軟件編寫,如Word、寫字板或記事本等,也可以用VC應(yīng)用程序設(shè)計向?qū)Ь帉?。無論用何種方法編寫,都必須按純文本格式保存,且擴展名為.res。保存在工作目錄下所建VC程序中Release/text//resource子目錄中。其中取決于當(dāng)前使用的語言(chinese_cn或usascii)。
資源文件的結(jié)構(gòu)如下:
(Dialog<對話框>
(Componens
……
)
(Resources
……
)
)
Dialog<對話框>為頂層語句,下面主要包含兩段構(gòu)成,其中原件段(Components)聲明了該對話框的所有元件,資源段(Resource)分為定義了各元件的屬性及布局。
資源文件僅僅是對UI對話框的描述,必須通過Pro/TOOLKIT應(yīng)用程序來裝入、顯示和控制對話框。分為創(chuàng)建和終止兩部分。
創(chuàng)建對話框的過程如下:
(1)調(diào)用ProUIDialogCreate()函數(shù)將資源文件裝入內(nèi)在;
(2)調(diào)用對話框零件的動作函數(shù)設(shè)置指定元件的動作函數(shù);
(3)調(diào)用ProUIDialogActivate()函數(shù)顯示和激活對話框;
(4)調(diào)用ProUIDialogDestroy()函數(shù)從內(nèi)在清除對話框資源。
這四步是創(chuàng)建一個UI對話框的最基本步驟。其中第二步可實現(xiàn)數(shù)據(jù)的調(diào)用,它的動作設(shè)置函數(shù)與元件類型有關(guān),其主要目的是設(shè)置用戶在對話框界面上對某一元素進行操作時,調(diào)用的動作函數(shù)。在完成這四步的情況下,可以終止UI對話框,具體方法是調(diào)用ProUIDialogExit()函數(shù)。
3.3 端蓋對話框設(shè)計
3.3.1 構(gòu)想
1.在主對話框中添加以下元件。
(1)Label1與Label1.1標(biāo)簽,用于提示圖形。Lable1其圖形顯示零件圖形,該圖形直接從三維模型中獲取。Label1.1顯示設(shè)計參數(shù)與尺寸的對應(yīng)關(guān)系,該圖形直接從三維模型中獲取,在圖形軟件中加上尺寸線和參數(shù)名后轉(zhuǎn)換為UI對話框支持的GIF格式(保存在resource子目錄)。Lable1其圖形命名為Duangai3.gif,Label1.1其圖形命名為Duangai3_1.gif。
(2)Label2標(biāo)簽,用于顯示參數(shù)名,命名規(guī)則為:設(shè)計參數(shù)名_Label。
(3)Separator分隔線
(4)PushButton1按鈕,用于生成模型。
(5)PushButton2按鈕,用于退出對話框。
(6)PushButton3按鈕,用于自定義對話框設(shè)計。
(7)InputPanel輸入框,用于表示參數(shù)值,命名規(guī)則為:設(shè)計參數(shù)名_Value。
其中兩個按鈕跟其他的按鈕用分隔線隔開。
2.在自定義對話框中添加以下元件。
(1)Label1.1與主對話框的設(shè)置相同。
(2)Label2標(biāo)簽,用于顯示參數(shù)名,命名規(guī)則為:設(shè)計參數(shù)名_Label。
(3)Separator分隔線
(4)PushButton1按鈕,用于生成模型。
(5)PushButton2按鈕,用于退出對話框。
(6)InputPanel輸入框,用于表示參數(shù)值,命名規(guī)則為:設(shè)計參數(shù)名_Value。
3.3.2 創(chuàng)建方法
其創(chuàng)建的方法是:編寫資源文件,文件擴展名為.res,用純文本格式保存在注冊文件中TEXT_DIR字段指定目錄下的\\resource子目錄。調(diào)用ProUIDialogCreate()函數(shù)將資源文件裝入內(nèi)存;調(diào)用ProUIPushbuttonActivateActionSet()函數(shù)設(shè)置按鈕的動作;調(diào)用ProUIDialogActivate()函數(shù)顯示和激活對話框;調(diào)用ProUIDialogDestroy()函數(shù)從內(nèi)存清除對話框資源; 調(diào)用 ParamsList()顯示模型的設(shè)計參數(shù);調(diào)用ParamGetAndShow()從零件模型中獲得參數(shù)值,并在相應(yīng)的輸入框中顯示;調(diào)用ParamUpdate()更新參數(shù)值。創(chuàng)建函數(shù)原型為:
ProError ProUIDialogCreate(char*dialog_name
char*resource)
ProError ProUIDialogActivate(char*dialog_name
int*status)
ProError ProUIDialogDestroy (char* dialog_name)
3端蓋資源文件
以凸緣悶蓋為例,其主對框資源文件如下:
!資源文件:Duangai3.res
(Dialog Duangai3
(Components !對話框元件聲明
(Label Image1)
(Label Image2)
(SubLayout Layout1)
(Separator Separator1)
(PushButton Update3)
(PushButton Cancel)
)
(Resources !對話框資源(屬性定義)
(Image1.Bitmap "Duangai3.1.gif")!零件尺寸與參數(shù)對應(yīng)圖
(Image1.TopOffset 10)
(Image1.LeftOffset 4)
(Image1.RightOffset 2)
(Image2.Bitmap "Duangai3.gif")!三位零件圖
(Image2.TopOffset 4)
(Image2.BottomOffset 8)
(Image2.LeftOffset 4)
(Image2.RightOffset 4)
(Update3.Label "生成模型(&U)")!生成模型按鈕
(Update3.Bitmap "cl_ok")
(Update3.TopOffset 4)
(Update3.BottomOffset 8)
(Update3.LeftOffset 4)
(Update3.RightOffset 4)
!Cancel按鈕屬性定義
(Cancel.Label "退出(&E)")
(Cancel.Bitmap "cl_cancel")
(Cancel.TopOffset 4)
(Cancel.BottomOffset 8)
(Cancel.LeftOffset 4)
(Cancel.RightOffset 4)
(Separator1.TopOffset 4)
(Separator1.BottomOffset 4)
(.Label "端蓋參數(shù)化設(shè)計") !對話框標(biāo)題
(.StartLocation 5)
(.Resizeable 0)
(.Layout !對話框元件的布局
(Grid (Rows 1 1 1) (Cols 1)
(Grid (Rows 1 ) (Cols 1 1)
Image1
(Grid (Rows 1 1 ) (Cols 1)
Layout1
Image2
)
)
Separator1
(Grid (Rows 1) (Cols 1 1)
Update3
Cancel
)
)
)
)
)
(Layout Layout1
(Components
(Label D_Label)
(OptionMenu D_Value)
(Label DA_Label)
(OptionMenu DA_Value)
(Label DB_Label)
(OptionMenu DB_Value)
(Label DC_Label)
(OptionMenu DC_Value)
(Label SD_Label)
(OptionMenu SD_Value)
(Label SB_Label)
(OptionMenu SB_Value)
(Label R_Label)
(OptionMenu R_Value)
(Label B_Label)
(OptionMenu B_Value)
(Label Userdefined3_Value)
(PushButton Userdefined3)
)
(Resources
(Userdefined3.Label "自定義")
(Userdefined3.TopOffset 4)
(Userdefined3.BottomOffset 8)
(Userdefined3.LeftOffset 4)
(Userdefined3.RightOffset 4)
(D_Label.AttachLeft True)
(D_Label.LeftOffset 4)
(D_Label.Label "D")
(DA_Label.AttachLeft True)
(DA_Label.LeftOffset 4)
(DA_Label.Label "DA")
(DB_Label.AttachLeft True)
(DB_Label.LeftOffset 4)
(DB_Label.Label "DB")
(DC_Label.AttachLeft True)
(DC_Label.LeftOffset 4)
(DC_Label.Label "DC")
(SD_Label.AttachLeft True)
(SD_Label.LeftOffset 4)
(SD_Label.Label "SD")
(SB_Label.AttachLeft True)
(SB_Label.LeftOffset 4)
(SB_Label.Label "SB")
(R_Label.AttachLeft True)
(R_Label.LeftOffset 4)
(R_Label.Label
收藏