基于Proe建立齒輪參數化模型庫畢業設計論文 - 下載本文

華東交通大學 畢業設計 論文

Pro/TOOLKIT中的可擴展數組吸取了常用數組的優點摒棄了常用數組的缺點。它采用每次分配內存時都以塊(block)為單位,一個塊大到足以容納幾個數組成員,在塊滿了后才重新分配內存這種方案。而且可擴展數組(expandable array)工具提供了一函數集,可適用于任意多的項目。其原理是在數組內存起始前加入一私有頭,在頭地址中寫入書簽信息(成員數和成員大小,塊數和塊的大小)。應用程序中的指針并不是私有頭的地址,而是第一個塊的地址。指針也只在塊之間移動,私有頭地址的信息有專門的函數提取和設定。

可擴展數組函數工具不僅可以對用戶自己的數組操作,而且用戶必須用它在應用程序和Pro/ENGINEER之間傳遞數據。因為可擴展數組指針(數組首地址)并不是用數組工具分配的連續地址的開頭,而是加入的一個私有頭,操作系統并不認為它為動態內存的有效地址。因此,不能用內存管理函數如realloc()和free()對該擴展數組進行操作。可擴展數組是一空指針,可以指向任何數據。它的基本類型為ProArray,定義為void*。函數ProArrayAlloc()用來分配內存給一個新的可擴展數組,該函數輸出一個指向含有數組成員的連續內存區的指針,可以用一般的內存操作函數(如memcpy()和memset())來對該內存讀寫。每次分配的最大內存是2Mb。在使用完后,用ProArrayFree()函數釋放之前給數組指定的ProArray內存。

3.2.3 寬字符

在Pro/TOOLKIT進行二次開發時,常常會遇到:單擊某個按鈕來調用某段程序卻導致Pro/ENGINEER崩潰的現象。很多情況是因為進行內存操作,卻沒有釋放內存或者內存越界使用而造成的,寬字符和動態內存分配是引起這類問題的主要原因。

何為寬字符?在Pro/ENGINEER中,所看到的以及輸入的字符都看做寬字符。寬字符用wchar_t來定義,它不同于char類型。Char類型的字長是一個字節,它不能把世界上所有的文字符號都表達出來,所以出現了寬字符。寬字符用兩個或者多個字節來表達一個文字符號,不同系統,寬字符的字節數是不一定相同的。Pro/ENGINEER有其自身的寬字符定義,因此在Pro/TOOLKIT程序中寬字符必須基于Pro/ENGINEER的寬字符的定義,為此,在程序的頭文件中必須包含頭文件pro_wchar_t.h,而這個文件又包含在protoolkit.h中,因此在編寫程序時,只需要包含protoolkit.h頭文件即可。但是包含了這個文件后,使用VC.NET來編譯程序,會出現以下提示錯誤: D:\\ptc3\\protoolkit\\includes\\ProWchar.h(34):error C2632: “short”后面的“wchar_t”非法 D:\\ptc3\\protoolkit\\includes\\ProWchar.h(34):warning:C4091: “typedef”:沒有聲明變量時忽略“unsigned short”的左邊 這是因為由VC.NET向導生成的默認項目使用的寬字符定義是VC.NET內置的wchar_t定義,與pro_wchar_t.h中定義的發生了沖突。因此以VC.NET作為Pro/TOOLKIT程序開發工具時,都需要對項目屬性進行設置,使之不在使用內置的wchar_t定義,詳細設置見后面章節。

3.2.4 動態內存分配

動態內存分配是在使用訪問函數以及其他一些函數經常會用到的,它主要用來獲得一組數據對象.為什么要使用動態內存分配呢?舉個例子,當要獲得模型所有的特征或者制定類型的特征時,事先并不知道由多少個這樣的特征,所以不能事先分配一個存儲容量,而應該在程序中根據實際的數量來分配.

華東交通大學 畢業設計 論文

C++中使用new關鍵字來操作動態內存的分配,使用delete語句來釋放分配的內存.delete只能釋放由new方法生成的動態內存空間,否則程序會產生運行期間錯誤,這種錯誤常常會導致程序立即關閉。

在Pro/TOOLKIT函數庫中專門定義了幾個用來動態分配數組的函數。打開幫助文檔,在左邊的對象類表中,找到ProArray對象,展開后可以看到這些函數,如下圖3-3所示。這些函數聲明的頭文件都是ProArray.h。具體的使用方法及其函數調用可以查看手冊。

圖 3-3 Pro/TOOLKIT 動態分配內存函數

3.2.5 常見函數形式

在前面指出,Pro/TOOLKIT函數命名約定為:<基本對象>+<操作對象>+<動作>,動作是指對特定的Pro/TOOLKIT對象執行的某種擦偶偶。常用的動作有以下幾種:

