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