基于ProE二次開發(fā)的端蓋參數(shù)化模型的實(shí)現(xiàn)
基于ProE二次開發(fā)的端蓋參數(shù)化模型的實(shí)現(xiàn),基于,proe,二次開發(fā),參數(shù),模型,實(shí)現(xiàn)
湘潭大學(xué)畢業(yè)設(shè)計(jì)
目錄
第一章 緒 論 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的基本知識(shí) 3
2.1.1 Pro/TOOLKIT簡介 3
2.1.2 Pro/TOOLKIT的工作模式 4
2.1.3 Pro/TOOLKIT對(duì)象和動(dòng)作 4
2.1.4 對(duì)象句柄 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 編制注冊(cè)文件及應(yīng)用程序的運(yùn)行 7
2.5.1 編制注冊(cè)文件 7
2.5.2 應(yīng)用程序的運(yùn)行 7
第三章 用戶界面設(shè)計(jì) 8
3.1 菜單的設(shè)計(jì) 8
3.1.1 向菜單欄添加菜單條 8
3.1.2 向菜單條下添加下級(jí)子菜單 8
3.1.3 端蓋菜單設(shè)計(jì) 8
3.2 對(duì)話框的設(shè)計(jì) 12
3.2.1 MFC對(duì)話框 12
3.2.2 UI對(duì)話框 12
3.3 端蓋對(duì)話框設(shè)計(jì) 14
3.3.1 構(gòu)想 14
3.3.2 創(chuàng)建方法 14
第四章 端蓋的開發(fā) 24
4.1 總體方案 24
4.2 基于三維模型的參數(shù)化程序設(shè)計(jì)分析 25
4.2.1 端蓋三維模型的建立 25
4.2.2 端蓋參數(shù)化程序設(shè)計(jì) 30
4.3 注冊(cè)并運(yùn)行程序 36
4.4 操作流程 36
第五章 零件圖形清單 37
結(jié)束語 41
參考文獻(xiàn) 42
附錄I 程序清單 43
附錄Ⅱ 外文文獻(xiàn)翻譯 44
附錄Ⅲ 外文文獻(xiàn)原文 51
基于Pro/E二次開發(fā)的端蓋參數(shù)化模型的實(shí)現(xiàn)
摘 要:CAD技術(shù)在機(jī)械設(shè)計(jì)中發(fā)揮著越來越突出的作用。而三維實(shí)體模型比二維圖形能更直觀、更全面地反映設(shè)計(jì)意圖,并且在三維模型的基礎(chǔ)上可以進(jìn)行零件裝配、干涉檢查、有限元分析、運(yùn)動(dòng)分析等高級(jí)的計(jì)算機(jī)輔設(shè)計(jì)工作,因此目前機(jī)械設(shè)計(jì)中廣泛采用三維設(shè)計(jì)。而目前我國Pro/E應(yīng)用日益普及,而二次開發(fā)嚴(yán)重滯后。所以,進(jìn)行二次開發(fā)是非常必要的。
論文介紹了其二次開發(fā)工具Pro/TOOLKIT,并以凸緣端蓋為例,詳細(xì)的論述了應(yīng)用Pro/Toolkit進(jìn)行菜單開發(fā)、對(duì)話框開發(fā),即UI對(duì)話框,以及如何在VC++環(huán)境下編制C語言程序以激活、調(diào)用對(duì)話框界面,設(shè)計(jì)出更加友好透明的用戶界面,方便快捷地實(shí)現(xiàn)端蓋的參數(shù)化設(shè)計(jì)和修改,準(zhǔn)確再生出新的實(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è)計(jì)和生產(chǎn)的方法隨著計(jì)算機(jī)的迅速發(fā)展每天都在發(fā)生著顯著的變化。以前許多只能靠手工完成的作業(yè),逐漸通過計(jì)算機(jī)實(shí)現(xiàn)了高效化和高精度化。這種利用計(jì)算機(jī)來達(dá)到高效化、高精度化,實(shí)現(xiàn)自動(dòng)化設(shè)計(jì)、生產(chǎn)以及解析計(jì)算的方法稱為CAD(Computer Aided Design,計(jì)算機(jī)輔助設(shè)計(jì))。CAD是指利用計(jì)算機(jī)的硬件和軟件進(jìn)行的設(shè)計(jì)活動(dòng),它從根本上改變了過去的手工繪圖、發(fā)圖、憑圖紙組織整個(gè)生產(chǎn)過程的技術(shù)管理方式,使之變?yōu)橐越y(tǒng)一的產(chǎn)品數(shù)據(jù)庫為核心的交互式產(chǎn)品設(shè)計(jì)、分析、制造和維護(hù)的過程。它的迅速發(fā)展和廣泛應(yīng)用,給工程設(shè)計(jì)制造業(yè)帶來了蓬勃生機(jī),使傳統(tǒng)的產(chǎn)品設(shè)計(jì)方法與生產(chǎn)組織模式發(fā)生了深刻的變革。
1.1.1CAD技術(shù)的發(fā)展
CAD技術(shù)起步于50年代后期,自從計(jì)算機(jī)出現(xiàn)之后人們就不斷地將計(jì)算機(jī)技術(shù)引入機(jī)械設(shè)計(jì)、制造領(lǐng)域。因?yàn)樗槕?yīng)生產(chǎn)力的發(fā)展,在其產(chǎn)生之后就得到了迅速地發(fā)展。CAD技術(shù)經(jīng)歷了四次飛躍:曲面造型系統(tǒng)、實(shí)體造型技術(shù)、參數(shù)化技術(shù)、變量化技術(shù)。
(1)曲面造型系統(tǒng)
70年代是飛機(jī)和汽車工業(yè)的蓬勃發(fā)展時(shí)期。期間飛機(jī)及汽車的制造中遇到了大量的自由曲面問題,此時(shí)法國人提出了貝賽爾算法,法國的達(dá)索飛機(jī)制造公司的開發(fā)者們借此算法在二維繪圖系統(tǒng)的基礎(chǔ)上,開發(fā)出以表面模型為特點(diǎn)的自由曲面建模方法,推出了三維曲面造型系統(tǒng)CATIA。
(2)實(shí)體造型技術(shù)
表面模型基本上解決CAM的問題,但是由于表面模型技術(shù)只能表達(dá)形體的表面信息,很難準(zhǔn)確地表達(dá)如質(zhì)量、重心、慣性矩等零件的其他特性?;趯?duì)CAD一體化技術(shù)發(fā)展的探索,SDRC公司于1979年發(fā)布了世界上第一個(gè)完全基于實(shí)體造型技術(shù)的大型CAD軟件-I-DEAS。實(shí)體造型技術(shù)能夠精確表達(dá)零件的全部屬性,給設(shè)計(jì)帶來了很大的方便。
(3)參數(shù)化技術(shù)
正當(dāng)實(shí)體造型技術(shù)在CAD系統(tǒng)中廣泛運(yùn)用時(shí),出現(xiàn)了一種比無約束自由造型更好的算法-參數(shù)化實(shí)體造型方法。它主要的特點(diǎn)是:基于特征、全尺寸約束、全數(shù)據(jù)相關(guān)、尺寸驅(qū)動(dòng)設(shè)計(jì)修改。參數(shù)化技術(shù)徹底克服了自由緘默的無約束狀態(tài),由尺寸決定實(shí)體造型的幾何形狀。尺寸驅(qū)動(dòng)已經(jīng)成為當(dāng)今造型系統(tǒng)的基本功能。如果想修改零件形狀的話,只需修改一下尺寸的數(shù)值就可以實(shí)現(xiàn)形狀上的改變。這種新構(gòu)想最先在PTC公司(Parametric Technology Corp)的軟件PRO/ENGINEER中成為現(xiàn)實(shí)。由于參數(shù)化技術(shù)的成功應(yīng)用,使得它很快成為CAD業(yè)界的標(biāo)準(zhǔn),許多軟件廠商紛紛追趕。
(4) 變量化技術(shù)
變量化造型技術(shù)保留了參數(shù)化技術(shù)基于特征、全數(shù)據(jù)相關(guān)、尺寸驅(qū)動(dòng)設(shè)計(jì)修改的優(yōu)點(diǎn),但是在約束定義方面做了一定的改變。變量化造型技術(shù)將所需定義的尺寸“參數(shù)”進(jìn)一步區(qū)分為形狀約束和尺寸約束,而不僅僅是用尺寸來約束全部幾何。通常在新產(chǎn)品開發(fā)的概念設(shè)計(jì)階段,設(shè)計(jì)者首先考慮的是設(shè)計(jì)思想及概念,并將其體現(xiàn)在某些幾何形狀之中。但是這些幾何形狀的嚴(yán)格的尺寸定位關(guān)系并不能在設(shè)計(jì)的初始階段完全確定,所以希望在初始階段能夠允許欠尺寸約束的存在。事實(shí)上,參數(shù)化技術(shù)和變量化技術(shù)已經(jīng)成為了當(dāng)今主流CAD軟件的兩大流派。兩種造型理論相互依存,共同發(fā)展。我國 CAD 技術(shù)的引進(jìn)是從60年代開始的,最早起步于航空工業(yè),最近幾年發(fā)展很快,現(xiàn)已在機(jī)械、電子、建筑、汽車、服裝等行業(yè)逐步進(jìn)入實(shí)用階段。
1.2 課題背景及意義
Pro /ENGINEER是美國PTC(Parametric Technology Corporation)公司于1988年開發(fā)的參數(shù)化設(shè)計(jì)系統(tǒng),是一套由設(shè)計(jì)至生產(chǎn)的機(jī)械自動(dòng)化軟件。參數(shù)化設(shè)計(jì)就是將零件尺寸的設(shè)計(jì)用參數(shù)來描述,并在設(shè)計(jì)修改時(shí)通過修改參數(shù)的數(shù)值來更改零件的外形。Pro/ENGINEER與傳統(tǒng)的CAD系統(tǒng)僅提供繪圖工具有著極大的不同,它提供了一套完整的機(jī)械產(chǎn)品解決方案,包括機(jī)械設(shè)計(jì)、板金設(shè)計(jì)、加工制造、機(jī)構(gòu)分析、有限元分析等,它使產(chǎn)品的設(shè)計(jì)效率大大提高,使產(chǎn)品在設(shè)計(jì)初期具有更多的靈活性,保證在日后根據(jù)系統(tǒng)要求進(jìn)行相應(yīng)的更改和計(jì)算;另外在產(chǎn)品的設(shè)計(jì)方案階段,可以形象的表現(xiàn)系統(tǒng)的組成特點(diǎn),而在產(chǎn)品的生產(chǎn)階段可以方便與加工中心數(shù)據(jù)連接。
Pro/ENGINEER的特性如下:3D實(shí)體模型,單一數(shù)據(jù)庫,以特征作為設(shè)計(jì)的單位, 參數(shù)式設(shè)計(jì),數(shù)據(jù)管理(Data Management),裝配管理(Assemble Management),工程數(shù)據(jù)庫再利用(Engineering Data Reuse),易用性(Ease of Use),硬件獨(dú)立性(Hardware Independence)。
由于Pro/ENGINEER的功能強(qiáng)大并且通用性非常強(qiáng),然而,由于Pro/ENGINEER軟件的通用性,使得該軟件在進(jìn)行具體的產(chǎn)品設(shè)計(jì)時(shí)感到不方便。對(duì)系列化產(chǎn)品,可以通過抽取關(guān)鍵的參數(shù)值,再依設(shè)計(jì)規(guī)范計(jì)算出各尺寸值并傳遞給下級(jí)零件和子裝配,自動(dòng)的將模型建造出來。為了使Pro/ENGINEER軟件能在特定的企業(yè)單位的特定產(chǎn)品設(shè)計(jì)中最大限度的發(fā)揮潛力,創(chuàng)造效益,需Pro/ENGINEER進(jìn)行二次開發(fā),換句話說,二次開發(fā)就是對(duì)Pro/ENGINEER進(jìn)一步的充實(shí)、完善?;谏鲜鲈?,利用Pro/TOOLKIT工具箱及VC++開發(fā)操作簡單的端蓋是很有必要。
1.3 應(yīng)用程序的開發(fā)工具
系統(tǒng)程序模塊的設(shè)計(jì)選擇Visual C++6.0作為開發(fā)平臺(tái)。Visual C++6.0是運(yùn)行于Windows上的交互式可視化集成開發(fā)環(huán)境,是美國Microsoft Visual Studio的一部分。像其它的可視化開發(fā)環(huán)境一樣,Visual C++6.0集程序的代碼編輯編譯連接調(diào)試于一體,給編程人員提供了一個(gè)完整而又方便的開發(fā)界面和許多有效的輔助開發(fā)工具。VC++6.0的應(yīng)用程序向?qū)Вˋpp Wizard)可以為很大一部分類型的程序提供框架代碼,用戶不需要書寫代碼,只需要幾個(gè)按鈕就可以生成一個(gè)完整的可以運(yùn)行的程序。在Pro/TOOLKIT中,PTC向用戶提供了大量的C語言函數(shù)庫,函數(shù)采用面向?qū)ο蟮娘L(fēng)格。通過調(diào)用這些底層函數(shù),用戶能方便而又安全地訪問Pro/ENGINEER的數(shù)據(jù)庫及內(nèi)部應(yīng)用程序,進(jìn)行二次開發(fā),擴(kuò)展一些特定功能。
1.4 課題的主要研究內(nèi)容
本課題的主要研究內(nèi)容是端蓋的開發(fā)設(shè)計(jì),當(dāng)用戶選擇不同的樣式后,應(yīng)用程序可以在基礎(chǔ)模型上自動(dòng)生成相應(yīng)的端蓋。具體工作包括:
(1)Pro/TOOLKIT基本特點(diǎn)和基本數(shù)據(jù)結(jié)構(gòu)的研究。分析Pro/TOOLKIT內(nèi)部的基本數(shù)據(jù)結(jié)構(gòu)、功能函數(shù)及其使用方法;探討Pro/TOOLKIT中的一些基本的自定義對(duì)象。
(2)用戶界面的設(shè)計(jì)。研究菜單信息文件,制作端蓋的菜單界面;研究對(duì)話框資源文件,創(chuàng)建主對(duì)話框,并在主對(duì)話框中彈出一個(gè)自定義對(duì)話框;研究Pro/TOOLKIT與Visual C++6.0的接口技術(shù);在VC中制作Pro/TOOLKIT用戶界面。
(3)參數(shù)化建模的研究。Pro/ENGINEER軟件對(duì)于每個(gè)模型都有一個(gè)主要設(shè)計(jì)步驟和參數(shù)列表,所以要先繪制三維模型,定出參數(shù)列表;設(shè)計(jì)端蓋程序,實(shí)現(xiàn)自動(dòng)加載菜單、選擇不同的端蓋、彈出對(duì)話框、修改端蓋模型參數(shù)值、生成零件等功能。
第二章 Pro/TOOLKIT二次開發(fā)的基礎(chǔ)理論
2.1 Pro/TOOLKIT的基本知識(shí)
2.1.1 Pro/TOOLKIT簡介
Pro/TOOLKIT是PTC公司為Pro/ENGINEER軟件提供的用戶化開發(fā)工具箱,該工具箱為用戶程序及第三方程序提供了與Pro/ENGINEER的無縫連接。用戶程序或第三方的程序是用C語言編寫的。Pro/TOOLKIT提供了一個(gè)C語言的函數(shù)庫,該函數(shù)庫能夠使用戶或第三方的應(yīng)用程序以一種可控的、安全的方式訪問Pro/ENGINEER的數(shù)據(jù)庫和應(yīng)用程序。用戶或第三方通過C程序代碼擴(kuò)充Pro/ENGINEER系統(tǒng)的功能,開發(fā)基于Pro/ENGINEER系統(tǒng)的應(yīng)用程序模塊,從而滿足用戶的特殊要求。Pro/TOOLKIT采用的是功能強(qiáng)大的面向?qū)ο蟮姆绞絹砭帉懙?。因此,用來在Pro/ENGINEER和應(yīng)用程序之間傳遞信息的數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)用程序來講是不可見的,而只能通過Pro/TOOLKIT中的函數(shù)來訪問。Pro/Toolkit支持在windows2000NT/XP操作系統(tǒng)中使用C和C++語言設(shè)計(jì)程序,采用Microsoft Visual C++6.0的集成環(huán)境下完成程序的設(shè)計(jì)、調(diào)試和編譯。
2.1.2 Pro/TOOLKIT的工作模式
Pro/TOOLKIT有兩種工作模式,即同步模式和異步模式。
同步模式分為兩種模式,一種是標(biāo)準(zhǔn)的使用模式,即DLL模式。Pro/TOOLKIT應(yīng)用程序與Pro/ENGINEER的集成是通過DLL模式來實(shí)現(xiàn)的,在DLL模式中,通過編譯和連接Pro/TOOLKIT的C代碼生成一個(gè)目標(biāo)文件,該目標(biāo)文件在Pro/ENGINEER啟動(dòng)時(shí)與Pro/ENGINEER連接在一起,就像是Pro/ENGINEER本身的程序一樣;Pro/TOOLKIT應(yīng)用程序和Pro/ENGINEER之間的信息交換是直接通過函數(shù)調(diào)用來實(shí)現(xiàn)的。另一種模式是多進(jìn)程模式。
異步模式分為簡單異步模式和全異步模式。
本課題通過菜單對(duì)話框向Pro/ENGINEER發(fā)送消息,采用同步DLL模式。
2.1.3 Pro/TOOLKIT對(duì)象和動(dòng)作
Pro/TOOLKIT采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。對(duì)象 ( Object)和動(dòng)作(Action)是Pro/TOOLKIT中最基本的概念。
Pro /T OO LKIT的對(duì)象實(shí)質(zhì)上是一種類型為結(jié)構(gòu)體的數(shù)據(jù),結(jié)構(gòu)體中的成員描述了該對(duì)象的屬性。所有對(duì)象的命名約定為Pro+<對(duì)象名>,其中對(duì)象名用英文單詞表示,第一個(gè)字母大寫,如ProFeature(特征對(duì)象)。
Pro/TOOLKIT對(duì)象執(zhí)行的某種特定操作稱為動(dòng)作,動(dòng)作的執(zhí)行是通過調(diào)用Pro/TOOLKIT函數(shù)庫提供的C函數(shù)來實(shí)現(xiàn)了。與動(dòng)作相關(guān)的Pro/TOOLKIT函數(shù)名約定為:Pro+<對(duì)象名>+<動(dòng)作>。特別要注意的是Pro/TOOLKIT函數(shù)的參數(shù)規(guī)則,規(guī)定為:ProFunction(參數(shù)1、參數(shù)2、參數(shù)3),其中第一個(gè)參數(shù)用來識(shí)別對(duì)象(通常為ID值),輸入?yún)?shù)在輸出參數(shù)之前。
2.1.4 對(duì)象句柄
每個(gè)Pro/TOOLKIT對(duì)象都對(duì)應(yīng)于一個(gè)結(jié)構(gòu)體,定義該結(jié)構(gòu)類型的一個(gè)具體的結(jié)構(gòu)體變量稱之對(duì)象句柄。按照對(duì)象句柄的定義和使用方式分成兩種類型:Ohandle(Opaque Handle,非透明句柄)和DHandle(Database Handle,數(shù)據(jù)結(jié)構(gòu)句柄)。
非透明句柄(Opaque Handle)是使用Pro/ENGINEER數(shù)據(jù)結(jié)構(gòu)的內(nèi)存地址引用Pro/ENGINEER對(duì)象,這種方式最簡單。使用非透明句柄Pro/TOOLKIT應(yīng)用程序只能獲得該對(duì)象的內(nèi)存地址,不能訪問該結(jié)構(gòu)體具體成員,其目的是防止PIDITOOLKIT應(yīng)用程序訪問結(jié)構(gòu)體中的成員。其特點(diǎn)是使用簡單高效,缺點(diǎn)是由于它是一個(gè)內(nèi)存指針,所以具有可變性。
數(shù)據(jù)結(jié)構(gòu)句柄(DatabaseH andle)則可訪問該對(duì)象結(jié)構(gòu)體的具體成員。數(shù)據(jù)結(jié)構(gòu)句柄是一個(gè)十分清晰的數(shù)據(jù)結(jié)構(gòu),它包含了足夠的信息— 包括類型、整型標(biāo)識(shí)符和指向所屬模型的句柄,由于數(shù)據(jù)結(jié)構(gòu)句柄至少包含一個(gè)整型標(biāo)識(shí),所以它具有穩(wěn)定不變的優(yōu)點(diǎn)。當(dāng)利用Pro/TOOLKIT在Pro/ENGINEER中創(chuàng)建一個(gè)包含很多信息的對(duì)象時(shí),非常重要的一點(diǎn)就是必須先建立該對(duì)象的所有相關(guān)信息,然后把這個(gè)對(duì)象添加到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)試是找出錯(cuò)誤,更重要的是可以避免在執(zhí)行時(shí)出現(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)境下新建一個(gè)dll工程。
(1)進(jìn)入Visual C++6.0集成開發(fā)環(huán)境,選擇“File/New...”選項(xiàng),啟動(dòng) “New”對(duì)話框。
在“New”對(duì)話框中選擇“Projects”選項(xiàng)卡,選擇MFC AppWizard(dll)項(xiàng)。在“Project nam”輸入工程文件名,在“Location”輸入框中輸入路徑。單擊OK按鈕。
(2)在“MFC AppWizard”對(duì)話框中選擇“Regular DLL using shared MFC DLL”單選框,使Pro/TOOLKIT應(yīng)用程序使用共享的MFC。單擊Finish按鈕,進(jìn)入New Project Information窗口后,單擊OK按鈕,完成工程文件框架的建立。
(3)選擇FileView打開VC應(yīng)用程序向?qū)ё詣?dòng)生成程序文件.
VC應(yīng)用程序設(shè)計(jì)向?qū)г贔ileView中自動(dòng)加入了ReadMe.txt、StdAfx.cpp和以工程文件名為前綴的cpp資源文件、def模塊定義文件以及rc資源文件等。如下圖2.1:
圖2.1 VC文件圖
2.3 Pro/TOOLKIT信息文件的建立
信息文件是一種ASCII碼文件,用來定義菜單項(xiàng)、菜單項(xiàng)提示等信息,可以用Word記事本和寫字板等文字處理軟件建立,也可在VC的集成開發(fā)環(huán)境中建立,但必須以純文本格式保存且信息文件以四行為一組。
其含義分別如下:
第一行:Pro/ENGINEER系統(tǒng)可以識(shí)別的關(guān)鍵字,該關(guān)鍵字必須與該信息文件函數(shù)中的相關(guān)字符串相同。
第二行:再菜單項(xiàng)或菜單項(xiàng)提示上顯示的英語文本。
第三行:另一種語言的譯文或?yàn)榭铡?
第四行:當(dāng)前的Pro/ENGINEER版本為空。
其中,第二﹑第四行的語言顯示取決于系統(tǒng)環(huán)境變量lang的設(shè)置。同時(shí),信息文件必須位于\text或\text\文件夾,為chinese-cn時(shí)表示信息為中文,為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”選項(xiàng)頁設(shè)定強(qiáng)制文件輸出,即選中“Force file output”的復(fù)選項(xiàng)。
2.5 編制注冊(cè)文件及應(yīng)用程序的運(yùn)行
2.5.1 編制注冊(cè)文件
在Pro/ENGINEER中運(yùn)行Pro/TOOLKIT應(yīng)用程序,必須先進(jìn)行注冊(cè)。注冊(cè)文件的作用是向Pro/ENGINEER系統(tǒng)傳遞應(yīng)用程序的信息。一般可只選擇Name EXEC_FILE TEXT_DIR STARTUP ALLOW_STOP REVISION和END項(xiàng)即可。保存注冊(cè)文件時(shí),要以.dat為擴(kuò)展名。建立端蓋的注冊(cè)文件如圖2.2:
圖2.2 端蓋注冊(cè)文件圖
2.5.2 應(yīng)用程序的運(yùn)行
1注冊(cè)運(yùn)行分為自動(dòng)注冊(cè)和手動(dòng)注冊(cè)。端蓋采用自動(dòng)注冊(cè),并將注冊(cè)文件名取為“Protk.dat”將此文件位于Pro/ENGINEER的起始位置設(shè)定的目錄。其注冊(cè)文件設(shè)置DELAY_START的值為FALSE,應(yīng)用程序自動(dòng)運(yùn)行。
2卸載應(yīng)用程序。將注冊(cè)文件中ALLOW_STOP設(shè)為TRUE,可以手工終止運(yùn)行。如果啟動(dòng)應(yīng)用程序失敗,可以選擇信息按鈕來顯示應(yīng)用程序的有關(guān)注冊(cè)信息,以便找出錯(cuò)的原因。
第三章 用戶界面設(shè)計(jì)
Pro/ENGINEER可以利用Pro/TOOLKIT提供的菜單UI對(duì)話框以及VC的可視化界面技術(shù),設(shè)計(jì)出方便實(shí)用的人機(jī)交互界面,從而大大提高系統(tǒng)的使用效率。在設(shè)計(jì)人機(jī)交互界面時(shí),要盡量能使操作自然簡便快捷。
3.1 菜單的設(shè)計(jì)
菜單是Pro/ENGINEER的主要用戶界面,Pro/TOOLKIT提供了一系列菜單操作函數(shù),允許應(yīng)用程序創(chuàng)建何管理菜單。在應(yīng)用Pro/TOOLKIT對(duì)Pro/ENGINEER進(jìn)行開發(fā)的過程中,添加用戶自定義菜單是最常用的技術(shù)。菜單在Pro/ENGINEER界面上的生成代表著動(dòng)態(tài)鏈接庫加載成功,這是進(jìn)行后續(xù)工作的基礎(chǔ)。
3.1.1 向菜單欄添加菜單條
Pro/ENGINEER是一個(gè)不斷發(fā)展不斷更新的軟件,某個(gè)版本下有的菜單在另外一個(gè)版本下可能沒有,因此,如果用戶自定義菜單依賴某個(gè)菜單條,很有可能在另外一個(gè)版本中就不能正常使用。這樣只能修改應(yīng)用程序來適應(yīng)這種變化,其軟件的通用性較差。因此,決定在Pro/ENGINEER界面上添加新的菜單條。
菜單條是Pro/ENGINEER菜單體系的最頂層菜單,其創(chuàng)建的方法是:直接調(diào)用ProMenubarMenuAdd()函數(shù)向Pro/ENGINEER添加所需的菜單,要實(shí)現(xiàn)函數(shù)的功能,就必須將改按鈕和命令捆綁在一起。該命令調(diào)用某個(gè)函數(shù)實(shí)現(xiàn)按鈕功能,在Pro/TOOLKIT中,完成命令添加的函數(shù)是ProCmdAction(),函數(shù)調(diào)用成功返回PRO_TK_NO_ERROR(0),否則返回PRO_TK_GENERAL_ERROR(-1)。
3.1.2 向菜單條下添加下級(jí)子菜單
端蓋分為嵌入悶蓋、嵌入透蓋、凸緣悶、凸緣透蓋,不可能每個(gè)都建立一個(gè)菜單條。因此必須添加下級(jí)菜單以達(dá)到建立一個(gè)自然便捷的界面的目的。調(diào)用ProMenubarmenuMenuAdd()函數(shù),并在此菜單下添加菜單項(xiàng)。
3.1.3 端蓋菜單設(shè)計(jì)
在旁邊插入一個(gè)菜單條(UserMenu) “Pro/e二次開發(fā)(&E)”,在其下添加一個(gè)下級(jí)子菜單(SubMenu )“端蓋”。在子菜單下建立四個(gè)菜單按鈕: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);
/*=======================================================*\
菜單條的下級(jí)子菜單設(shè)置
\*=========================================================*/
//添加下級(jí)子菜單項(xiàng)
ProMenubarmenuMenuAdd("UserMenuBar", "SubMenu", "SubMenu",
NULL, PRO_B_TRUE, MsgFile);
//設(shè)置菜單按鈕的動(dòng)作函數(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è)置菜單按鈕的動(dòng)作函數(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è)置菜單按鈕的動(dòng)作函數(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è)置菜單按鈕的動(dòng)作函數(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 (菜單項(xiàng)的訪問權(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 對(duì)話框的設(shè)計(jì)
彈出式對(duì)話框是目前最先進(jìn)最流行的一種人機(jī)交互方式,它能提供圖形與文字共存的可視化環(huán)境,使操作更為自然快捷。在進(jìn)行Pro/TOOLKIT程序設(shè)計(jì)時(shí),有兩種方法建立對(duì)話框,一種是通過VC提供的MFC可視化對(duì)話框設(shè)計(jì)技術(shù),另一種是通過Pro/TOOLKIT提供的用戶界面對(duì)話框(User Interface Dialog Boxes,簡稱UI對(duì)話框)。
3.2.1 MFC對(duì)話框
MFC是VC++程序的一個(gè)重要的軟件資源,為開發(fā)Windows應(yīng)用程序提供了強(qiáng)大的支持,使用MFC可以實(shí)現(xiàn)程序界面的可視化設(shè)計(jì)。MFC對(duì)話框作為一種窗口,具有窗口的一切功能,與UI對(duì)話框相比,使用MFC對(duì)話框界面布局更加容易,設(shè)計(jì)﹑調(diào)試都比較容易。但它建立的對(duì)話框與Pro/ENGINEER的風(fēng)格不一樣,不利于用戶的操作。
3.2.2 UI對(duì)話框
利用UI對(duì)話框技術(shù)可以在Pro/TOOLKIT應(yīng)用程序中設(shè)計(jì)出風(fēng)格與Pro/ENGINEER系統(tǒng)本身具有的對(duì)話框相似的人機(jī)交互界面??刂瞥绦蛴肅或C++語言編寫,用來在Pro/ENGINEER環(huán)境裝入對(duì)話框資源、顯示對(duì)話框、設(shè)置動(dòng)作和退出對(duì)話框等。UI對(duì)話框的設(shè)計(jì)主要涉及兩個(gè)方面:一是按界面的布局編寫資源文件;二是針對(duì)UI對(duì)話框的功能編寫相應(yīng)的控制程序。
1.資源文件
資源文件是用來定義和描述UI對(duì)話框外觀及屬性的文本文件。主要內(nèi)容包括UI對(duì)話框的組成部分元件(component)或稱控件、各元件的屬性定義和元件的布局形式。編寫資源文件進(jìn)應(yīng)注意以下幾點(diǎn):(1)區(qū)分大小寫;(2)括號(hào)必須成對(duì);(3)對(duì)話框名應(yīng)與資源文件名相同;(4)“!”后面的內(nèi)容為注釋部分,對(duì)對(duì)話框的定義沒有任何影響;(5)資源文件可用任何一種支持純文本格式的文字處理軟件編寫,如Word、寫字板或記事本等,也可以用VC應(yīng)用程序設(shè)計(jì)向?qū)Ь帉?。無論用何種方法編寫,都必須按純文本格式保存,且擴(kuò)展名為.res。保存在工作目錄下所建VC程序中Release/text//resource子目錄中。其中取決于當(dāng)前使用的語言(chinese_cn或usascii)。
資源文件的結(jié)構(gòu)如下:
(Dialog<對(duì)話框>
(Componens
……
)
(Resources
……
)
)
Dialog<對(duì)話框>為頂層語句,下面主要包含兩段構(gòu)成,其中原件段(Components)聲明了該對(duì)話框的所有元件,資源段(Resource)分為定義了各元件的屬性及布局。
資源文件僅僅是對(duì)UI對(duì)話框的描述,必須通過Pro/TOOLKIT應(yīng)用程序來裝入、顯示和控制對(duì)話框。分為創(chuàng)建和終止兩部分。
創(chuàng)建對(duì)話框的過程如下:
(1)調(diào)用ProUIDialogCreate()函數(shù)將資源文件裝入內(nèi)在;
(2)調(diào)用對(duì)話框零件的動(dòng)作函數(shù)設(shè)置指定元件的動(dòng)作函數(shù);
(3)調(diào)用ProUIDialogActivate()函數(shù)顯示和激活對(duì)話框;
(4)調(diào)用ProUIDialogDestroy()函數(shù)從內(nèi)在清除對(duì)話框資源。
這四步是創(chuàng)建一個(gè)UI對(duì)話框的最基本步驟。其中第二步可實(shí)現(xiàn)數(shù)據(jù)的調(diào)用,它的動(dòng)作設(shè)置函數(shù)與元件類型有關(guān),其主要目的是設(shè)置用戶在對(duì)話框界面上對(duì)某一元素進(jìn)行操作時(shí),調(diào)用的動(dòng)作函數(shù)。在完成這四步的情況下,可以終止UI對(duì)話框,具體方法是調(diào)用ProUIDialogExit()函數(shù)。
3.3 端蓋對(duì)話框設(shè)計(jì)
3.3.1 構(gòu)想
1.在主對(duì)話框中添加以下元件。
(1)Label1與Label1.1標(biāo)簽,用于提示圖形。Lable1其圖形顯示零件圖形,該圖形直接從三維模型中獲取。Label1.1顯示設(shè)計(jì)參數(shù)與尺寸的對(duì)應(yīng)關(guān)系,該圖形直接從三維模型中獲取,在圖形軟件中加上尺寸線和參數(shù)名后轉(zhuǎn)換為UI對(duì)話框支持的GIF格式(保存在resource子目錄)。Lable1其圖形命名為Duangai3.gif,Label1.1其圖形命名為Duangai3_1.gif。
(2)Label2標(biāo)簽,用于顯示參數(shù)名,命名規(guī)則為:設(shè)計(jì)參數(shù)名_Label。
(3)Separator分隔線
(4)PushButton1按鈕,用于生成模型。
(5)PushButton2按鈕,用于退出對(duì)話框。
(6)PushButton3按鈕,用于自定義對(duì)話框設(shè)計(jì)。
(7)InputPanel輸入框,用于表示參數(shù)值,命名規(guī)則為:設(shè)計(jì)參數(shù)名_Value。
其中兩個(gè)按鈕跟其他的按鈕用分隔線隔開。
2.在自定義對(duì)話框中添加以下元件。
(1)Label1.1與主對(duì)話框的設(shè)置相同。
(2)Label2標(biāo)簽,用于顯示參數(shù)名,命名規(guī)則為:設(shè)計(jì)參數(shù)名_Label。
(3)Separator分隔線
(4)PushButton1按鈕,用于生成模型。
(5)PushButton2按鈕,用于退出對(duì)話框。
(6)InputPanel輸入框,用于表示參數(shù)值,命名規(guī)則為:設(shè)計(jì)參數(shù)名_Value。
3.3.2 創(chuàng)建方法
其創(chuàng)建的方法是:編寫資源文件,文件擴(kuò)展名為.res,用純文本格式保存在注冊(cè)文件中TEXT_DIR字段指定目錄下的\\resource子目錄。調(diào)用ProUIDialogCreate()函數(shù)將資源文件裝入內(nèi)存;調(diào)用ProUIPushbuttonActivateActionSet()函數(shù)設(shè)置按鈕的動(dòng)作;調(diào)用ProUIDialogActivate()函數(shù)顯示和激活對(duì)話框;調(diào)用ProUIDialogDestroy()函數(shù)從內(nèi)存清除對(duì)話框資源; 調(diào)用 ParamsList()顯示模型的設(shè)計(jì)參數(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端蓋資源文件
以凸緣悶蓋為例,其主對(duì)框資源文件如下:
!資源文件:Duangai3.res
(Dialog Duangai3
(Components !對(duì)話框元件聲明
(Label Image1)
(Label Image2)
(SubLayout Layout1)
(Separator Separator1)
(PushButton Update3)
(PushButton Cancel)
)
(Resources !對(duì)話框資源(屬性定義)
(Image1.Bitmap "Duangai3.1.gif")!零件尺寸與參數(shù)對(duì)應(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è)計(jì)") !對(duì)話框標(biāo)題
(.StartLocation 5)
(.Resizeable 0)
(.Layout !對(duì)話框元件的布局
(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
收藏