(1)Get 獲得:用來獲取對象的某個數據。這類函數的輸入是基本數據對象,輸出是基本數據對象的某一信息。常用的函數有:ProMdlCurrent(ProMdl *p_handle);ProDirectoryCurrentGet(ProPath path);ProMdlTypeGet(ProMdl model,ProMdlType *p_type);等。

(2)Set設置:用來設置對象的數據值。它也是以基本數據對象作為輸入,并輸入需要設置的變量的值。常用的函數有:ProDimensionValueSet();ProDimensionSymbolSet();ProParameterValueSet();ProMenubuttonVisiblitySet();等。

(3)Visit 訪問

Visit函數用來訪問數據對象內的一組數據集合,如訪問Pro/ENGINEER零件模型的特征。這類函數的輸入參數通常是要被訪問的數據對象以及訪問的數據對象以及訪問的函數和過濾函數。所謂的訪問過濾函數就是在訪問的過程中對數據進行過濾,把不滿足條件的對象去除掉;訪問動作函數經過過濾的對象進行處

華東交通大學 畢業設計 論文

理。這類函數常用的有:ProSolidFeatVisit();ProFeatureDimensionVisit();ProParameterVisit()等。

以上函數都可以在Pro/TOOLKIT的幫助文檔中查到的。 3.2.6 函數返回值

每一個函數都有返回值。在C/C++中的返回值有很多類型如void,int,bool。與C/C++不同的是,Pro/TOOLKIT的返回值基本上是ProError。ProError是一個枚舉類型數據,它定義了所有可能返回的值。如下所示: typedef enum ProErrors {

PRO_TK_NO_ERROR PRO_TK_GENERAL_ERROR PRO_TK_BAD_INPUTS PRO_TK_USER_ABORT PRO_TK_E_NOT_FOUND PRO_TK_E_FOUND PRO_TK_LINE_TOO_LONG PRO_TK_CONTINUE PRO_TK_BAD_CONTEXT PRO_TK_NOT_IMPLEMENTED PRO_TK_OUT_OF_MEMORY PRO_TK_COMM_ERROR PRO_TK_NO_CHANGE PRO_TK_SUPP_PARENTS PRO_TK_PICK_ABOVE PRO_TK_INVALID_DIR PRO_TK_INVALID_FILE PRO_TK_CANT_WRITE PRO_TK_INVALID_TYPE PRO_TK_INVALID_PTR PRO_TK_UNAV_SEC PRO_TK_INVALID_MATRIX PRO_TK_INVALID_NAME PRO_TK_NOT_EXIST PRO_TK_CANT_OPEN PRO_TK_ABORT PRO_TK_NOT_VALID PRO_TK_INVALID_ITEM PRO_TK_MSG_NOT_FOUND PRO_TK_MSG_NO_TRANS PRO_TK_MSG_FMT_ERROR PRO_TK_MSG_USER_QUIT PRO_TK_MSG_TOO_LONG PRO_TK_CANT_ACCESS PRO_TK_OBSOLETE_FUNC = 0, = -1, = -2, = -3, = -4, = -5, = -6, = -7, = -8, = -9, = -10, = -11, /* communication error */ = -12, = -13, = -14, = -15, = -16, = -17, = -18, = -19, = -20, = -21, = -22, = -23, = -24, = -25, = -26, = -27, = -28, = -29, = -30, = -31, = -32, = -33, = -34,

華東交通大學 畢業設計 論文

PRO_TK_NO_COORD_SYSTEM = -35, PRO_TK_E_AMBIGUOUS = -36, PRO_TK_E_DEADLOCK = -37, PRO_TK_E_BUSY = -38, PRO_TK_E_IN_USE = -39, PRO_TK_NO_LICENSE = -40, PRO_TK_BSPL_UNSUITABLE_DEGREE = -41, PRO_TK_BSPL_NON_STD_END_KNOTS = -42, PRO_TK_BSPL_MULTI_INNER_KNOTS = -43, PRO_TK_BAD_SRF_CRV = -44, PRO_TK_EMPTY = -45, PRO_TK_BAD_DIM_ATTACH = -46, PRO_TK_NOT_DISPLAYED = -47, PRO_TK_CANT_MODIFY = -48, PRO_TK_CHECKOUT_CONFLICT = -49, PRO_TK_CRE_VIEW_BAD_SHEET = -50, PRO_TK_CRE_VIEW_BAD_MODEL = -51, PRO_TK_CRE_VIEW_BAD_PARENT = -52, PRO_TK_CRE_VIEW_BAD_TYPE = -53, PRO_TK_CRE_VIEW_BAD_EXPLODE = -54, PRO_TK_UNATTACHED_FEATS = -55, PRO_TK_REGEN_AGAIN = -56, PRO_TK_DWGCREATE_ERRORS = -57, PRO_TK_UNSUPPORTED = -58,

PRO_TK_APP_NO_LICENSE = -92, PRO_TK_APP_XS_CALLBACKS = -93, PRO_TK_APP_STARTUP_FAIL = -94, PRO_TK_APP_INIT_FAIL = -95, PRO_TK_APP_VERSION_MISMATCH = -96, PRO_TK_APP_COMM_FAILURE = -97, PRO_TK_APP_NEW_VERSION = -98, PRO_TK_APP_UNLOCK = -99 } ProError, ProErr;

掌握函數的返回值對于以后的Pro/TOOLKIT函數使用是非常有幫助的。經常遇到的返回值有以下幾個:

(1)PRO_TK_NO_ERROR:表示函數執行成功; (2)PRO_TK_GENERAL_ERROR:一般錯誤; (3)PRO_TK_BAD_INPUTS:輸入錯誤;

(4)PRO_TK_E_NOT_FOUND:表示所要查找的對象不存在;

(5) PRO_TK_CONTINUE:這個返回值常在訪問動作函數和過濾函數中使用,意思是跳過當前訪問到的對象,繼續訪問下一個對象。 (6) PRO_TK_MSG_NOT_FOUND:表示文本信息沒有找到

華東交通大學 畢業設計 論文

3.3 本章小節

在本章中首先介紹了Pro/TOOLKIT的工作原理,講述了toolkit是如何和Pro/ENGINEER聯系起來工作的。然后介紹了Pro/TOOLKIT的基礎知識,講述了最基礎的對象、寬字符、內存分配、函數形式、函數返回值等,這對于后面正確使用Por/TOOLKIT進行二次開發是很有幫助的。

第四章 應用程序開發

4.1 應用程序開發基本過程

除了編輯源程序外,應用程序的開發還應該經歷編譯、注冊等基本過程。 用Pro/TOOLKIT開發的程序一般包括資源和程序兩個部分。資源包括注冊文件和菜單資源文件。注冊文件用于在Pro/ENGINEER啟動時動態加載Pro/TOOLKIT程序。菜單資源存儲了用戶定制的Pro/ENGINEER菜單信息,每個菜單項對應Pro/TOOLKIT程序中的一個功能函數。 4.1.1確定運行模式

Pro/TOOLKIT應用程序有兩種工作模式。在前面已經介紹了Pro/TOOLKIT的兩種工作模式(異步模式和同步模式)的工作方式,以及它們之間的優缺點等。最后,確定在本課題中采用同步模式的MFC DLL模式來開發應用程序。 4.1.2 設計菜單

程序運行模式確定(從而也確定了VC開發時的項目類型)后,就可以進行程序框架設計。對Pro/TOOLKIT應用程序來說,所謂程序框架設計,時指根據功能要求設計菜單,然后給每個菜單設計動作函數。

例如,一個零件模型建模系統,其功能要求通過定義零件主驅動參數、零件內部關系式來完成零件建模,定義主驅動參數和關系式集之后,要保存這些信息以及模型,供以后使用。這就要求能把主驅動參數、關系式、模型的存放位置加入到數據庫中,要使數據庫記錄這些信息,就需要一個提交模型的菜單。

功能分析完后,就可以設計出如圖5-1所示的菜單。 圖5-1

4.1.3 編寫信息文本

菜單設計完后就應該編寫菜單的信息資源文本。

信息資源文件用于提供菜單的標簽文本(包括其他語言版本的標簽)和幫助信息,如過要向Pro/ENGINEER中添加菜單,就必學使用信息資源文本,否則所添加的菜單不會在Pro/ENGINEER菜單欄顯示。信息資源文本有固定的格式,例如本課題中使用的資源文件就應當是如圖5-2所示:

第一行是引文版本下顯示的菜單文本標簽,第二行是在其他語言下顯示的菜單文本標簽。第三、第四航都寫成“#”號,是系統為將來的功能擴展預留空間。

菜單欄菜單只有菜單標簽,沒有幫助信息,所以只有一條信息。而一般的菜單項,





pk10冠军百期错一 云南十一选五开奖结果走势图 二中二平码免费公开 幸运快3官网软件下载 850金蟾捕鱼棋牌 星悦陕西麻将官方版 湖北十一选五开奖结 上海11选5任五遗漏号 贵州十一选五开奖查 浙江体彩6十1走势图 三分彩是真的假的 5分快3稳走势 澳洲幸运5全国开奖吗 美女麻将馆手机版 内蒙古11选五胣胆玩法 三多棋牌游戏? 福州全民麻将